Supposons que nous ayons un graphe orienté et deux noeuds et . Je voudrais savoir s'il existe déjà des algorithmes pour calculer le problème de décision suivant:A B
Y a-t-il au moins deux trajets entre et de même longueur?B
Et la complexité? Puis-je le résoudre en temps polynomial?
Je voudrais ajouter une nouvelle contrainte sur le graphique, peut-être que le problème est plus résoluble. Sur la matrice d'adjacence, chaque colonne n'est pas vide. Ainsi, chaque nœud a au moins une flèche en entrée et il y a également au moins un nœud connecté à lui-même. Donc, si le nœud est le ème nœud, alors est une arête dans le graphique.( i , i )
complexity-theory
graph-theory
time-complexity
graphs
Paolo Parisen T.
la source
la source
Réponses:
Considérons un graphe , nous voulons savoir s'il existe deux chemins différents de à de même longueur. Que faire? Simple: codez deux chemins en un. Définissez le graphe avec les sommets . Vous faites un pas dans en faisant deux étapes indépendantes dans . Le bit supplémentaire vous indique si les deux chemins se sont déjà séparés l'un de l'autre.A B G ′ V × V × { 0 , 1 } G ′ Gg UNE B G′ V×V×{0,1} G′ G
Formellement, il y a une arête dans ssi , dans et .G ′ i → i ′ j → j ′ G e ′ = e ∨ ( i , i ′ ) ≠ ( j , j ′ )(i,j,e)→(i′,j′,e′) G′ i→i′ j→j′ G e′=e∨(i,i′)≠(j,j′)
L'algorithme vérifie s'il existe un chemin vers dans , qui est , ou quelque chose comme .( B , B , 1 ) G ′ O ( V 4 ) O ( ( V + E ) 2 )(A,A,0) (B,B,1) G′ O(V4) O((V+E)2)
Si vous convenez que cet algorithme est correct, par conséquent, le chemin dans est de longueur au plus , donc les "collisions de chemin" potentielles doivent se produire au plus tard à cette longueur. Vous pouvez obtenir un algorithme partir de cette observation, où est la complexité de multiplication de la matrice (demandez si vous avez besoin d'un spoiler ...). 2 n 2 O ( V ω log V ) ωG′ 2n2 O(VωlogV) ω
Je pense fortement qu'il existe un algorithme , qui utilise davantage la structure du problème.O(V+E)
la source
J'ai probablement une réponse à ce problème, mais je ne suis pas sûr que cela fonctionne.
Il n'est pas important de «trouver» les deux voies, la seule chose importante est de «savoir» si elles existent ou non. Je ne pense pas que ce soit un problème NP complet.
Alors, prenez la matrice contiguïté . On peut facilement supposer qu'il est rempli avec 0,1 valeur. (0 = pas de bord; 1 = il y a un bord) Utilisons l'algèbre suivante avec 3 valeurs (0,1,2), où tout fonctionne comme d'habitude sauf: ; 2 + <quelque chose> = 2 2 ∗ <tout ce qui est supérieur à 0> = 2A 2+<something>=2 2∗<whatever greater than 0>=2
Donc, s'il y a deux chemins de même longueur à partir de je m'attends à ce qu'il y ait une valeur telle que .p ( A p ) i , j = 2i,j p (Ap)i,j=2
Soit le nombre de sommets du graphe (ou, disons, que a la dimension ). Je ne connais pas la valeur de , mais si j'itère en multipliant avec lui-même pendant au plus je devrais trouver la réponse. (donc, ) (le sens est que je vérifie , puis je vérifie , puis je vérifie et ainsi de suite ...)A n × n p A n 2 p < n 2 A A 2 A 3n A n×n p A n2 p<n2 A A2 A3
voici mon argumentation:
Je m'arrête pour répéter une fois que j'ai trouvé .(Ap)i,j=2
ai-je tort?
la source