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)