我需要帮助理解关于加权快速联合的问题所给出的解释:
以下哪个
id[]
数组可能是在一组10
项上运行加权快速联合算法的结果?检查所有适用的内容。回想一下,我们的加权快速联合算法按大小(节点数)使用union (而不是按身高结合)。
不正确:
9 1 7 3 4 9 6 7 8 9
说明:9-5 7-2 5-0
不正确:
2 2 2 2 5 1 2 3 1 2
说明:2-9 3-7 9-3 5-4 0-2 1-8 8-4 4-9 8-6
正确:
9 9 3 4 9 4 9 9 4 2
说明:id[]
数组包含一个循环:2->3->4->9->2
正确:
为根的树大小的两倍0 2 3 0 0 2 2 9 3 0
说明:以[{1}}的父项为根的树的大小是以2 <
正确:
2
说明:森林高度=0 4 6 7 4 1 5 1 7 3
答案 0 :(得分:3)
你还没有给出完整的背景信息,但我会尝试回答我对加权联盟的了解。
我是否必须查看每个元素以确定是否存在循环?
没有。那会破坏快速结合的目的。循环表示联合操作未正确实现。而且任何时候都不应该有循环。
我如何知道树的大小?
最初所有树的大小都是1.在union
操作中,我们总结了正在加入的2棵树的大小。我们通过数组跟踪大小(比如SZ[]
)。给定树的大小在数组中的根偏移处更新(SZ[root(i)]
)。
我如何知道森林的高度?
也必须跟踪。最初所有的树都是高度1.当你加入2棵树 - 比如A & B
时,你将A的根作为新根。然后,连接树的高度为max(A.height, B.height+1)
。
答案 1 :(得分:0)
顺便说一下,第四个问题的解释对我没有意义
因为仅在较小树中的节点深度现在将增加1,并且组合树中最深节点的深度在组合树之前最多只能比最深节点深一个。因此,组合树中的节点总数至少是较小子树中数量的两倍。 source