coursera のクラスを使用してアルゴリズムを調べてきました。最初の講義の 1 つで、Quick Union Weighted が議論されています。私はそれが何をするかを理解し、彼らのコードを使用してテストし、小さなテストを書きました。
すべてが明確ですが、1 つの点があります。2 つのオブジェクトの結合を作成すると、最小のツリーを持つオブジェクトが最大のツリーに追加されます。同時に、どのツリーが大きいかを決定するために使用される別の配列で、大きい方のツリーのサイズが小さい方のツリーのサイズで増分されます。配列はすべてのインデックスに対して値 1 で開始されるため (基本的に、それ自体のすべてのノードは 1 つのオブジェクトのツリーです)、このインデックスの値が 1 のままではなく 0 に設定されないのはなぜですか?
これを説明するために:
// Quick Union Weighted
ID: 0 1 2 3 4 5 6 7 8 9
SZ: 1 1 1 1 1 1 1 1 1 1
quw.union(2, 4);
ID: 0 1 2 3 2 5 6 7 8 9
SZ: 1 1 2 1 1 1 1 1 1 1
quw.union(5, 4);
ID: 0 1 2 3 2 2 6 7 8 9
SZ: 1 1 3 1 1 1 1 1 1 1
quw.union(2, 7);
ID: 0 1 2 3 2 2 6 2 8 9
SZ: 1 1 4 1 1 1 1 1 1 1
// Whereas I would've expected to end up with this
// to point out that the index is empty.
SZ: 1 1 4 1 0 0 1 0 1 1
マージされたインデックスのサイズが 0 ではなく 1 になるのはなぜですか? ここでテストするコードを見つけることができます。実装は講師が提供する例と同じであることに注意してください。そのため、私のコードが正しいと仮定しています。