Compute the average distance from a node to the root in a worst-case tree of
2^n nodes built by the weighted quick union algorithm?
这是C ++中的算法练习(Robert Sedgewick)。
我知道距离最差的情况,但有人可以建议我正确计算平均距离吗?
最坏的情况是合并2个树和相同数量的节点。让我们说合并2树每个有2 ^ n个节点,结果树[=大小2 ^( n + 1 )个节点]将有 n + 1 max 任何节点的距离从根(合并后超过1)。
在最坏的情况下 - 如果树大小为2 ^ n,则从根到任何节点的距离始终小于n。
如果2 ^ n节点树的最大距离为n,我们如何计算平均距离?
答案 0 :(得分:1)
最糟糕的情况就像你说的那样,你总是添加两棵相同高度的树。为了实现它,你需要:2棵高度为n-1的树,为了达到它,你需要4棵高度为n-2的树,.......
最后,你需要n棵树高1,n / 2棵树高2,......,1树高n 。
由于这是你的作业,我将通过暗示你如何继续来完成:
使用前瞻性观察,并按照算法构建树木并“实现”最坏情况。请注意每个深度中有多少叶子 - 如果您以这种方式构建树[从私有案例开始,n = 1,2,3并查看它如何“行为”]
如果你需要正式证明它 - 它应该可以通过高度[n]的归纳来完成。