グラフについて考えてみましょう。同じ長さのからまでの2つの異なるパスがあるかどうかを知りたいです。何をすべきか?シンプル:2つのパスを1つにコーディングします。頂点グラフを定義します。あなたはステップ作るに、2つの独立したステップを行うことにより。追加のビットは、2つのパスが既に互いに分割されているかどうかを示します。A B G ' V × V × { 0 、1 }GABG′V×V×{0,1} GG′G
正式に、エッジが存在するにおける IFF中及び。G '、I → I '、J → J ' G 、E ' = E ∨ (I 、I ')≠ (J 、J ')(i,j,e)→(i′,j′,e′)G′i→i′j→j′Ge′=e∨(i,i′)≠(j,j′)
アルゴリズムチェックパスがある場合に中のであり、、または何か。(B 、B 、1 )G ' O (V 4)O ((V + E )2)(A,A,0)(B,B,1)G′O(V4)O((V+E)2)
このアルゴリズムが正しいことに同意する場合、結果として、のパスの長さは最大であるため、潜在的な「パスの衝突」はその長さで最後に発生する必要があります。この観測からアルゴリズムを取得できます。は行列乗算の複雑度です(スポイラーが必要な場合は確認してください...)。 2 N 2 O (V ωログV )、ωG′2n2O(VωlogV)ω
問題の構造をより多く使用するアルゴリズムがあると強く感じています。O(V+E)