http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html menyediakan algoritme untuk menyisipkan dan menghapus dari Tabel Penutupan.
Saya ingin memodelkan struktur data yang serupa, kecuali bahwa node mungkin memiliki banyak orang tua.
Diberikan:
Jika kami menghapus [B, C]
saya berharap akan berakhir dengan:
dan jika kita menghapus simpul B
saya berharap berakhir dengan:
Namun, jika Anda menggunakan algoritme penulis untuk menghapus tautan atau simpul, Anda akan melihat bahwa itu menandai [D, C, 1]
untuk dihapus, yang tidak diinginkan.
Apa yang saya coba sejauh ini
Saya telah mencoba mengadaptasi struktur data asli dengan menambahkan references
kolom yang menunjukkan berapa banyak cara untuk melakukan perjalanan antara dua node. Dalam contoh di atas, Anda dapat melakukan perjalanan dari A
ke C
baik melalui B
atau melalui D
. Idenya adalah ketika B
dihapus, jalur dari A
ke C
disimpan dan jumlah referensi berkurang dari 2 menjadi 1. Itu bagus secara teori, tapi saya tidak tahu bagaimana cara agar implementasi berjalan dan sekarang saya bertanya-tanya apakah itu mungkin (struktur data mungkin tidak mengandung cukup informasi untuk mencari tahu baris mana yang harus dihapus).
Apa yang saya tanyakan
Bagaimana Anda mengadaptasi Tabel Penutupan untuk mendukung banyak orang tua? Struktur data alternatif apa yang akan Anda rekomendasikan? https://stackoverflow.com/q/4048151/14731 berisi daftar exaustive dari struktur data seperti itu, tetapi tidak jelas mana yang mendukung (atau yang terbaik untuk) banyak orang tua.
references
kolomnya?