gpt4 book ai didi

time-complexity - 查找在循环中执行 k += sqrt(k) 的时间复杂度

转载 作者:行者123 更新时间:2023-12-04 03:37:47 25 4
gpt4 key购买 nike

鉴于此代码:

int f(int n)
{
int j = 10;
while( j < n) {
j += sqrt(j);
printf("Hello\n");
}
return j;
}
我怎样才能找到它的时间复杂度,解决方案是 O(sqrt(n)) 但仍然是为什么?
谢谢你的时间 <3
我能找到的是变量 j 属于一个序列 u
n+1=un+sqrt(un),试图找到它的通用术语并没有把我带到任何地方,我也尝试过为它使用生成函数,但仍然没有用。

最佳答案

显然,计算 k + 1j -th 值可以表示为函数 f(k + 1) :
enter image description here (1)
然后,可以通过 f(k + 1) 使用 Taylor series 来近似 f(k) :
enter image description here (2)
所以,将(2)代入(1)
enter image description here
现在,一旦 f(k) 达到 n ,步数的计算如上,对于这个近似值,时间复杂度是 O(sqrt(n))
现在,让我们通过 k 表示 fk:
enter image description here
那么,一个错误有多严重?请注意,下面使用的 f(k+1)f(k)f(k+1)f(k) 的近似值(来自(1)):
enter image description here
我们不希望错误依赖于 k ,所以我们在它旁边设置了一个系数为 0 。因此,C0=2。
enter image description here
所以,我们的近似误差是 0.25
顺便说一下,我们还可以找到一个剩余的系数 C1。为此,我们可以使用 f(0)=10 的初始值。因此,0 = 2 * sqrt(10) + C1 -> C1=-6。

关于time-complexity - 查找在循环中执行 k += sqrt(k) 的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66562895/

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