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:
- Yeni eklenen eleman atamak için bir rasgele sayı almak.
- Standart TSİ ekleme kullanarak BST içine eleman yerleştirin.
- 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!