Kruskal の MST 構築アルゴリズムは貪欲だと言われていますが、このアルゴリズムは Prim のアルゴリズムとは異なり、局所的最小値ではなく大域的最小値を選択します。Kruskalのアルゴリズムが貪欲なアプローチと見なされる方法を誰かが説明できますか?
3 に答える
クラスカルで何をしますか?まず、重みに従ってエッジを並べ替えます。次に、重みが最小のエッジを選択します。循環しない場合は、そのエッジを追加します。このように貪欲に前進します。だから貪欲なアプローチです。:)
貪欲なアプローチは貪欲と呼ばれます。これは、期待する各段階で最適な選択が必要であり、それが全体の最適解を与えるからです。
まず第一に、貪欲であるとはどういう意味ですか?
貪欲なアルゴリズムは、グローバルな最適を見つけることを目的として、各段階で局所的に最適な選択を行うという問題解決ヒューリスティックに従う任意のアルゴリズムです。
----ウィキペディア https://en.wikipedia.org/wiki/Greedy_algorithm
したがって、「貪欲なアルゴリズム」とは、評価するのに費用がかかりすぎない限定された「短期」基準に従って、個々の選択が最適になるように、順番に選択を行うことです。
ここでクラスカルのアルゴリズムでは、「選択」は「次に低い重みでエッジを選択し、既に選択されたエッジでサイクルを形成しない」ことであり、ソートアルゴリズムとユニオン検索データ構造を考えると、評価するのにそれほど高価ではありません。
質問で言及した極小値は、隣接する頂点やエッジではなく、グラフの現在の知識として理解する必要があります。
これは貪欲なアルゴリズムです。利用可能な最小の重みに従って各ステップで頂点の 2 つのセットを結合することを選択し、その時点で最適に見えるエッジを選択したからです。これは貪欲なステップであるため、アルゴリズムは貪欲であると言われます。
ウィキペディアの疑似コード (添付) では、貪欲なステップは の選択にあり(u,v)
ます。これは、2 つの接続されていないコンポーネントを接続する最も重みの低いエッジです。
KRUSKAL(G):
1 A = ∅
2 foreach v ∈ G.V:
3 MAKE-SET(v)
4 foreach (u, v) ordered by weight(u, v), increasing:
5 if FIND-SET(u) ≠ FIND-SET(v):
6 A = A ∪ {(u, v)}
7 UNION(u, v)
8 return A