【问题标题】:What is the implication of recursive calls modeling a perfect binary tree?递归调用建模完美二叉树的含义是什么?
【发布时间】:2011-08-11 08:41:22
【问题描述】:

我正在学习数据结构和算法。我参考的书(Sedgwick)使用“寻找最大元素”来说明分而治之的策略。该算法将一个数组中途分成两部分,找到两部分中的最大元素(递归),返回两者中较大的一个作为整个数组的最大元素。

下面是一道题

修改用于查找数组中最大元素的分治程序(程序 5.6),将大小为 N 的数组分成大小为 k = 2^(lg N – 1) 的部分和大小为另一部分, N – k(至少有一个部分的大小是 2 的幂)。

绘制与您的程序在数组大小为 11 时进行的递归调用相对应的树,类似于程序 5.6 中所示的树。

我看到这种二叉树的左子树是完美二叉树,因为第一个子集的大小是 2 的幂。作者希望我从中得到什么暗示?

【问题讨论】:

  • 我不会试图在其中找到任何“深刻”的含义。作者可能只是想通过让您跟踪“不常见”递归模式的执行来增强您对递归的理解。
  • @abeln,在我看来,完美的二叉树并不“不常见”。但我开始看到将完美二叉树建模为“不常见/不常见”的递归模式。

标签: algorithm data-structures recursion binary-tree divide-and-conquer


【解决方案1】:

我想这个练习的一个重点在于 k。这表明,如果您在二元递归中对 k 使用此公式,那么您的底层树是“漂亮的”,因为每个节点(不仅仅是根)的左子树是一棵完美的二叉树。

当然,在 N 是 2 的幂的“理想”情况下也表现良好;那么k就是N/2,每个子树(不仅是左子树)都是一棵完美的二叉树。

【讨论】:

  • 感谢您指出这种 k 的任何二进制递归的一般情况的行为。我错过了它,虽然它很明显。当我问这个问题时,我最初的期望是算法是否通过这样的子集划分得到了改进。从你和上面的ablens评论来看,我认为我用错误的视角看待运动问题。
猜你喜欢
  • 2019-07-02
  • 1970-01-01
  • 2011-05-08
  • 2016-04-19
  • 2014-03-29
  • 2018-02-02
  • 2015-07-25
  • 2013-10-24
  • 2010-12-07
相关资源
最近更新 更多