Étant donné un graphe acyclique dirigé, , est-il possible de supporter efficacement les opérations suivantes?
- : détermine s'il existe un chemin dans G du noeud a au noeud b
- : Ajoute une arête de a à b dans le graphe G
- : supprime le bord de a à b dans G
- : ajoute un sommet à G
- : Supprime un sommet de G
Quelques notes:
- Si nous refusions , il semble qu'il serait facile de maintenir les informations de connectivité, en utilisant une structure de données de type ensemble disjoint.
- De toute évidence, pourrait être implémenté en utilisant une recherche en profondeur ou en largeur, en utilisant la représentation naïve basée sur un pointeur du graphique. Mais c'est inefficace.
J'espère un temps constant ou logarithmique amorti pour les trois opérations. Est-ce possible?
ds.algorithms
graph-algorithms
directed-acyclic-graph
online-algorithms
Justin Kilpatrick
la source
la source
remove
Supprime également les bords incidents? Si c'est le cas, exiger que cette opération soit en temps O (log n) pourrait être trop à espérer….Réponses:
Le problème que vous avez décrit est l'accessibilité DAG entièrement dynamique (également appelée fermeture transitive entièrement dynamique sur les DAG). On l'appelle entièrement dynamique car les gens étudient également les versions où seules les suppressions sont possibles (alors cela s'appelle l'accessibilité décrémentielle), et où seules les insertions sont possibles (appelées l'accessibilité incrémentielle).
Il existe quelques compromis entre l'heure de mise à jour et l'heure de la requête. Soit le nombre d'arêtes et n le nombre de sommets. Pour les DAG, Demetrescu et Italiano (FOCS'00) ont donné une structure de données randomisée qui prend en charge les mises à jour (insertions ou suppressions de bords) en O ( n 1,58 ) et les requêtes d'accessibilité en O ( n 0,58 ) (les insertions / suppressions de nœuds sont également prises en charge , en temps O (1)); ce résultat a été étendu par Sankowski (FOCS'04) pour travailler sur des graphiques orientés généraux. Aussi pour les DAG, Roditty (SODA'03) a montré que vous pouvez maintenir la matrice de fermeture transitive dans le temps total O ( m n + I · n 2 + D ), oùm n n1,58 n0,58 m n + I⋅ n2+ D est le nombre d'insertions, D le nombre de suppressions et bien sûr le temps de requête est O ( 1 ).je ré 1
Pour les graphiques orientés généraux, les heures suivantes (mise à jour, requête) sont connues: (O ( ), O (1)) (Demetrescu et Italiano FOCS'00 (amorti), Sankowski FOCS'04 (pire cas)), ( O ( m √n2 ),O( √m n--√ )) (Roditty, Zwick FOCS'02), (O (m+nlogn), O (n)) (Roditty, Zwick STOC'04), (O (n 1,58 ), O (n 0,58 )) et (O (n 1.495 ), O (n 1.495 )) par Sankowski (FOCS'04).O ( n--√ journal m + nn n n1,58 n0,58 n1,495 n1,495
L'obtention d'un temps de requête polylogarithmique, sans augmenter trop le temps de mise à jour est un problème majeur, même pour les DAG.
la source
(O(1),O(n^2))
ou(O(m),O(n+m))
.(Cela ne couvre que la première version de votre question, avec
link
etunlink
mais sansadd
etremove
.)la source