apa keuntungan dari oktri dalam kinerja spasial / temporal atau sebaliknya, dan dalam situasi apa yang paling berlaku (saya pernah mendengar pemrograman grafis 3D)?
pohon kD adalah pohon biner seimbang dan oktri dicoba sehingga keuntungan dan kerugiannya mungkin diwarisi dari struktur data yang lebih umum. Secara khusus:
- Penyeimbangan ulang bisa mahal (oktri tidak perlu penyeimbangan kembali).
- Penyeimbangan menangani heterogenitas dengan lebih baik karena bersifat adaptif.
- Faktor percabangan yang lebih tinggi dalam oktri berarti pohon yang lebih dangkal (lebih sedikit tipuan dan alokasi) untuk distribusi yang homogen.
Juga, pembelahan dua (seperti dalam octrees) cocok untuk implementasi sepele dalam hal bit-twiddling. Demikian pula, saya membayangkan octrees bisa mendapat manfaat besar dari jarak yang telah ditentukan saat melakukan pencarian rentang.
EDIT
Rupanya referensi saya untuk mencoba dan homogenitas perlu klarifikasi.
Tries adalah keluarga struktur data yang diwakili oleh pohon-pohon kamus dan digunakan sebagai kamus untuk kunci yang berurutan (terutama string tetapi juga urutan DNA dan bit dalam nilai hash untuk percobaan hash). Jika masing-masing kamus memetakan satu bit dari masing-masing koordinat x, y dan z (bit paling signifikan di tingkat pertama dari trie, bit signifikan berikutnya di tingkat kedua dll.) Maka trie adalah sebuah octree yang secara seragam membagi ruang 3D. Karenanya, oktri mewarisi karakteristik percobaan, yaitu:
- Faktor percabangan tinggi dapat berarti pohon dangkal yang menimbulkan sedikit tipuan sehingga pencarian cepat, misalnya 20 tingkat pohon biner dapat disimpan dalam 4 tingkat pohon dengan faktor percabangan 256.
- Percobaan tidak diseimbangkan kembali selama penyisipan dan penghapusan, menghemat operasi yang mahal yang diperlukan untuk pohon biner seimbang.
Kerugiannya adalah bahwa heterogenitas dapat menyebabkan upaya / oktri yang tidak seimbang sehingga pencarian dapat memerlukan banyak tipuan. Masalah yang setara dalam percobaan diselesaikan dengan menggunakan kompresi tepi untuk menutup beberapa level tipuan menjadi satu level. Oktri tidak melakukan ini, tetapi tidak ada yang menghentikan Anda dari mengompres sebuah octree (tapi saya pikir Anda tidak bisa menyebut hasilnya sebagai octree!).
Untuk perbandingan, pertimbangkan kamus khusus untuk kunci string yang direpresentasikan sebagai trie. Level pertama dari trie bercabang pada karakter pertama dalam kunci. Level kedua pada karakter kedua dan seterusnya. Setiap string dapat dicari dengan mencari karakter pertama dari kunci di kamus untuk mendapatkan kamus kedua yang digunakan untuk mencari karakter kedua dari kunci dan seterusnya. Satu set string kunci acak akan menjadi distribusi yang homogen . Satu set string kunci yang semuanya memiliki beberapa awalan (mis. Semua kata yang dimulai dengan "anti") adalah heterogendistribusi. Dalam kasus terakhir, kamus pertama hanya berisi satu penjilidan, untuk "a", yang kedua hanya untuk "n" dan seterusnya. Mencari pemetaan di trie selalu dengan mencari empat kamus yang sama dengan empat kunci yang sama. Ini tidak efisien dan inilah yang dilakukan oleh oktri jika, misalnya, mereka digunakan untuk menyimpan distribusi partikel yang heterogen di mana sebagian besar partikel berada dalam volume kecil di dalam ruang vektor.