Data structures 加权并集规则
有人能和我核实一下我在最后一步(7)中是否正确使用了规则吗 更新: 括号内的数字是参与联合的每个集合的元素数(权重(?)。大写字母是集合的名称 正如我所理解的:我们使用元素的数量作为我们的排名?这让人困惑,每个人对同一件东西使用不同的术语 我们有工会:Data structures 加权并集规则,data-structures,union-find,Data Structures,Union Find,有人能和我核实一下我在最后一步(7)中是否正确使用了规则吗 更新: 括号内的数字是参与联合的每个集合的元素数(权重(?)。大写字母是集合的名称 正如我所理解的:我们使用元素的数量作为我们的排名?这让人困惑,每个人对同一件东西使用不同的术语 我们有工会: U(1,2,A) U(3,4,B) U(A、B、C) U(5,6,D) U(7,8,E) U(D、C、F) U(E、F、G) 第7步(和其他步骤)看起来正确,但第6步不正确 在步骤6中,4应该是根,因为那是较大的树。void combine(in
void combine(intx,inty)
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]++;
}
}
{
int xroot=find(x),yroot=find(y);
if(秩[xroot]秩[yroot])
父[yroot]=xroot;
其他的
{///两者的秩相等。。
父[yroot]=xroot;
秩[xroot]++;
}
}
使用秩,可以看到集合的大小,而不是顶点的总和,因此步骤6
是错误的
但是为什么尺寸?
因为如果我们将较大集合的根设为较小集合的根,我们需要更新较小数量节点的父节点
为了得到最好的解释,我建议
希望它能帮助你 1+2+3+4=10和5+6=11,6不应该是步骤6中的根吗?(权重的原因)我从未见过使用节点值作为权重的联合查找算法-这也没有什么意义,因为节点值与操作的运行时间并不真正对应。它通常使用树的高度/深度。我按照您的指示更新了我的问题,我认为现在它是正确的(?)。抱歉,问题中有一个陷阱,我进行了编辑。这些事情很棘手!