如果我在最后一步(7)中使用规则,有人可以与我联系吗?
更新:
括号内的数字是参加联盟的每个集合的元素数量(权重(?))。大写字母是集合的名称。
据我所知:我们使用的元素数量作为我们的排名?这让人感到困惑,每个人都使用不同的术语来表达同样的东西。
我们有工会:
答案 0 :(得分:1)
步骤7(和其他人)看起来是正确的,但步骤6没有。
在步骤6中,4应该是根,因为那是更大的树。
答案 1 :(得分:0)
void combine(int x,int y)
{
int xroot=find(x),yroot=find(y);
if(rank[xroot]<rank[yroot])
parent[xroot]=yroot;
else if(rank[xroot]>rank[yroot])
parent[yroot]=xroot;
else
{///rank of both is equal..
parent[yroot]=xroot;
rank[xroot]++;
}
}
使用排名,您会看到size of set
,而不是顶点之和,因此步骤6
是错误的。
但为什么size
?
因为如果我们使较大的根设置为较小集的根,我们需要update
父节点数较少的父节点。
为了得到最好的解释,我建议CLRS (Introduction to Algorithms)。
希望它可以帮到你!