使用C ++中的Robert Sedwick一书自我阅读算法
一个递归函数,它将大小为N的问题分成两部分 它解决递归调用自身的独立(非空)部分 少于N次。
如果部件是尺寸为k且尺寸为N-k的部件之一,则为总数 我们使用的递归调用的数量是T(n)= T(k)+ T(n-k)+ 1,对于 N> = 1,T(1)= 0。
溶液T(N)= N-1通过诱导立即产生。如果尺寸总和为 小于N的值,表示调用次数小于 N-1遵循相同的归纳论证。
我对上述文字的疑问是
我是数学归纳的新手,因此难以理解。
感谢您的时间和帮助
答案 0 :(得分:2)
(1)通过归纳:
T(1) = 0 (base)
T(N) = T(k) + T(N-k) + 1 (definition of problem)
我们假设每个n < N
,我们得到T(n) = n-1
由于k
和N-k
都小于N
,我们从归纳假设得出:
T(N) = (k-1) + (N-k-1) + 1 = N-1
^ ^
T(k) T(N-k)
(2) 使用相同的参数: 如果
T(N) = T(k) + T(m) + 1 where k+m < N
然后相同的证据将导致T(N) < N-1
答案 1 :(得分:0)
对于你问题的第一部分,首先我应该提一下,在我看来作者是错的,因为你有这个递归方程式:
T(n)= T(k)+ T(n-k)+ 2:因为对于n> 1你称两个较小的部分而不是一个。 现在我们的假设是2(n-1)递归调用。
现在让我们用感应来检查:
T(1) -> no recursive call.
T(2) = T(1) + T(1) + 2 : two recursive call.
...
T(n) = T(k) + T(n-k) + 2 = 2(k-1) + 2(n-k-1) + 2 = 2n-2 = 2(n-1).
同样对于你的问题的第二部分,作者意味着你是否分成两部分,使得部分的总和小于n的大小为k的一部分,另一部分大小为n-2k,对于k> 1。 1。
答案 2 :(得分:0)
首先,我们没有“通过归纳来解决方案”,我们使用归纳来证明我们的初步猜测。现在,为了猜测我们可以使用像递归树这样的方法
在您的问题中,最坏的情况是k=1
,因为它会导致最多的递归。我们也知道每个级别的成本:
T(n) = T(1) + T(n-1) + 1 => T(n) = T(n-1) + 1
现在我们必须找到T(n-1)
的费用,并将其添加到费用T(n)=1
我们猜测最终结果为N-1
。在这一步中,我们使用归纳来证明我们的猜测。
更新:
T(n)的成本是1(T(1)是零,加上将被计算的T(n-1),加1 => 1),T(n-1)的成本也是1(具有相同的成本)逻辑)。我们按n-1的深度下降。最后一个是T(1),它是零。 (画一棵树,它会帮助你理解)
这种猜测增长顺序的方法称为recursion tree。现在你可以通过归纳来证明它。
有关如何应用归纳来证明假设的更多信息,请参阅CLRS等教科书。