Проблема
У мене є непрямий графік (з декількома краями), який буде змінюватися з часом, вузли та краї можуть бути вставлені та видалені. Про кожну модифікацію графіка я повинен оновлювати підключені компоненти цього графіка.
Властивості
Додаткові властивості полягають у тому, що жоден з двох компонентів не буде відновлено. Очевидно, графік може мати цикли до довільної величини (інакше рішення було б тривіальним). Якщо край не містить вузла , він ніколи не прийме цей вузол. Однак якщо , воно може змінитися на .n n ∈ e n ∉ e
Підходи
Наразі у мене є два можливі підходи, але, як ви побачите, вони жахливі:
Повільний стан - менше
Я можу шукати (dfs / bfs) графік, починаючи з модифікованих елементів (елементів) кожного разу. Це економить простір, але повільно, оскільки для кожної модифікації ми маємо O (n + m).
Державний швидкий (-er) (?) Підхід
Я можу зберігати всі можливі шляхи для кожного вузла до всіх можливих вузлів, але якщо я бачу це правильно, це займе O (n ^ 4) пам'яті. Але я не впевнений, яким чином є покращення часу виконання (якщо воно взагалі є, тому що я повинен постійно оновлювати інформацію для кожного вузла в одному компоненті).
Питання
Чи є у вас покажчики, як я можу дізнатися більше про цю проблему чи, можливо, деякі алгоритми, на яких я можу будуватись?
Примітка
Якщо є значне поліпшення часу виконання / пам'яті, я міг би жити з неоптимальним рішенням, яке інколи говорить, що два компоненти - це один, але, звичайно, я вважаю за краще оптимальне рішення.