MST:Primのアルゴリズムの複雑さ、なぜ


8

CLRSによると、プリムのアルゴリズムは以下のように実装されています-

MST-PRIM(G,w,r)

  • uV[G]を行います
    • key[u]
    • π[u]NIL
  • key[r]0
  • QV[G]
  • 一方、 // ... O QO(V)
    • EXTRACT-MINu // ... O lgu EXTRACT-MIN(u)O(lgV)
      • それぞれの //ん... O E vadj[u]O(E)
        • もしW U V > キー [ V ]vQw(u,v)>key[v]
          • 次にπ[v]u
            • // DECREASE-KEY ... O lg V keyw(u,v)DECREASE-KEYO(lgV)

この本は、総複雑さがあると言う。ただし、私が理解したことは、演算を伴う内部ループはO E lg V を要し、外部ループはと内部ループの両方を囲むため、全体の複雑度はO V lg V + E lg V lg V + E VO(VlgV+ElgV)O(ElgV)forDECREASE-KEYO(ElgV)whileEXTRACT-MINforO(V(lgV+ElgV))=O(VlgV+EVlgV)O(EVlgV)

なぜ複雑性分析はそのように実行されないのですか?そして私の処方の何が問題になっていますか?

回答:


9

複雑さは次のように導出されます。初期化フェーズの費用はO(V)です。whileループが実行され|V|回。for内に入れ子ループwhileループが実行されるdegree(u)回。最後に、ハンドシェイクレンマは、Θ(E)暗黙のDECREASE-KEY があることを意味します。そのため、複雑さがあります:Θ(V)TEXTRACTMIN+Θ(E)TDECREASEKEY

実際の複雑さは、アルゴリズムで実際に使用されるデータ構造によって異なります。配列TEXTRACTMIN=O(V),TDECREASEKEY=O(1)、複雑度はO(V2)で最悪の場合。

バイナリヒープを使用して、TEXTRACTMIN=O(logV),TDECREASEKEY=O(logV)、複雑さはO(ElogV)最悪の場合。理由は次のとおりです。グラフが接続されているため、|E||V|1Eは最大でV2(最悪の場合、密なグラフの場合)。おそらく、あなたはこの点を逃しました。

フィボナッチヒープを使用すると、 TEXTRACTMIN=O(logV)償却され、TDECREASEKEY=O(1)償却され、複雑度はO(E+VlogV)最悪の場合。


1

あなたの考えは正しいようです。複雑度をましょう 。次に、内側のforループでは、実際にはエッジではなくすべての頂点を通過することに注意してください。V lg v + V lg v に少し変更し ます。これは、V lg v + V 2 lg vを意味し ます。しかし、最悪の場合の分析(密なグラフ)では、V 2はエッジの数Eにほぼ等しく、 V lg v +V(lgv+Elgv)V(lgv+Vlgv)Vlgv+V2lgvV2EVlgv+Elgv=(V+E)lgvVEElgv


なに v?のタイプミスV
David Richerby 2016年

実は全然わからないです。「複雑さを[式1]として考えよう」と言って、「[式2]に少し変更する」とはどういう意味ですか?実行時間を1つと想定して、それを別の時間に変更することはできません。
David Richerby 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.