gpt4 book ai didi

algorithm - 计算算法的时间复杂度

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:36:38 26 4
gpt4 key购买 nike

如何计算函数f的时间复杂度?

void f(int n)
{
if (n <= 1)
return;
g(n, n / 3);
}

void g(int n, int m)
{
int i = 1;
while (m < n) {
m += i;
i++;
}
f(n / 2);
}

答案是 sqrt(n),但我不知道如何...

谢谢

最佳答案

首先,请注意,通过在 f() 中内联 g(n,m),该程序现在可以转换为单个函数程序:

void f(int n)
{
if (n <= 1)
return;
m = n/3;
while (m < n) {
m += i;
i++;
}
f(n / 2);
}

内循环在O(sqrt(n))迭代中运行,因为它从n/3开始,以n结束,并且增加了 1,2,3,... 所以如果我们对它求和我们得到:

n/3 + (1 + 2 + ... + i) >= n

我们需要求解上面的方程来求出i的最终值,我们得到:

1 + 2 + ... + i >= 2n/3

从等差数列和:

i(i+1)/2 >= 2n/3

从上面的不等式,we can conclude确实 iO(sqrt(n)) 中。

因此,我们可以将复杂度表示为:

T(n) = T(n/2)              +           O(sqrt(n))
^ ^
recursive step syntatic sugar for some function
which is in O(sqrt(n)).

现在,我们可以看到:

T(n) = T(n/2) + sqrt(n) = T(n/4) + sqrt(n/2) + sqrt(n) = ... =
= sqrt(1) + ... + sqrt(n/2) + sqrt(n)

And the above sum is in O(sqrt(n))

关于algorithm - 计算算法的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31110981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com