Oktre'lerin mekansal / zamansal performans veya diğer avantajları nelerdir ve en çok hangi durumlarda uygulanabilirler (3D grafik programlama duydum)?
kD ağaçları dengeli ikili ağaçlar ve octrees are çalışır avantajlar ve dezavantajlar Muhtemelen bu daha genel veri yapıları miras böylece. özellikle:
- Yeniden dengeleme pahalı olabilir (rakamların yeniden dengelenmesi gerekmez).
- Dengeleme, heterojenliği daha iyi idare eder, çünkü adaptifdir.
- Oktalarda daha yüksek dallanma faktörü, homojen dağılımlar için daha sığ ağaçlar (daha az indirme ve tahsis) anlamına gelir.
Ayrıca, bisection (octrees'te olduğu gibi) bit-twiddling anlamında önemsiz uygulamaya yol açar. Benzer şekilde, octrees'ın aralık aramaları yaparken önceden hesaplanan mesafelerden büyük ölçüde faydalanabileceğini hayal ediyorum.
DÜZENLE
Görünüşe göre denemeler ve homojenliğe olan referanslarım açıklığa kavuşturulmalı.
Denemeler , sözlük ağaçları ile temsil edilen bir veri yapıları ailesidir ve diziler olan anahtarlar için sözlükler olarak kullanılır (en önemlisi dizeler değil, aynı zamanda DNA dizileri ve karma denemeler için karma değerindeki bitler). Eğer her bir sözlük, x, y ve z koordinatlarının her birini bir bitle eşleştirirse (trie'nin birinci seviyesindeki en önemli bit, ikinci seviyedeki sonraki önemli bit vb.), O zaman, trie, 3B alanı tekdüze olarak alt ayıran bir octree'dir. Bu nedenle, octrees, genel olarak şu denemelerin özelliklerini miras alır:
- Yüksek dallanma faktörü, birkaç aktarma gerektiren sığ ağaçlar anlamına gelebilir, bu nedenle arama hızlıdır, örneğin, 20 dalda ikili seviye ağacı, dallanma faktörü 256 olan bir ağacın 4 katında depolanabilir.
- Denemeler, yerleştirme ve silme işlemlerinde yeniden dengelenmez, bu sayede dengeli ikili ağaçlar için gereken pahalı bir işlem sağlanır.
Dezavantajı, heterojenliğin dengesiz denemeler / oktre'ler ile sonuçlanabilmesidir, bu yüzden aramalar birçok aktarma gerektirebilir. Denemelerdeki eşdeğer problem, çoklu indirme seviyesini tek bir seviyeye daraltmak için kenar sıkıştırma kullanılarak çözülür. Octrees bunu yapmaz, ancak sizi bir oktree sıkıştırmaktan alıkoyacak hiçbir şey yoktur (ama sonucu octree olarak adlandırabileceğinizi sanmıyorum!)
Karşılaştırma için, trie olarak temsil edilen dize tuşlarına ilişkin özel bir sözlüğü düşünün. Trie'nin birinci seviyesi, anahtardaki ilk karakter üzerinde gösterilir. İkinci karakterdeki ikinci seviye vb. Herhangi bir dize, anahtardaki ikinci karakteri aramak için kullanılan ikinci bir sözlüğü elde etmek için kullanılan anahtardaki ilk karakter aranarak aranabilir. Bir dizi rasgele anahtar dizesi homojen bir dağılım olacaktır. Bazı önekleri paylaşan bir anahtar dizeler kümesi (örneğin, "anti" ile başlayan tüm kelimeler) heterojendirdağılımı. İkinci durumda, ilk sözlük "a" için yalnızca bir bağlayıcı, ikincisi "n" için yalnızca bir bağlayıcı içerir. Her eşlemede eşleme aramak her zaman aynı dört sözlüğü kullanarak aynı dört sözlükte arama yaparak. Bu verimsizdir ve örneğin, partiküllerin büyük çoğunluğunun vektör alanı içinde küçük bir hacimde yer aldığı heterojen parçacık dağılımlarını depolamak için kullanılırsa octrees'in yaptığı şeydir.