tamsayılar bir akıştan dengeli bir ikili arama ağacı oluştur

oy
10

Ben sadece bir iş görüşmesine bitirdim ve ben bir 15 dakika görüşme üzerinde verdiğiniz için çok zor bir soru olarak geliyor bana bu soru ile boğuşuyordu.

Soru şuydu: (sırasız) tamsayılar akışı verilen bir işlevi, yaz, dengeli bir arama ağacı oluşturur. Şimdi, sonunda (bir dere var) giriş için sabırsızlanıyorum, bu nedenle anında ağaç dengelemek gerekir.

Benim ilk cevap elbette işini yapan bir Kırmızı-Siyah ağaç, kullanmaktı, ama onlar beni 15 dakika içinde kırmızı bir siyah ağaç uygulamak beklemiyorduk varsaymak zorundayız.

Yani, farkında değilim bu sorun için herhangi basit bir çözüm var mı?

Teşekkürler,

Dave

Oluştur 29/08/2011 saat 22:25
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
3

AA Ağaçlar Kırmızı-Siyah ağaçlar biraz daha basit, ama ben başımın üstü kapalı bir uygulamaya olamazdı.

Cevap 29/08/2011 saat 22:28
kaynak kullanıcı

oy
9

Ben şahsen bunu yapmanın en iyi yolu, bir benzeri randomize ikili arama ağacına için gitmek olacağını düşünüyorum treap . Bu tamamen ağaç dengeli olacağını garanti etmez, ancak yüksek olasılıkla ağaç iyi bir denge faktörü olacaktır. Bir treap ağaç anahtarlarına göre ve tekdüze rasgele değerleri açısından bir yığın ile ikili arama ağacı olmasını sağlamak sonra, bir eşit rastgele bir sayı ile ağacın her unsuru çoğaltarak çalışır. Bir treap içine yerleştirilmesi oldukça kolaydır:

  1. Yeni eklenen eleman atamak için bir rasgele sayı almak.
  2. Standart TSİ ekleme kullanarak BST içine eleman yerleştirin.
  3. yeni eklenen öğenin anahtarının ebeveynin anahtarından büyükse iken, kendi üst yukarıda yeni bir unsur getirmek için bir ağaç dönüşünü gerçekleştirmek.

Bu son adım sadece gerçekten zor biridir, ancak ben bir röportajda-the-fly Eğer bunu uygulamak eminim bir beyaz tahta üzerine çalışmak için biraz zaman olsaydı.

Işe yarayabilecek Başka bir seçenek kullanmak olacaktır yayvan ağacı . Bu standart bir BST insert fonksiyonu ve ağaç rotasyonlar yapabilme yeteneğine sahip varsayarak uygulanabilir hızlı BST başka tip. Önemli olan, yayvan ağaçlar son derece pratik, hızlı ve başka herhangi bir statik ikili arama ağacı olarak en azından iyi (sabit bir faktör dahilinde) oldukları biliniyor.

Demek ne bağlı "arama ağacında," sen de tamsayılar arama için optimize edilmiş bazı yapıda tamsayılar depolamak düşünebilir. Örneğin, bir kullanabilirsiniz bit düzeyinde trie bir makine kelimesindeki bit sayısına orantılı sürede arama destekleyen, tamsayılar saklamak için. Bu oldukça güzel bit üzerinden bakmak için bir özyinelemeli işlevi kullanılarak uygulanabilir ve rotasyonlar her türlü gerektirmez. Eğer on beş dakika içinde bir uygulama dışarı patlama Gerekirse görüşmeyi standart ikili arama ağaçları sapma izin verirse ve daha sonra bu harika bir çözüm olabilir.

Bu yardımcı olur umarım!

Cevap 29/08/2011 saat 22:33
kaynak kullanıcı

oy
1

En basit dengeli ikili arama ağacına biri BB (α)-ağacı olduğunu. Sen ağaç almak ne kadar dengesiz diyor sürekli a, seç. Her zaman, #descendants(child) <= (1-α) × #descendants(node)sahip olmalıdır. Normal ikili arama ağacı gibi davranın, ama formülü artık bazı düğüm için geçerli değildir zaman mükemmel dengeli olacak şekilde, sadece sıfırdan ağacın bir kısmının yeniden.

ekleme veya silme işlemi için itfa edilmiş zaman karmaşıklığı sadece diğer dengeli ikili ağaç gibi, (log N), yine de O'dur.

Cevap 29/08/2011 saat 22:49
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more