Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 算法:CLRS中的递归关系_Algorithm - Fatal编程技术网

Algorithm 算法:CLRS中的递归关系

Algorithm 算法:CLRS中的递归关系,algorithm,Algorithm,我最近试图从CLR中解出一些递归关系,在解这些方程时,我注意到了一个奇怪的细微差别。我不知道你们中是否有人注意到这一点,也不知道这是否是冠军们可以提供更多信息的理论。(我也有CS学位,但没有理论!)。在求解主定理的递推时: T(n)=a T(n/b)+f(n) 我注意到推理是这样的: i) 展开a元递归树,我们得到一个n个叶节点,其中每个节点完成的功为Θ(1),所有叶节点的功为Θ(nlogba) ii)对于所有非叶节点,g(n)=∑aj f(b/nj),其中j从0到楼层(logbn-1)求和,其

我最近试图从CLR中解出一些递归关系,在解这些方程时,我注意到了一个奇怪的细微差别。我不知道你们中是否有人注意到这一点,也不知道这是否是冠军们可以提供更多信息的理论。(我也有CS学位,但没有理论!)。在求解主定理的递推时:

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

我注意到推理是这样的:

i) 展开a元递归树,我们得到一个n个叶节点,其中每个节点完成的功为Θ(1),所有叶节点的功为Θ(nlogba)

ii)对于所有非叶节点,g(n)=∑aj f(b/nj),其中j从0到楼层(logbn-1)求和,其中树的高度为logbn

iii)现在有一个信念的飞跃:对于某些ε>0的情况,提出一个f(n)真的有界于O(nlogba-ε)的观点

iv)现在用f(n)解g(n),用g(n)解T(n)。正如第一步中提到的,T(n)实际上是Θ(nlogba)+g(n),所以一旦你有了一些g(n)和另一个术语,就可以得到T(n)

这种方法的问题是,这里的推理是这样的:看,如果我们假设右手边是X,那么我们把它插入方程来解左手边。这不是有点奇怪吗?不是这样的吗:

给定值:X2=8X-16

让我们假设X=4,把它放到RHS中,解出X,酷,看,我们得到了4!!! 这确实很有趣,但你真的解决了这个问题吗?为什么你不猜测X是一个无理数,为什么不是一个虚数


此外,我想知道这种推理存在于数学的哪个分支,因为我怀疑它是从那个领域来到CS的。有什么想法吗?我知道计算机科学中几乎99%的数学只是“在某些假设下的一些更奇特的论证形式”(因为计算机科学专业的学生不解决传统意义上的方程),但这种方法似乎非常独特。有什么想法吗?

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

  • 检查假设是否适用于某些基本情况(例如,只有一个非叶节点)
  • 假设
    n
    th非基本情况为真,则确保
    n+1
    st非基本情况为真
你通常可以通过假设你想证明的是真的,插入它,并证明它是有效的来简化这一过程。在这个特殊的例子中是否是这样,我不太清楚

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

在ii)中有一个输入错误,它应该是g(n)=∑a^j f(n/b^j)。