September 24, 2012

Alıntı (Salih Dinçer):

>

Örneğin heapify()'dan geçirilen verinin 'postorder'ı (soldan sağa dairesel dizilim) şöyle:
Belki de 'preorder'dan (kökden başlayarak dizilim) bahsetmeliydim. Bu durumda heapify()'dan geçen verinin ağaçta bulunma sıraları şöyle:

Alıntı (Pre-order):

>

[ 750, 500, 100, 75, 50, 30, 10, 5, 15, 20, 25, 40, 35, 45, 70, 60, 55, 65, 85, 80, 90, 400, 300, 250, 200, 150, 350, 450, 700, 600, 550, 650 ]

İlk naklettiğim sırada ise şöyle:

Alıntı (Pre-order):

>

[ 90, 10, 5, 20, 15, 30, 25, 40, 35, 50, 45, 60, 55, 70, 65, 80, 75, 85, 100, 200, 150, 300, 250, 400, 350, 500, 450, 600, 550, 700, 650, 750 ]

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 25, 2012

Sondaki uzun soru dışında öncekiler bir incelemeydi ve emin olmadığım çok şey vardı. Bilmediğimden saçma sorular sormuş olabilirim. Cevaplar için teşekkürler, denemeye devam...:)

Son olarak binary heap'in her eleman eklendiğinde güncellenmesi diye bir şey olduğunu yeni öğreniyorum. Bu durumda hız denemelerinde ya bunu da dikkate almalı ya da yukarıda yaptığımız gibi durağan (static) değerler ile deneme yapmalıyım.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 25, 2012

Alıntı (Salih Dinçer):

>

Alıntı (Pre-order):

>

[ 750, 500, 100, 75, 50, 30, 10, 5, 15, 20, 25, 40, 35, 45, 70, 60, 55, 65, 85, 80, 90, 400, 300, 250, 200, 150, 350, 450, 700, 600, 550, 650 ]

İlk naklettiğim sırada ise şöyle:

Alıntı (Pre-order):

>

[ 90, 10, 5, 20, 15, 30, 25, 40, 35, 50, 45, 60, 55, 70, 65, 80, 75, 85, 100, 200, 150, 300, 250, 400, 350, 500, 450, 600, 550, 700, 650, 750 ]

Eğer mantığını doğru kavradıysam, soldakileri ve sağdakileri ayrı sıralarsak bu daha iyi gibi:

Alıntı (Pre-order):

>

[ 90, 85, 80, 70, 50, 40, 5, 15, 10, 25, 20, 35, 30, 45, 60, 55, 65, 75, 750, 500, 400, 300, 150, 100, 250, 200, 350, 450, 700, 650, 550, 600 ]

Bunu da şu şekilde ağaça (bitree) eklemeden önce yaptım:

   heapify(veri[1..18]); //baştaki en iyi kök elemanı almadım
   heapify(veri[18..$]);
   writeln(veri[1..18]);
   writeln(veri[18..$]);

Çıktısı:
'[85, 80, 70, 75, 50, 60, 65, 40, 5, 15, 25, 35, 45, 55, 30, 20, 10]
[750, 500, 700, 400, 450, 650, 300, 150, 250, 350, 200, 550, 600, 100]'

Aslında bu değerli konuyu artık burada devam etmeyip iyice olayları kavradıktan sonra ayrı bir başlık açmayı düşünüyorum; İstanbul'a dönünce...

Sevgiler, saygılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 24, 2012

Galiba sen ikili ağaçların dizi üzerine oturdukları çok özel bir veri yapısını düşünüyorsun: binary heap. (Bu "heap"in dinamik bellekle ilgili olarak duyduğumuz "heap" ile bir ilgisi yoktur.)

Ama belki de ikili ağaç yapısını başka bir düzende dizi üzerine oturtuyorsun. Ben ise klasik anlamdaki ikili ağaç (ve bağlı liste) veri yapısından bahsediyordum.

Eğer gerçekten binary heap'i düşündüysen veriler doğru görünmüyorlar. O verdiğin değerlerle heap şöyle oluşturulabilir:

import std.stdio;
import std.container;

void main()
{
   auto veri = [ 90, 10, 20, 30, 40, 50, 60, 70, 80,
                 5, 15, 25, 35, 45, 55, 65, 75, 85,
                 100, 200, 300, 400, 500, 600, 700,
                 150, 250, 350, 450, 550, 650, 750 ];

   heapify(veri);

   writeln(veri);
}

Çıktısı:

'[750, 500, 700, 100, 400, 600, 650, 75, 85, 300, 90, 50, 250, 450, 550, 70, 30, 10, 80, 200, 5, 40, 15, 20, 25, 150, 35, 350, 45, 60, 55, 65]'

Bağlı listeyle ikili ağacın farklı veri yapılarında anlaştık ve binary heap'e geçtik, değil mi? :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 24, 2012

Alıntı (Salih Dinçer):

>

Örneğin heapify()'dan geçirilen verinin 'postorder'ı (soldan sağa dairesel dizilim) şöyle:

Anlayamıyorum. :( Veriyi belirli bir düzende saklamak başka, preorder veya postorder olarak işlemek başka.

Alıntı:

>

en tepede 90 olacak şekilde işlersek ne olur?

Bilmiyorum. O yine de binary heap mi? Çünkü benim bildiğim kadarıyla her eleman eklendiğinde elemanların yer değiştirerek binary heap'in tutarlılığının korunması gerekiyor. Tamam, verdiğin dizi öyledir herhalde ama ben soruyu anlamadım.

Alıntı:

>

Diyelim ki 25'i arayacağız ve hemen yukarıdaki sıralamaya göre 5 sorgulamada bulmamız gerekiyor. Oysa Ali hocanın sıralamasında 10 sorgulamada buluyoruz.

Aslında binary heap aramaya uygun bir veri yapısı değil. Ortaya attığım için kusura bakma. Herşey karıştı.

Alıntı:

>

Şimdi burada sorulması gereken soru şu olabilir:

Veri yapılarını karşılaştırırken, en çabuk bulunabilen elemanın hızına göre mi karşılaştırma yapıyoruz; yoksa tüm elemanlara ortalama erişim sürelini hesaba katıyor muyuz?

Hepsi: En iyi durumda nasıl? Ortalamada nasıl? En kötü durumda nasıl?

Alıntı:

>

Açıkçası ben hala, veri yapılarının aynı anneden çıkan karındaş (kardeş) ürünler olduğunu düşünüyorum...

Hepsi aynı babadan olamazlar ama. Bazıları da doğumdan kusurlu... :(

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2 3
Next ›   Last »