algorithm - 为什么常量执行时间的 Big O 表示法是 O(1) 而不是 O(2)?

标签 algorithm big-o

据我所知,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/

相关文章:

c# - 当操作 "approaches O(1)"而不是 "is O(1)"时,这意味着什么?

java - 在潜在语义索引方面需要帮助

python - 如何将分段(交替线性和恒定段)函数拟合为抛物线函数?

java - 如何在 QuickSelect 中实现重复

big-o - 代码片段渐近分析

javascript - 这个 O(1) 空间而不是 O(n) 空间如何。 firstNotRepeatingCharacter 挑战解决方案

algorithm - 函数的大 O 阶

c++ - 解决 C++ 中的最小交换 hackerrank 问题

java - Java 中一组数据的排列

algorithm - 有效地获得排序列表的排序总和