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.