Problema
Ho un grafico non orientato (con bordi multipli), che cambierà nel tempo, nodi e bordi possono essere inseriti ed eliminati. Ad ogni modifica del grafico, devo aggiornare i componenti collegati di questo grafico.
Proprietà
Ulteriori proprietà sono che non verranno mai ricollegati due componenti. Ovviamente, il grafico può avere cicli fino a un importo arbitrario (altrimenti la soluzione sarebbe banale). Se un bordo non contiene un nodo n , non adotterà mai quel nodo. Tuttavia, se n ∈ e , può cambiare in n ∉ e .
approcci
Finora ho due possibili approcci, ma come vedrai sono orribili:
Senza stato lento
Posso cercare (dfs / bfs) il grafico a partire dagli elementi modificati ogni volta. Ciò consente di risparmiare spazio, ma è lento poiché abbiamo O (n + m) per ogni modifica.
Approccio rapido (-er) (?) Con stato
Posso memorizzare tutti i percorsi possibili per ciascun nodo verso tutti i nodi possibili, ma se lo vedo correttamente, questo richiederà memoria O (n ^ 4). Ma non sono sicuro di come sia il miglioramento del runtime (se ce n'è uno, perché devo mantenere aggiornate le informazioni per ogni nodo nello stesso componente).
Domanda
Hai qualche suggerimento, come posso saperne di più su quel problema o forse su alcuni algoritmi su cui posso basarmi?
Nota
Se ci fosse un grande miglioramento in runtime / memoria potrei vivere con una soluzione non ottimale che a volte dice che due componenti sono uno, ma ovviamente preferirei una soluzione ottimale.