Je recherche l'algorithme O (V + E) pour trouver la réduction transitive avec un DAG.
C'est-à-dire supprimer autant d'arêtes que possible de sorte que si vous pouviez atteindre v à partir de u, pour v et u arbitraires, vous puissiez toujours atteindre après suppression des bords.
S'il s'agit d'un problème standard, veuillez me signaler une solution de modèle.
algorithms
graphs
dag
Karan
la source
la source
Réponses:
Nous pouvons résoudre ce problème simplement en faisant DFS à partir de chaque sommet.
La complexité globale de ce qui précède est la complexité de l'exécution de DFS ', qui est O ( N ( N + M ) ) .N O(N(N+M))
la source
Pas ce que vous cherchez. Mais juste dans le but de partager des connaissances, vous pouvez le faire avec des messages si vous supposez que chaque sommet agit comme un processeur . Notez que chaque sommet a une valeur comparable. Par conséquent, il existe des sommets tels qu'ils sont plus grands que tous leurs voisins. Ces sommets font ce qui suit:O(|E|)
Maintenant, si un nœud reçu un message de chaque plus grand voisin (c'est-à-dire que tous les bords ( v ′ , v ) sont inclus ou non inclus, alors le nœud v agit comme s'il était le plus grand de son voisinage. mentionné précédemment 4 étapes.v (v′,v) v
Cet algorithme se termine par des messages dans un environnement distribué. Je sais que ce n'est pas ce que vous demandez.O(|E|)
la source
Lemme: S'il y a un bord V -> Y et Y est également un successeur indirect de V, (par exemple, V -> W -> + Y) alors le bord V -> Y est transitif et ne fait pas partie de la racine transitive.
Méthode: Gardez une trace de la fermeture transitive de chaque sommet, en passant du sommet aux sommets initiaux dans l'ordre topologique inverse. L'ensemble des successeurs indirects de V est l'union des fermetures transitives des successeurs immédiats de V. La fermeture transitive de V est l'union de ses successeurs indirects et de ses successeurs immédiats.
Algorithme:
Cela suppose que vous disposez d'un moyen efficace de suivre les ensembles de sommets (par exemple, les mappages de bits), mais je pense que cette hypothèse est également faite dans d'autres algorithmes O (V + E).
Un effet secondaire potentiellement utile est qu'il trouve la fermeture transitive de chaque sommet de G.
la source
J'ai résolu le même problème, mais ce n'était pas exactement le même: il a demandé le nombre minimal d'arêtes dans le graphique après réduction de sorte que les sommets connectés à l'origine soient toujours connectés et qu'aucune nouvelle connexion ne soit établie. Comme c'est clair, il ne dit pas de trouver le graphe réduit mais combien d'arêtes redondantes sont présentes. Ce problème peut être résolu en O (V + E). Le lien vers l'explication est https://codeforces.com/blog/entry/56326 . Mais je pense que pour faire le graphe en fait, il aura une grande complexité que O (N)
la source