algorithm - 如果循环变量除/乘以恒定量,为什么我们将时间复杂度视为 O(Logn)?

标签 algorithm time-complexity big-o

如果循环变量除/乘一个常数,为什么我们将时间复杂度视为 O(Logn)? 就像,

 for (int i = 1; i <=n; i *= c) {
       // some O(1) expressions
   }
   for (int i = n; i > 0; i /= c) {
       // some O(1) expressions
   }

最佳答案

好吧,这样想 - 如果常数是正整数,那么复杂度会比 2 更好。 。因此,通过考虑常数 2我们不会因暗示算法的复杂性(Big-Oh)而遭受任何损失。现在,如果您考虑 2那么它将运行大约 log_2(n)次。由此开始,它就出现了。

无论常数是什么(正整数),复杂度的上限都是 O(log_2(n))因此,我们可以认为复杂度为 Big_O,其边界为 O(long_2(n)) 。准确的计算会给出O(log_C(n))其中O(log_C(n)) < O(log_2(n)) 。这就是为什么这个成立。

关于algorithm - 如果循环变量除/乘以恒定量,为什么我们将时间复杂度视为 O(Logn)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48911902/

相关文章:

algorithm - 复杂度为 O(n^5) 的算法示例是什么?

algorithm - 复杂度表示法如何处理预计算?

C++ 使用继承来调整算法

java - 任何用于匹配名称的消歧工具/API?

algorithm - 搜索不存在且从未存在的 key O(n)?

java - 从我的旧算法中找出大 O 符号/递归关系

complexity-theory - Big O Notation,我们什么时候可以合法地删除常量?

f# - F# 函数的最坏情况渐近时间复杂度

algorithm - 通过 BFS 在无向图中查找关节顶点

arrays - 数组中的四元组满足约束