给定递归算法解决递归关系并给出最坏情况下的时间复杂度,这是正确的吗?

Posted

技术标签:

【中文标题】给定递归算法解决递归关系并给出最坏情况下的时间复杂度,这是正确的吗?【英文标题】:Given a recursive algorithm solve the recurrence relation and give the time complexity in worst case, this is correct? 【发布时间】:2016-08-13 12:34:32 【问题描述】:

求时间复杂度,在最坏的情况下,函数 n = 2N , N >=0。

找到递归关系并解决它。

 public static void xpto(v, n)
    if (n <= 1) 
        return;
    n=n/2;
    for(i=0;i<n;i=i+1) 
        v[i] = v[2i] + v[2i +1];
    xpto(v, n);


T(1) = 1

代入式递归方程:

T(n) = 1 + 1 + (n + 1) + n + T(n/2)

T(n) = 3 + 2n + T(n/2)

T(n/2) = 3(2) + 2n(2) + T(n/4)

T(n/4) = 3(3) + 2n(3) + T(n/8)

T(n/8) = 3(4) + 2n(4) + T(n/16)

找到模式

T(n/8) = 3(4) + 2n(4) + T(n/2^4)

以 k 表示的一般递归:

T(n) = 3(k) + 2n(k) + T(n/2^k)

if T(1) = 1 and T(n/2^k) we need to change 2^k by n, this means:

2^k = n

T(n) = 3(log n) + 2n(log n) + 1

递归关系求解。

时间复杂度,最坏的情况是 O(log(n))

问题:

我这样做对吗? n = 2N , N >=0 的函数是什么意思?

【问题讨论】:

for(i=0;i&lt;n;i=i+1) v[i] = v[2i] + v[2i +1]; 仅此而已O(log(n)) 我需要这个问题的正式答案,以及为什么会这样的定理和原因。 【参考方案1】:

首先,如果您得到:T(n) = 3(log n) + 2n(log n) + 1 作为您的最终解决方案,那么最坏情况的复杂性将不是log n,而是n(log n),因为2n(log n) 一词。

根据您最初的重复关系:T(n) = 3 + 2n + T(n/2) 我做了以下事情:

Assume n = 2^k and g(k) = T(n) such that:
g(k) = g(k-1) + 2*2^k + 3 (from simply substituting n=2^k and change of function)
g(k) = sum(i=1 to k) of (2*2^i + 3)
g(k) = 2 * (sum(i=1 to k) of (2^i)) + 3k

Using geometric progression, common ratio = 2:
g(k) = 2 * (2(1-2^k) / (1-2)) + 3k
g(k) = -4 + 4*2^k + 3k

Since we initially assumed n = 2^k, this means k = log n:
T(n) = -4 + 4n + 3(log n)
Hence the worst case complexity is O(n)

关于你问题的第二部分:

n = 2N 其中 N >= 0 仅表示 n 是一组偶数,因为任何正整数乘以 2 都是偶数。

【讨论】:

【参考方案2】:

我不确定你是如何得到这些常量的,但为了简单起见,我们假设操作 v[i] = v[2i] + v[2i +1]; 的成本为 1,其他一切都是免费的。 (它可以很容易地调整而不损害​​以下计算的概念)。

基于此,

T(n) = n/2 + T(n/2)

基于此,我们可以将master theorem case 1与c=1, a=1,b=2一起使用,并得出T(n)Theta(n^1)=Theta(n)中的结论

【讨论】:

你在说哪些常量? @MauroAlmeida T(n) = 3 + 2n + T(n/2) 中的常量(2n 中的 3 和 2)。 好吧,1 之类的,这只是我说的 1 次我认为,我正在学习算法分析,不确定。 n = 2N , N >=0 的函数是什么意思?

以上是关于给定递归算法解决递归关系并给出最坏情况下的时间复杂度,这是正确的吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何为给定的代码编写递归关系

【比较难写的算法】最坏情况线性时间的选择

排序算法

二分查找最坏情况下的复杂度?

归并排序(递归非递归以及自然归并排序)算法总结

算法分析| 系列4(解决递推)