algorithm - 为什么假设乘以 n 的时间复杂度是常数?

标签 algorithm time-complexity computability

无论乘法(或除法)运算如何实现(即是软件函数还是硬件指令),都无法在 O(1) 时间内求解。对于大的 n 值,处理器甚至无法通过一条指令计算它。

在这样的算法中,为什么这些操作是常量而不依赖于 n

for (i = 1; i <= n; i++) {
    j = n;
    while (j > 1)
        j = j / 3;    //constant operation
}

最佳答案

时间复杂度不是时间的度量。它是“基本操作”的度量,可以根据需要进行定义。通常,任何算术运算都被视为基本运算。有时(例如,当考虑排序算法或哈希表操作的时间复杂度时),基本操作是比较。有时,“基本操作”是对单个位的操作(在这种情况下,j=j/3 的时间复杂度为 O(log(j))。

通常要遵循的规则是:

  • 如果你在谈论排序或哈希表,基本操作就是比较
  • 如果您谈论的是任何其他实用算法,基本运算就是算术运算和赋值。
  • 如果您谈论的是 P/NP 类,那么基本操作就是确定性图灵机的步数。 (我认为这相当于位操作)。
  • 如果您作为复杂性理论专家谈论实用算法,您通常会假设基本类型有 ~log n 位,并且基本操作是算术运算和对这些 ~log n 位字的赋值。<

关于algorithm - 为什么假设乘以 n 的时间复杂度是常数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53053104/

相关文章:

java - 图和渐近分析之间的差异以比较算法的运行时间

algorithm - 检查二叉树是镜像还是对称

c# - 找到点所在的正方形中心

python - 将国家映射到经纬度信息

Java Map实现渐进复杂度(HashMap、LinkedHashMap、TreeMap)

javascript - 理解使用对象作为散列的 JavaScript 算法的复杂性

quine - 写一个 Quine 的 "trick"是什么?

异或 (XOR) 加密的安全性

functional-programming - lambda 演算等价于图灵机是什么意思

algorithm - 空间数据结构中的不同搜索方法