繁体   English   中英

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

[英]Why is it assumpted that the time-complexity of multiplication by n is constant?

不管如何实现乘法(或除法)运算(即,它是软件功能还是硬件指令),都无法在时间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位字的算术运算和赋值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM