int func(int n){ if(n==1) return 0; else return sqrt(n); }
其中sqrt(n)是C math.h库函数。
我认为运行时间完全取决于sqrt(n)。但是,我不知道该功能是如何实现的。
PS找到我知道的数字的平方根的一般方法是使用牛顿法。如果我没看错,那么使用牛顿法的时间复杂度就是O(lg n)。那么答案应该是O(lg n)吗?
PPS在我出现的最新测试中遇到了这个问题。
我将给出更一般的案例答案,而不假设的大小恒定int。
int
答案是Theta(logn)。
Theta(logn)
我们知道newton-raphson是Theta(logn)-排除在外Theta(n)(假设sqrt()效率最高)。
Theta(n)
sqrt()
但是,一般的数字nrequries log_2(n)位编码- 你需要阅读这一切,为了得到准确的sqrt()功能。这不包括Theta(1)和Theta(log(log(n))。
n
log_2(n)
Theta(1)
Theta(log(log(n))
由上可知,函数的复杂度为Theta(log(n))。
Theta(log(n))
附带说明一下,由于O(log(n))是-的子集,O(n)因此尽管不是很严格的答案,但这也是有效的答案。有关大Theta和大O及其差异的更多信息
O(log(n))
O(n)