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