我已经阅读了
的恒定时间算法的一些含义恒定时间:O(1)
如果算法需要相同的时间量而不考虑输入大小,则称算法在恒定时间内运行。例子:
数组:访问任何元素
固定大小的堆栈:推送和弹出方法
fixed-size queue:enqueue和dequeue methods
但我仍然不清楚上面的例子。
感谢。
答案 0 :(得分:3)
恒定时间和O(1)的英语含义实际上略有不同。
O(1)表示上限是一个常数,即一个以常数为界的函数。请注意,每个输入都没有相同的内容。
例如,考虑方法
uint f(uint n) {
if (n % 2 == 0) {
printf("111");
} else {
printf("111222333");
}
}
这将需要不同的时间,具体取决于n是否为偶数(加上其他未知因素,如OS等)。
我们仍称它为O(1),因为从理论上讲,运行时受一个常数限制:if say用执行的指令数量来衡量。在谈论复杂性时,这种度量标准很重要(通常在讨论中隐含)。在谈论复杂性之前,你需要有一个基础的计算模型。
通常人们会想到单位成本word ram模型,它会密切关注当前现代计算机。每个指令都有单位成本(包括内存访问),时间复杂度是以执行的指令数量来衡量的。这是人们谈论复杂性时使用的通常模型(在教科书/面试问题等中)。
在该模型中,上面的示例只需要固定数量的指令,即使某些输入可能会有所不同,但它仍然会小于该数字,并且为O(1)。
我们可以说它是常数',是因为我们可以使用NO-OPS填充每次执行以获取相同数量的指令。