Algorithm 加权快速联合解释

Algorithm 加权快速联合解释,algorithm,quick-union,Algorithm,Quick Union,我需要帮助理解有关加权快速联合的问题给出的解释: 以下哪个id[]数组可能是对一组10项运行加权快速联合算法的结果?勾选所有适用项 回想一下,我们的加权快速联合算法使用按大小联合(节点数) (且不按高度连接) 不正确:9173496789 说明:9-57-25-0 不正确:2 2 2 5 1 2 3 1 2 说明:2-93-79-35-40-21-88-44-98-6 正确:93494942 说明:id[]数组包含一个循环:2->3->4->9->2 正确:02330022930 说明:在2的父

我需要帮助理解有关加权快速联合的问题给出的解释:

以下哪个
id[]
数组可能是对一组
10
项运行加权快速联合算法的结果?勾选所有适用项

回想一下,我们的加权快速联合算法使用按大小联合(节点数) (且不按高度连接)

不正确:
9173496789

说明:
9-57-25-0

不正确:
2 2 2 5 1 2 3 1 2

说明:
2-93-79-35-40-21-88-44-98-6

正确:
93494942

说明:
id[]
数组包含一个循环:
2->3->4->9->2

正确:
02330022930

说明:在
2的父级扎根的树的大小lg N=lg(10)

  • 我怎么知道前两个问题所显示的实际工会运作
  • 我是否必须查看每个元素以确定是否存在循环
  • 我怎么知道一棵树的大小?(顺便说一句,第四个问题的解释对我来说毫无意义)
  • 我怎么知道森林的高度

您还没有给出完整的上下文,但我将尝试从我所知道的关于加权并集的内容来回答

我是否必须查看每个元素以确定是否存在循环

不,那会破坏快速联合的目的。循环表示联合操作未正确执行。任何时候都不应该有循环

我怎么知道一棵树的大小

最初,所有树的大小都是1。在
union
操作中,我们将合并的两棵树的大小相加。我们通过一个数组跟踪大小(比如说
SZ[]
)。给定树的大小在数组中的根偏移处更新(
SZ[root(i)]

我怎么知道森林的高度

这也必须被追踪。最初,所有树的高度都为1。当你加入两棵树时——比如说
A&B
,你就把A的根作为新的根。然后连接树的高度将为
max(A.height,B.height+1)

顺便说一句,第四个问题的解释对我来说毫无意义


因为只有较小树中的节点深度现在将增加1,而组合树中最深节点的深度最多只能比组合树之前最深节点的深度深1。因此,组合树中的节点总数至少是较小子树中的两倍

如果问题只给出了数组(
2452…
),我不需要查看每个元素直到找到循环吗?否则我怎么才能找到一个呢?@templateboy:是的,从每个元素开始,你可以检查任何和所有的循环。但正如我所回答的,在进行并集时,在连接两个不相交的集合之前,应该检查它们是否有不同的根。让
A.height=x
B.height=4
。现在,如果您作为
A
的子级加入
B
,则需要将5与x进行比较。额外的1是A的根。