グラフの直径を見つける時間の複雑さは何 ですか?
グラフの直径は、グラフ内のすべての頂点のペア間の最短パス距離のセットの最大値です。
私はそれについて何をすべきか分かりません。このような問題を解決する方法について完全な分析が必要です。
グラフの直径を見つける時間の複雑さは何 ですか?
グラフの直径は、グラフ内のすべての頂点のペア間の最短パス距離のセットの最大値です。
私はそれについて何をすべきか分かりません。このような問題を解決する方法について完全な分析が必要です。
回答:
この解決策は正しくありません。
残念なことに、このソリューションはツリーに対してのみ正しい(そして簡単な)ものです!木の直径を見つけることは、これさえ必要としません。グラフの反例です(直径が4の場合、このを選択するとアルゴリズムは3を返します)。
グラフが方向付けられている場合、これはかなり複雑です。ここでは、すべてのペアの最短パスにアルゴリズムを使用するよりも、高密度の場合の結果が高速であると主張する論文があります。
しかし、私の主なポイントは、グラフが有向でない場合であり、非負の幅で、私は何度か素敵なトリックを聞いた:
その複雑さは、2つの連続する幅優先検索¹と同じです。つまり、グラフが接続されている場合はです。
民間伝承のように見えたが、今のところ、私はまだ参照を得るか、その修正を証明するのに苦労している。これらの目標のいずれかを達成したら更新します。とても簡単に思えるので、すぐに回答を投稿します。
¹グラフに重みが付けられている場合、ウィキペディアはように見えますが、についてのみ確信してい。O (| E | log | V |)
²グラフが接続されていない場合、が表示されますが、を追加して、接続された各コンポーネントから1つの要素を選択する必要があります。これが必要かどうかはわかりませんが、とにかく、この場合は直径が無限であると判断するかもしれません。
私はあなたが意味すると仮定し、直径ので見られる最長の最短経路である。
直径を見つけるには、最初にすべてのペアの最短経路を見つけ、見つかった最大長を決定します。Floyd-Warshallアルゴリズムは時間でこれを行います。Johnsonのアルゴリズムは、時間を実現するために実装できます。
考慮すべき距離があるため、最悪の場合の実行時の下限を達成するのは難しいようです。関連する境界については、こちらをご覧ください。別のアプローチを使用し、(わずかに)高速なアルゴリズムを取得するこのペーパーに注意してください。
代数グラフ理論的アプローチも検討できます。直径は最小整数 stで、行列は、すべてのエントリがゼロ以外のプロパティがあります。あなたは見つけることができますすることにより行列乗算の繰り返し。直径アルゴリズムは、時間を必要とし。ここで、は行列乗算の限界です。たとえば、Vassilevska WilliamsによるCoppersmith-Winogradアルゴリズムの一般化により、直径アルゴリズムは実行され。簡単な紹介については、こちらの Fan Chungの本の第3章をご覧ください。
適切なグラフクラスに注意を向ければ、最適な時間でAPSP問題を解決できます。これらのクラスには、少なくとも間隔グラフ、円弧グラフ、順列グラフ、二部置換グラフ、強弦グラフ、弦二部グラフ、距離遺伝グラフ、および二重弦グラフが含まれます。たとえば、ドラガン、FF(2005)を参照してください。制限付きグラフファミリのすべてのペアの最短パスの推定:統一されたアプローチ。Journal of Algorithms、57(1)、1-21およびその参考文献。
仮定:
1.グラフは重みなし
2.グラフは有向
O(| V || E |)時間の複雑さ。
アルゴリズム:
ComputeDiameter(G(V,E)):
if ( isCycle( G(v,E) ) ) then
return INFINITY
if ( not isConnected( G(V,E) )) then
return INFINITY
diameter = 0
for each vertex u in G(V,E):
temp = BFS(G,u)
diameter = max( temp , diameter )
return diameter
説明:
サイクルをチェックします。グラフにサイクルが含まれている場合、ループ内を移動し続けるので、無限の距離になります。接続されているかどうかを確認します。グラフが接続されていない場合、G1からG2の頂点vまでの頂点uを意味します。G1とG2は、接続されていない2つのサブグラフです。だから、再び無限の距離を持つことになります。BFSを使用して、特定のnode(u)からuから到達可能な他のすべてのnode(v)までの最大距離を計算します。次に、以前に計算された直径の最大値と、BFSによる結果の戻り値を取得します。そのため、現在の最大直径になります。
実行時間分析:
合計時間= O(| v || E |)+ O(| E |)+ O(| E |)
以来| V || E | > | E |
したがって、実行時間はO(| v || E |)になります。
注:これは、この問題のエレガントな解決策ではありません。