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 ivjevjgE[ 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 ] = 0n × nC[ i , j ] = ∑nk = 1E[ i , k ] ⋅ E[ k , j ]vjevjvje et dans G, calculer D [ i , j ] = E [ i , j ] ⋅ C [ i , j ] sinon définir D [ i , j ] = ∞vjgD [ 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 ).CO ( n3)g
Calculez maintenant matrice A , telle que A [ i , j ] = min (n × nUNE . 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 ] ) )UNEré 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).vjevjgUNEUNE∗[ i , j ] ≤ kUNE∗