[ a (1), a(2), ..., a(n-1)]をEから選択されたエッジのシーケンスとし、クルスカルのアルゴリズムによってGのMST を構築します (選択された順序で -重み (a (i)) <= 重み(a(i + 1)) )。
入力E' = EU {e}として与えられたときにクルスカルのアルゴリズムがどのように動作するかを考えてみましょう。i = min { i: weight(e) < weight(a(i))} とします。最初に、アルゴリズムはエッジ[a(1), ..., a(i - 1)]を選択することを決定します( eはまだ処理されていないため、同じように動作します)。次に、 eを決定する必要があります- eが削除された場合、 E' のソリューションはEの場合と同じになります。したがって、アルゴリズムによって選択された最初のi個のエッジが[a(1), ..., a(i - 1), e] であると仮定しましょう。この新しいシーケンスを a'と呼びます。アルゴリズムは継続 - 次の選択 (j > i の場合) が満たされる限りa'(j) = a(j - 1)私たちはクールです。このような素晴らしいストリークを破る 2 つのシナリオがあります (ストリークがインデックスk + 1で破るとしましょう):
1) アルゴリズムは、 Tにないエッジ e'とweight(e') < weight(a(k+1))を選択します。今までのシーケンスは次のとおりです。
[a(1), ..., a(i-1), e, a(i), a(i+1), ..., a(k-1), a(k), e']
しかし、このリストにe'を追加できる場合は、 [a(1), ..., a(k-1), a(k)]に追加することもできます。しかし、クラスカルのアルゴリズムは、 Gの MST を探すときにそれを行いませんでした。それは矛盾につながります。
2) 慎重に選択されたアルゴリズム:
[a(1), ..., a(i-1), e, a(i), a(i+1), ..., a(k-1), a(k)]
しかし、エッジa(k+1)をドロップすることにしました。しかし、eがリストに存在しない場合、アルゴリズムはa(k+1)を追加することを決定します。つまり、グラフ(V, {a(1), ..., a(k)}) では、エッジa(k+1)はエッジeと同じコンポーネントを接続します。つまり、 GとG'の両方の場合にアルゴリズム エッジa(k + 1)を考慮した後、接続されたコンポーネント (選択されたエッジのセットによって決定される) への分割は同じになります。したがって、(k+1)アルゴリズムの処理後は、どちらの場合も同じように処理されます。