Instance: un graphe non orienté avec deux sommets distingués et un entier .k ≥ 0
Question: Est -ce qu'il existe un chemin dans , de telle sorte que le chemin croise au plus triangles? (Pour ce problème, un chemin est censé couper un triangle si le chemin contient au moins une arête du triangle.)G k
cc.complexity-theory
graph-algorithms
Andras Farago
la source
la source
Réponses:
On suppose qu'il n'y a pas d' auto-bords dans .g
Pour chaque front entre le nœud et v j dans G , soit E [ i , j ] = 1 et E [ i ] , ce qui donne le nombre de chemins à deux sauts entre chaque paire de nœuds v i et v j . Puis pour l'arête entre v ivje vj g E[ i , j ] = 1 s'il n'y a pas d'arête. Calculer n × n matrice C [ i , j ] = ∑ n k = 1 E [ i , k ] ⋅ E [ k , jE[ i , j ] = 0 n × n C[ i , j ] = ∑nk = 1E[ i , k ] ⋅ E[ k , j ] vje vj vje et dans G, calculer D [ i , j ] = E [ i , j ] ⋅ C [ i , j ] sinon définir D [ i , j ] = ∞vj g D [ i , j ] = E[ i , j ] ⋅ C[ i , j ] D [ i , j ] = ∞ , qui donne le nombre de triangles dont le bord fait partie (ou l'infini s'il n'y a pas de bord). La multiplication matricielle nécessaire pour calculer coûte O ( n 3 ) (pourrait être calculée plus rapidement en fonction de la rareté de G ).C O ( n3) g
Calculez maintenant matrice A , telle que A [ i , j ] = min (n × n UNE . A est tous les chemins les plus courts en DA [ i , j ] = min ( D [ i , j ] , mink( D [ i , k ] + D [ k , j ] - E[ i , j ] ) ) UNE ré de longueur jusqu'à deux augmentée pour tenir compte des chemins qui longent les deux bords d'un triangle.
Maintenant, calculez simplement le chemin le plus court entre et v j dans G sur un nouveau graphique dont A est la matrice d'adjacence (pondérée) en utilisant Dijkstra (puisque tous les poids de bord sont positifs) c'est-à-dire et déterminez si A ∗ [ i , j ] ≤ k , où A ∗ est la fermeture sur le semi-cercle tropical (qui donne la matrice de distance).vje vj g UNE UNE∗[ i , j ] ≤ k UNE∗
la source