Katakanlah saya memiliki grafik jarang hingga tidak terarah, dan harus dapat menjalankan kueri berikut secara efisien:
- - mengembalikan jika ada jalur antara dan , jika tidakN 1 N 2 F
- - mengembalikan set node yang dapat dijangkau dari
Ini mudah dilakukan dengan pra-komputasi komponen yang terhubung dari grafik. Kedua kueri dapat berjalan dalam waktu.
Jika saya juga harus dapat menambahkan tepi secara sewenang-wenang - - maka saya dapat menyimpan komponen dalam struktur data yang terpisah- . Setiap kali tepi ditambahkan, jika menghubungkan dua node di komponen yang berbeda, saya akan menggabungkan komponen-komponen itu. Ini menambahkan biaya ke dan biaya untuk dan (yang mungkin juga ).A d d E d g e O ( I n v e r s e A c k e r m a n n ( | N o d e s | ) ) I s C o n n e c t e d C o n n e c t e d N o
Jika saya juga harus dapat menghapus tepi secara sewenang-wenang, apa struktur data terbaik untuk menangani situasi ini? Apakah ada yang diketahui? Untuk meringkas, itu harus mendukung operasi berikut secara efisien:
- - mengembalikan jika ada jalur antara dan , jika .
- - mengembalikan set node yang dicapai dari .
- - menambahkan keunggulan antara dua node. Perhatikan bahwa , atau keduanya mungkin belum ada sebelumnya.
- - menghapus tepi yang ada di antara dua node.
(Saya tertarik pada ini dari perspektif pengembangan game - masalah ini tampaknya terjadi dalam beberapa situasi. Mungkin pemain dapat membangun saluran listrik dan kita perlu tahu apakah generator terhubung ke bangunan. Mungkin pemain dapat mengunci dan membuka kunci pintu, dan kita perlu tahu apakah musuh dapat mencapai pemain. Tapi itu masalah yang sangat umum, jadi saya mengatakannya seperti itu)
sumber
Jawaban:
Masalah ini dikenal sebagai konektivitas dinamis dan merupakan bidang penelitian aktif dalam komunitas ilmu komputer teoretis. Masih ada beberapa masalah penting yang masih terbuka di sini.
Agar terminologinya jelas, Anda meminta konektivitas yang sepenuhnya dinamis karena Anda ingin menambah dan menghapus tepian. Ada hasil Holm, de Lichtenberg dan Thorup (J.ACM 2001) yang mencapai waktu pembaruan dan waktu permintaan . Dari pemahaman saya, ini sepertinya bisa diterapkan. Secara sederhana, struktur data mempertahankan hierarki rentang pohon - dan konektivitas dinamis pada pohon lebih mudah untuk dicakup. Saya dapat merekomendasikan catatan Erik D. Demaine untuk penjelasan yang baik lihat di sini untuk video. Catatan Erik juga berisi petunjuk untuk hasil relevan lainnya. Sebagai catatan: semua hasil ini adalah hasil teoritis.2n ) O ( logn / logcatatann )
Struktur data ini mungkin tidak menyediakan kueri ConnectedNodes per se, tetapi mudah untuk mencapainya. Pertahankan saja sebagai struktur data tambahan grafik (katakanlah sebagai daftar tepi yang terhubung ganda) dan lakukan pencarian kedalaman-pertama untuk mendapatkan node yang dapat dijangkau dari node tertentu.
sumber