据我所知,O(1) 表示无论输入维度如何,算法都将花费恒定的执行时间。我还了解到 O(N) 表示执行时间与输入维度大小成正比线性增加。
但是,我只是通过记住它们的定义才知道这一点。我对解释 O(1) 没有直觉,只是记得这意味着恒定时间执行。我很好奇在阅读大 O 符号时如何理解直觉。
那么对于常数时间执行 O(1) 来说,1 代表什么?为什么不让它成为 O(2) 呢? 2 也是一个与输入大小 N 无关的常数。
最佳答案
符号O(...)
表示一组函数。粗略地说,O(f(n))
是一组渐近增长速度不比 f
快的函数。
常量函数f(n) = 1
根本不会增长,常量函数f(n) = 2
也不会增长,因此两者都不会渐近增长比另一个更快。此外,任何其他函数的渐近增长速度都比 1
快,当且仅当它的增长速度渐近快于 2
时。因此,当且仅当函数位于集合 O(2)
中时,函数才位于集合 O(1)
中,这意味着它们是同一集合。
这意味着您可以编写 O(2)
并且它是严格正确的,但编写 O(1)
更简单(因此更传统)。你可以把这想象成解决一个数学问题,答案是一个分数;您应该以最简单的形式写出答案。严格来说,6/4等于3/2,但习惯上写成3/2。
关于algorithm - 为什么常量执行时间的 Big O 表示法是 O(1) 而不是 O(2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59994893/