ikili arama ağaçları kullanarak somut örnekler?

oy
14

Ben arama ağaçları nasıl uygulandığını ikili anlıyorum ama çoğu programlama dilleri kendi standart kütüphaneleri dahil ettiğimiz karma tablolar üzerine kullanmanın avantajları ne olduğundan emin değilim.

Birisi ikili arama ağaçları ile çözülebilir gerçek dünya sorunları örnekleri verebilir misiniz?

Oluştur 16/02/2011 saat 00:44
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
1

Bir ikili ağaç gerekli olduğu bir örneği bilgisayar grafikleri ikili parçalama olduğunu

http://en.wikipedia.org/wiki/Binary_space_partitioning

Algoritma ikili ağaçtaki düğümler arasındaki ilişkilerin korunması gerektiğini, çünkü ikili ağaç gereklidir. Orada ağacın yapısı önemlidir diğer birçok algoritmalar, ve bu yüzden bir karma tablo, uygun bir yapı değildir.

kolayca veri öğeleri için verimli karma üretemez, ancak bir karşılaştırma işlevi oluşturabilir zaman karma tablo yerine bir ikili ağacı kullanmak için başka iyi nedendir.

Genellikle basit bir depolama ve veri erişim için bir karma tablo daha isteğe bağlı ama uygulamak için daha komplekstir.

Cevap 16/02/2011 saat 00:53
kaynak kullanıcı

oy
0

En ardı biri birçok dosya sistemleri dizin listeleri yönetmek için ikili ağaçlar kullanmasıdır. Bunlar nadiren böyle bir B-ağaç olarak düz bir ikili ağacı, ancak bazı varyasyon kullanın. Ağacın diskteki depolama sorunu uygulamasının detaylarına oldukça önemlidir olmasıdır. onlar yapının bu tür kullanmak nedeni verimlilik ve hız içindir. Bu onlara bir dizindeki dosyaların destek binlerce gibi şeyler yapalım. dosya oluşturma ve silme süreleri için Karşılaştırmalar dosya sisteminin bu yönü için verimliliği vurgulayın.

İkili ağaçlar da 3D nesneler oluşturmak çok oyunda kullanılır. Yine, nedeni hızıdır. Aslında, hız böyle Quake motoru olarak bazı oyun motorları, aslında ikili ağaç önceden oluşturulmuş ve harita oluşturma sürecinin bir parçası olarak önceden optimize olması için önemlidir.

Cevap 16/02/2011 saat 00:56
kaynak kullanıcı

oy
0

Unutulmaması gereken bir şey İkili Arama Ağacı uzay verimli olmasıdır. Örneğin, saklamak için 10 tamsayılar varsa ve 0'dan eşleştiren bir karma işlevi var - 99, sonra u 100 Sayı dizisi gerekir. Eğer İkili Arama Ağacı kullandıysanız 10 elemanlar gerektirdiği gibi, o zaman sadece kadar bellek tahsis edecek

Cevap 16/02/2011 saat 00:57
kaynak kullanıcı

oy
29

karma tablolar üzerinde ikili arama ağaçları birkaç teorik avantajı vardır:

  1. Bunlar sıralı düzende kendi elemanları depolamak . Bu kolayca sıralanmış sırayla değerleri ziyaret edebilirsiniz şekilde kabı depolamak istiyorsanız, bir BST muhtemelen karma tablo daha iyi bir seçim olduğunu ifade eder. Eğer öğrenci bir koleksiyon depolamak ve daha sonra alfabetik sırayla tüm öğrencileri yazdırmak istiyorsanız Örneğin, bir BST karma tablo daha önemli ölçüde daha iyi bir seçimdir.

  2. Onlar verimli aralık sorguları destekler. BSTS sıralı düzende saklanması nedeniyle, bu formun sorulara cevap kolaydır "aralık [x, y] içinde ne değerler?" İkili arama ağacında. Bunu yapmak için, daha sonra aralarında ağacın elemanlarını sürekli tekrarlanması x büyüktür en küçük elemanı ve y daha küçük en büyük elemanı için ağacında bir arama yapmak. Dengeli bir ağaçta O (lg n) zamanında işletilen bu sorguları Hem, bu nedenle bu işlem için toplam çalışma zamanı O (lg n + k) k sorgusuyla eşleşen elemanların numarasıdır.

  3. Onlar verimli en yakın komşu sorguları destekler. Karma tablolar özellikle, böylece daha az farklı üretmek son derece farklı karma kodlar dizayn edilmiştir. Bu karma değerlerini onlar tek bir noktada çok fazla öğe kümeleme kaçınmak gerekir dağılım verir. Ancak, aynı zamanda aradığınız şeyle "kapatmak" olabilir unsurları bulmak için karma masanın üzerinden doğrusal tarama yapmak gerekir anlamına gelir. Bir BST ile, verimli o ağaçta olmasa bile, istediğiniz herhangi bir değere selefi ve halefi bulabilirsiniz.

  4. Daha iyi kötü durum garantileri sahip olabilir. En karma tablo uygulamaları bir işlem kötü durumda O (n) için indirgeme hangi Bozulmuş bir durumda bir çeşit. Bir doğrusal tarama karma tablo veya bir zincirli karma tablo, elementlerin kötü dizi, arama başına O (n) zaman gerektiren veya bir rehash Ç (n) zaman gerektirebilir. Kırmızı / siyah ağaçları, AVL ağaçları, ya AA ağaçlar gibi dengeli BSTS, bazı türleri içine yapılan ekleme O (lg n) en kötü durum her zaman.

Daha ayrıntılı ağaç yapıları BSTS genelleme istekli iseniz, o zaman bir ağaç çok daha verimli bir karma tablo daha sorunları çözmek için kullanılabilecek birçok uygulama mevcuttur. İşte birkaç örnek verilmiştir:

  1. kd-ağaçlar çok boyutlu uzayda hızlı aralık sorguları yanı sıra verimli yakın komşuya aramalarını destekleyen yaparken çok boyutlu veri depolamak için izin verir. Sen sınıflandırma (tembel öğrenme algoritmaları) ya da hesaplamalı geometri için kullanabilirsiniz.

  2. Bağlantı / kesim ağaçları çok daha verimli çoğu geleneksel algoritmalar sağlayacak daha max-akış problemleri çözmek için kullanılabilir. İyi itme / relabel algoritmaları kendi uygulamalarını hızlandırmak için kullanacağız.

  3. Ayrık ayarlanmış ormanlar asimptotik verimli şekilde (α (n) Ackermann ters fonksiyonudur güncelleştirme başına itfa a (n)) olarak elemanlarının bölümleri korumak için de kullanılabilir. Pek çok hızlı asgari kapsayan ağaç algoritmaları, yanı sıra bazı maksimum eşleştirme algoritmalarının kullanıldığı ediyoruz.

  4. İkili yığınları verimli öncelik sıraları uygulamak için kullanılabilir. Daha karmaşık ağaçlar oluşturmak için kullanılabilecek binom yığınlar ve Fibonacci yığınlarını teorik bilgisayar bilimi büyük önem taşırlar.

  5. Karar ağaçları sınıflandırma için makine öğrenimi kullanılabilir, ve teorik bilgisayar bilimi model olarak çeşitli algoritmaların çalışma süreleri sınırlarını kanıtlamak için.

  6. Üçlü arama ağaçları biraz değiştirilmiş BST dayanmaktadır denemeden bir alternatiftir. Bunlar çok hızlı arama ve elemanların yerleştirilmesi için ve seyrek veri kümeleri için izin oldukça özlü vardır.

  7. B-ağaçları , disk erişimi sınırlayıcı bir faktör olduğu verimli unsurları aramak için birçok veritabanı sistemleri tarafından kullanılmaktadır.

  8. İkili uzay bölümleme ağaçları hızla bilgisayar grafikleri işlemek için kullanılabilecek kd-ağaçlar bir genelleme ve çarpışma algılama yapmak (orijinal oyun Doom içinde render optimize etmek için kullanılmıştır).

  9. BK-ağaçları hızlı başka noktanın belirli bir mesafe içinde bir metrik uzayda tüm noktaları bulmak için daha genel başka kelimenin belli bir düzenleme mesafesindedir tüm kelimeleri belirlemek ve izin verir.

  10. Füzyon ağaçları aramaları, eklemeleri ve silme işlemleri için son derece hızlı desteğe sahip tamsayı tuşlar için tabloları karma birer alternatiftir.

  11. van Emde Boas ağaçları O'da arama, ekleme, silme, ardıl ve öncülü destek tam sayı tuşları (LG n) elemanı başına bir süre için masalar karma için başka bir alternatif. Bazı veri tabanı sistemleri performansını optimize etmek için VEB ağaçları kullanılır.

Ben konuyla Bu cevap ne kadar emin değilim, ama size harika ve güçlü BSTS ve daha genel ağaç yapıları nasıl olabilir için bir anlam vermelidir.

Cevap 16/02/2011 saat 01:05
kaynak kullanıcı

oy
0

Bu muhtemelen bir yorum ama Kendinden dengeleme BST (ler) (log (n)) yaygın olarak yerine kullanılan BSTS olmalıdır. Düz BSTS en kötü durum O (N) ekleme / çıkarma süresi vardır.

Cevap 16/02/2011 saat 03:14
kaynak kullanıcı

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