我如何将我对 O(log N) 的理解应用到这个特定函数中?

How do i apply my understanding of O(log N) to this specific function?

因此,我对 O(log n) 的理解是时间线性增加,而 n 呈指数增加。我正在尝试将这种理解应用于 interviewbit 的以下功能:

int a = 0, i = N;
    while (i > 0) {
        a += i;
        i /= 2;
    }

我似乎无法理解为什么时间复杂度是 O(log n)。任何人都可以对此进行分解并解释原因吗?

在此示例中,您需要计算循环迭代次数,因为这些迭代次数决定了算法所需的总时间。

由于 i 在每次迭代中除以 2,因此我们有 log N 次循环迭代(以 2 为底的对数更容易理解,但这并不重要)。

示例:对于 N=64,您有 7 次迭代,第一次 i=64,第二次 i=32,然后是 16、8、4、2、1,最后循环在除以 [=12 后停止=] 给出 0(整数算术)。如果将 N 加倍到 128,则有 8 次迭代。如果将 N 再次加倍到 256,则有 9 次迭代。在这里,您可以看到 N 呈指数增长,而循环迭代次数(即时间)呈线性增长。