【发布时间】:2021-12-16 09:44:26
【问题描述】:
谁能告诉我以下函数的复杂性是什么?以及如何计算复杂度?
我怀疑它是 O(log(n)) 或 O(sqrt(N))。 我的推理基于以 n=4、n=8、n=16 为例,我发现循环将采用 log(n) 但我认为这还不够,因为 sqrt 也会给出相同的值所以我需要处理更大的 n 值,所以我不知道如何处理这个问题。
我今天考试有这个功能。
void f(int n){
int i=1;
int j=1;
while(j <= n){
i += 1;
j += i;
}
}
【问题讨论】:
-
我的意思是我的猜测是 O(log(n)) 或 O(sqrt(n)) 不是我不记得答案 xD
-
陈述你的理由并询问你是否正确。这通常会得到一个更有利的结果,因为如果您不正确,我们可以纠正您推理中的错误,以免再次发生。
-
我的推理是基于以 n=4、n=8、n=16 为例,我发现循环将采用 log(n) 但我认为这还不够因为 sqrt 也会给出相同的值,所以我不知道如何处理这个:/
-
提示:
j遵循Triangular numbers 的模式。 -
是的,我想通了,但我仍然不确定如何从那里获得复杂性
标签: c++ algorithm time-complexity big-o