3

各辺の重みが 1 と 2 だけの、重み付き接続された単純な無向グラフ G が与えられた場合、O(V+E) で G の MST を見つけます。何か案は?

質問の言い回しで申し訳ありませんが、できる限り翻訳してみました。

4

2 に答える 2

4

Prim のアルゴリズムでは、最小の重みでエッジにアクセスして削除できるように、アクティブなエッジを保存する方法が必要です。

通常、さまざまな重みがあり、エッジを格納するためにある種のヒープ データ構造が使用されます。

ただし、この場合、重みは 1 または 2 であるため、重み 1 のエッジ用と重み 2 のエッジ用の 2 つの個別のリストにエッジを格納するだけです。

重みが最小のエッジを見つけるには、最初のリストから 1 つを取得します。空の場合は、2 番目のリストからエッジを取得します。

リストからの要素へのアクセスと削除は O(1) なので、Prim のアルゴリズムは O(V+E) で実行されます。

于 2013-07-05T20:19:39.470 に答える
1

Prim のアルゴリズムは、エッジに任意の重みがある場合に最小全域木を計算します。

プリムのアルゴリズムは、任意のノードから開始し、エッジを優先キューに保持する、一種の幅優先検索を実行することによって機能します。最も重みの低いエッジを抽出し続け、検索を拡張せずにそれを破棄するか (エッジが既にツリー内のノードにつながる場合)、それを結果に追加して、反対側のノードをツリー内としてマークし、検索を拡張します。

先ほど説明した素朴な方法で行われた Prim のアルゴリズムは、|E|エッジを優先キューに入れたりキューから取り出したりするコストによって支配されます。各エンキュー/デキューにはO(log |E|)時間がかかるため、総漸近コストはO(|E| log |E|)時間、より正確にはO(|E| log |E| + |V|).

これらのエンキューとデキューを一定時間で行う方法があれば、合計実行時間はO(|E| + |V|)...

于 2013-07-05T20:19:27.367 に答える