我真的很困惑简化这种递归关系:c(n)= c(n / 2)+ n ^ 2.
所以我先得到了:
c(n / 2)= c(n / 4)+ n ^ 2 所以 c(n)= c(n / 4)+ n ^ 2 + n ^ 2 c(n)= c(n / 4)+ 2n ^ 2
c(n / 4)= c(n / 8)+ n ^ 2 所以 c(n)= c(n / 8)+ 3n ^ 2
我确实注意到了一种模式:
2提升到“n ^ 2”前面的任何系数的幂,给出了n结束的分母。
我不确定这是否会有所帮助。
我只是不明白如何简化这种递归关系,然后找到它的theta符号。
编辑:其实我刚刚完成了它,我得到了c(n)= c(n / n)+ n ^ 2 * lgn。
我认为这是正确的,但我不确定。另外,我怎么能找到那个theta符号呢?它只是theta(n ^ 2lgn)?
答案 0 :(得分:2)
首先,在将n/2
放在lhs上时,请务必在原始递归关系中出现{strong>替换 n
c(n/2)
。
即
c(n/2) = c(n/4) + (n/2)^2
你的直觉是正确的,因为它是问题的一个非常重要的部分。在我们到达n
之前,您可以将2
除以1
多少次?
让我们以8为例
8/2 = 4
4/2 = 2
2/2 = 1
你看到3
,结果是log(8)
为了证明theta符号,查看master theorem可能会有所帮助。这是证明递归关系复杂性的非常有用的工具。
使用主定理案例3,我们可以看到
a = 1
b = 2
logb(a) = 0
c = 2
n^2 = Omega(n^2)
k = 9/10
(n/2)^2 < k*n^2
c(n) = Theta(n^2)
答案为Theta(n^2)
的原因的直觉是你有n^2 + (n^2)/4 + (n^2)/16 + ... + (n^2)/2^(2n)
,它不会给我们logn
n^2
,而是越来越小n^2
Š
答案 1 :(得分:2)
让我们回答更复杂的表格问题:
r(n) = r(d(n)) + f(n)
。对功能有一些限制,需要进一步讨论,例如:如果x
是d
的修正点,则f(x)
应为0,否则无法解决问题。在您的具体情况下,这个条件得到满足。
重新排列等式,我们得到r(n) - r(d(n)) = f(n)
,我们得到的直觉是r(n)
和r(d(n))
都是某些术语的总和,但r(n)
还有一个术语比r(d(n))
,f(n)
为差异的原因。另一方面,r(n)
和r(d(n))
必须具有相同的&#39;形式&#39;,因此前面提到的总和中的术语数量必须是无限的。
因此,我们正在寻找一个伸缩总和,其中r(d(n))
的术语取消r(n)
的所有术语:
r(n) = f(n) + a_0(n) + a_1(n) + ...
- r(d(n)) = - a_0(n) - a_1(n) - ...
后者意味着
r(d(n)) = a_0(n) + a_1(n) + ...
只需将d(n)
替换为n
到[{1}}的等式中,我们就得到:
r(n)
所以选择 r(d(n)) = f(d(n)) + a_0(d(n)) + a_1(d(n)) + ...
,a_0(n) = f(d(n))
等等:a_1(n) = a_0(d(n)) = f(d(d(n)))
(彼此a_k(n) = f(d(d(...d(n)...)))
件k+1
),我们就会得到正确的答案溶液
因此,一般来说,解决方案的格式为d
,其中r(n) = sum{i=0..infinity}(f(d[i](n)))
表示函数d[i](n)
,d(d(...d(n)...))
函数的迭代次数i
对于您的案例d
和d(n)=n/2
,您可以使用几何系列的标识以封闭形式获得解决方案。最终结果是f(n)=n^2
。
答案 2 :(得分:0)
前进硕士定理。
T(n) = aT(n/b)+n^klog^p
where a>0 b>1 k>0 p=real number.
case 1: a>b^k
T(n) = 0(n^logba) b is in base.
case 2 a=b^k
1. p>-1 T(n) than T(n)=0(n^logba log^p+1)
2. p=-1 Than T(n)=0(n^logba logn)
3. p<-1 than T(n)=0(n^logba)
case 3: a<b^k
1.if p>=0 than T(n)=0(n^k log^p n)
2 if p<0 than T(n)=O(n^k)
forgave常量bcoz常量不会改变时间复杂度或不变处理器到处理器。(即n / 2 == n * 1/2 == n)