计算分区问题的大O复杂度

问题描述 投票:3回答:1

我的伪代码看起来像:

solve(n)
    for i:= 1 to n do
       process(i);
       solve(n-i);

其中process(n)是一个具有一些复杂性f(n)的函数。在我的情况下f(n)=O(n^2),但我也对一般情况感兴趣(例如,如果f(n)=O(n))。

所以,我有T(n) = f(n) + ... + f(1) + T(n-1) + ... + T(1)。我不能应用Master定理,因为子问题的大小不一样。

如何计算这种递归的复杂性?

recursion time-complexity big-o partitioning
1个回答
3
投票

小技巧 - 考虑solve(n-1)

solve(n)  :  T(n)   =  f(n) + f(n-1) + f(n-2) + ... + f(1) + T(n-1) + T(n-2) + ... + T(0)
solve(n-1):  T(n-1) =         f(n-1) + f(n-2) + ... + f(1) +          T(n-2) + ... + T(0)

从前者中减去后者:

enter image description here

反复展开:

enter image description here

求解f(n)的最后总和以获得复杂性。

例如对于f(n) = O(n)


替代方法 - 变量替换:

enter image description here

S(m)是主定理的正确形式。

例如对于f(n) = O(n) = O(log m),使用案例2与k = 0

enter image description here

同样的结果,q.e.d。

© www.soinside.com 2019 - 2024. All rights reserved.