我正在学习数据结构和算法。我所提到的这本书(塞奇威克)使用“找到最大元素”来说明分而治之的策略。该算法将数组中间分为两部分,找到两部分中的最大元素(递归),并将两者中较大的元素作为整个数组的最大元素返回。
以下是提出的问题
修改分而治之程序以找到数组中的最大元素(程序5.6),将大小为N的数组划分为大小为k = 2 ^(lg N-1)的一部分,另一部分为大小, N-k(使得至少一个部分的大小为2的幂)。
绘制与程序在数组大小为11时进行的递归调用相对应的树,类似于程序5.6中显示的树。
我看到这样的二叉树的左子树是完美的二叉树,因为第一个子集的大小是2的幂。作者希望我能从中获得什么?
答案 0 :(得分:1)
我认为这个练习的一个核心在于 k 。它指出,如果你在二进制递归中使用 k 的这个公式,那么你的底层树是“漂亮的”,在某种意义上,每个节点(不仅仅是根)的左子树是一个完美的二叉树。
当 N 为2的幂时,它在“理想”情况下也表现良好; k 就是 N / 2 ,每个子树(不仅是左边)都是完美的二叉树。