algorithm - 当我无穷大接近零时循环结束?

标签 algorithm

所以我想知道下面这个问题的时间复杂度。正确的解决方案是 O(logN);如果此循环终止,我会理解这一点。但是因为我们只有一半,所以理论上 i 可以非常接近 0,但永远不会结束?!

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

最佳答案

重要的是要记住,您是在除以 int,而不是浮点值,因此没有小数部分。相反,任何剩余部分都将被简单地丢弃。所以一旦你降到 1,一半是 0.5,因为你只取整数部分,你将得到 0。因此,这最终会结束。

例如,如果您从 10 开始:

10/25

5/22加上1的余数——余数被丢弃——i2

2/21

1/20加上1的余数——余数被丢弃——i0

关于algorithm - 当我无穷大接近零时循环结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386154/

相关文章:

python - 如何根据另一个列表计算项目在列表中出现的次数

Python:找到两个列表中存在的给定长度的公共(public)子列表

javascript - javascript中对象数组的笛卡尔积

algorithm - 寻找具有尽可能少的比较操作的排序算法

algorithm - 递归树的时间复杂度

algorithm - tinyAVR : How can one multiply by 203, 171,还是 173 真的快?

algorithm - 将数组拆分为 2 个子数组并递归求解它们仍然是 O(log(n))?

algorithm - 最合适的排序算法

c++ - 受模式约束的最长公共(public)子串

c++ - 日期模式比较和匹配