算法:来自CLRS的递归关系

时间:2010-09-01 06:05:48

标签: algorithm

我最近试图解决CLRS的一些递归关系,我在解决这些方程时发现了一个奇怪的细微差别。我不知道你们中是否有人注意到或者可能是理论冠军可以为此提供更多的启示。 (我也有CS学位,但理论上没有!)。在解决主定理的重现时:

T(n)= a T(n / b)+ f(n)

我注意到推理是这样的:

i)扩展a-ary递归树,我们得到一个 log b n 叶节点,其中每个节点完成的工作是Θ(1),给出Θ( n log b a )所有叶节点

ii)对于所有非叶节点,g(n)=Σa j f(b / n j )其中j总和从0到楼层(log b n - 1),其中树的高度为log b n

iii)现在进行一次信仰的飞跃:声称f(n)实际上受到O(n log b a - ε)的约束> 0

iv)现在用f(n)求解g(n)并用g(n)求解T(n)。如步骤i中所述,T(n)实际上是Θ(n log b a )+ g(n),所以一旦你有一些g(n)与另一个提出T(n)的术语

我采用这种方法的麻烦在于,这里的推理是这样的:看,如果我们假设右边是X,那么我们将其插入方程式以解决左侧。这种推理不是有点离奇吗?不是这样的:

给定:X 2 = 8X - 16

所以让我们假设X = 4并将其放入RHS并解决X,很酷,看,我们得到4! 这绝对是有趣的,但你真的解决了这个问题 - 为什么你不认为X是一个无理数,为什么不是一个虚数?

此外,我真的想知道数学的哪个分支存在这种类型的推理,因为我怀疑它来自该领域的CS。任何的想法?我知道CS中几乎99%的数学只是“在某些假设下的一些更好的参数形式”(因为CS专业不解决传统意义上的方程式),但这种方法看起来仍然非常独特。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

有趣的跳跃式信仰步骤是数学归纳的捷径。基本上,它是这样的:

  • 检查某些基本情况的假设是否为真(例如,只有一个非叶节点)。
  • 鉴于n非基本情况属实,请确保n+1非基本情况属实。

您通常可以通过假设您要证明的内容为真,插入并显示其有效来快捷方式。在这个特定情况下是否就是这种情况,我无法说清楚。

在解决这些问题时经常会有一些灵感,因为你必须为复发找出正确的形式才能使感应步骤起作用,但通常不会凭空挑选东西;在这种情况下,它是通过仔细检查叶节点和其他节点之间的关系而从非常厚的空气中挑选出来的。