为什么这个算法是O(N)?

use*_*258 4 c algorithm big-o

以下C代码显然是O(N)(根据我的实践考试).但是,我不确定为什么它是O(N)而不是O(Something*Something).

void doit(int N) {
    while (N) {
        for (int j = 0; j < N; j += 1) {
        }
        N = N / 2;  
    }
}
Run Code Online (Sandbox Code Playgroud)

有人关心这个问题给我一些见解吗?

提前致谢!

Pau*_*kin 20

因为N + N/2 + N/4 + ... = 2N.

  • @ user2109258这实际上是一个着名的系列,想到一个男人和他的狗,他们俩都要去同一个地方,狗的速度是男人的两倍,所以当狗到达目标时,他回到了男人,当狗回到男人身边时,他会回到目标身上,等等,直到那个人到达目标,问题是**狗的总行进距离是多少**? (2认同)