Masalah
Saya memiliki grafik yang tidak terarah (dengan multi-edge), yang akan berubah seiring waktu, node dan edge dapat dimasukkan dan dihapus. Pada setiap modifikasi grafik, saya harus memperbarui komponen yang terhubung dari grafik ini.
Properti
Properti tambahan adalah bahwa tidak ada dua komponen yang akan dihubungkan kembali. Jelas, grafik dapat memiliki siklus ke jumlah yang sewenang-wenang (jika tidak solusinya akan sepele). Jika tepi tidak mengandung simpul , ia tidak akan pernah mengadopsi simpul itu. Namun, jika , itu dapat berubah menjadi .n n ∈ e n ∉ e
Pendekatan
Saya memiliki dua pendekatan yang mungkin sejauh ini, tetapi karena Anda akan melihat mereka mengerikan:
Negara-kurang lambat
Saya dapat mencari (dfs / bfs) grafik mulai dari elemen yang dimodifikasi setiap saat. Ini menghemat ruang, tetapi lambat karena kami memiliki O (n + m) untuk setiap modifikasi.
Pendekatan stateful fast (-er) (?)
Saya dapat menyimpan semua jalur yang mungkin untuk setiap node ke semua node yang mungkin, tetapi jika saya melihatnya dengan benar, ini akan mengambil memori O (n ^ 4). Tetapi saya tidak yakin bagaimana perbaikan runtime (jika ada satu sama sekali, karena saya harus menjaga informasi tetap up-to-hari untuk setiap node dalam komponen yang sama).
Pertanyaan
Apakah Anda memiliki petunjuk, bagaimana saya bisa belajar lebih banyak tentang masalah itu atau mungkin beberapa algoritma yang bisa saya bangun?
Catatan
Jika ada peningkatan besar dalam runtime / memori saya bisa hidup dengan solusi yang tidak optimal yang kadang-kadang mengatakan dua komponen adalah satu, tetapi tentu saja saya lebih suka solusi yang optimal.
Jawaban:
Ada beberapa struktur data yang mendukung penyisipan tepi, penghapusan tepi, dan kueri konektivitas (Apakah dua simpul ini dalam komponen terhubung yang sama?) Dalam waktu polylogaritmik.
Monika R. Henzinger dan Valerie King. Algoritma grafik dinamis penuh acak dengan waktu polylogarithmic per operasi . Jurnal ACM 46 (4): 502-516, 1999.
Jacob Holm, Kristian de Lichtenberg, dan Mikkel Thorup. Algoritma penuh-dinamika deterministik penuh-polar-logaritmik untuk konektivitas, pohon spanning minimum, 2-edge, dan biconnectivity , Jurnal ACM 48 (4): 723-760, 2001.
Mikkel Thorup. Konektivitas grafik dinamis penuh yang hampir optimal . Proc STOC ke- 343-350, 2000.
sumber
Saya pikir Anda sedang mencari apa yang disebut algoritma grafik dinamis untuk dekomposisi komponen yang terhubung. Algoritma oleh Holm, de Lichtenberg dan Thorup [HLT01] telah diamortisasi waktu polylogarithmic pada setiap pembaruan tepi. Sudah lama sejak saya melihat masalah terakhir kali, jadi mungkin ada kemajuan yang lebih baru.
[HLT01] Jacob Holm, Kristian de Lichtenberg dan Mikkel Thorup. Algoritma penuh-dinamika deterministik penuh-polar-logaritmik untuk konektivitas, pohon spanning minimum, 2-edge, dan biconnectivity. Jurnal ACM , 48 (4): 723-760, Juli 2001. http://doi.acm.org/10.1145/502090.502095
sumber
(Untuk sekarang izinkan saya tetap dengan pertanyaan konektivitas, yang sayangnya mungkin tidak cukup untuk aplikasi Anda.)
Banyak dari pekerjaan sebelumnya tentang masalah konektivitas dinamis ada dalam model pembaruan-tepi: Anda mengasumsikan jumlah simpul diperbaiki, dan Anda dapat menyisipkan dan / atau menghapus tepi saat membuat kueri. Jika Anda hanya bisa menyisipkan (menghapus), itu tambahan (decremental). Jika Anda dapat melakukan keduanya, itu sepenuhnya dinamis. Karya Thorup seperti yang ditunjukkan oleh JeffE (dan saya sendiri dalam komentar) semuanya untuk pembaruan terkini.
AFAIK, komunitas teori CS hanya mulai melihat pembaruan vertex untuk grafik umum. Ada pekerjaan yang luar biasa tentang hal ini oleh Chan, Pătraşcu, dan Roditty di FOCS 2008. Lihat tautan ini untuk revisi (September 2010) yang sangat baru dan referensi di dalamnya.
sumber