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

时间:2018-10-29 20:10:04

标签: algorithm time-complexity computability

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

在这种算法中,为什么这些操作是恒定的而不依赖于n

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

1 个答案:

答案 0 :(得分:3)

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

倾向于遵循的规则是:

  • 如果您正在谈论排序或哈希表,则基本操作就是比较
  • 如果您在谈论任何其他实用算法,那么基本运算就是算术运算和赋值。
  • 如果您在谈论P / NP类,则基本操作是确定性图腾机的步骤数。 (我认为这等效于位操作)。
  • 如果您是作为复杂性理论专家谈论实用算法的,则通常会假设基本类型具有〜log n位,而基本运算是算术运算和对这些〜log n位字的赋值。
  • li>