Java 为什么Quick Union Weighted中的索引在与较大的树合并时仍保持大小为1?

Java 为什么Quick Union Weighted中的索引在与较大的树合并时仍保持大小为1?,java,algorithm,union-find,Java,Algorithm,Union Find,我一直在研究使用coursera课程的算法。在第一堂课中,我们讨论了快速联合加权。我了解了它的功能,并使用他们的代码对其进行了测试,并为此编写了一个小测试 一切都很清楚,只有一点:当您创建两个对象的并集时,它会将树最小的对象添加到较大的对象。同时,在一个单独的数组中,较大树的大小将随着较小树的大小而增加,该数组用于确定哪个树更大。由于数组是用每个索引的值1启动的(每个节点本身基本上是一个由1个对象组成的树),为什么这个索引的值不设置为0而不是保持为1 为了说明这一点: // Quick Unio

我一直在研究使用coursera课程的算法。在第一堂课中,我们讨论了快速联合加权。我了解了它的功能,并使用他们的代码对其进行了测试,并为此编写了一个小测试

一切都很清楚,只有一点:当您创建两个对象的并集时,它会将树最小的对象添加到较大的对象。同时,在一个单独的数组中,较大树的大小将随着较小树的大小而增加,该数组用于确定哪个树更大。由于数组是用每个索引的值1启动的(每个节点本身基本上是一个由1个对象组成的树),为什么这个索引的值不设置为0而不是保持为1

为了说明这一点:

// 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
为什么合并索引的大小是1而不是0?
您可以找到代码来测试它。注意,实现与讲师提供的相同,这就是为什么我假设我的代码是正确的

我认为这是因为节点本身的大小也是1,并且没有任何子节点。然而,它可以有孩子。事实上,我并不熟悉快速联合加权算法,但如果它有点像我见过的其他联合查找算法,例如,你可以这样做

quw.union(0, 1);
ID: 0 0 2 3 2 2 6 2 8 9 
SZ: 1 1 4 1 1 1 1 1 1 1

quw.union(0, 2);
ID: 2 2 2 3 2 2 6 2 8 9 
SZ: 2 1 6 1 1 1 1 1 1 1
因此,现在0 en 1已经合并,从0开始的整个树再次与2合并,仍然使子树从0开始,大小为2


正如我所说,我不确定这在快速联合加权中是否可行,但“1”的原因仍然是因为它本身也是大小1。

我认为这是因为节点本身也是大小1,并且没有任何子节点。然而,它可以有孩子。事实上,我并不熟悉快速联合加权算法,但如果它有点像我见过的其他联合查找算法,例如,你可以这样做

quw.union(0, 1);
ID: 0 0 2 3 2 2 6 2 8 9 
SZ: 1 1 4 1 1 1 1 1 1 1

quw.union(0, 2);
ID: 2 2 2 3 2 2 6 2 8 9 
SZ: 2 1 6 1 1 1 1 1 1 1
因此,现在0 en 1已经合并,从0开始的整个树再次与2合并,仍然使子树从0开始,大小为2

正如我所说,我不确定这在快速联合加权中是否可行,但“1”的原因仍然是因为它本身也是1号