这个问题引发了一些困惑和许多关于各种答案中提出的算法是 O(1) 还是 O(n) 的评论。
我们用一个简单的例子来说明这两种观点:
我们想找到一个 long
x,使得a * x + b = 0,在哪里a和b是已知的,非空 long。
- 一个明显的 O(1) 算法是
x = - b / a - 一个更慢的算法将包括测试每个可能的长值,平均慢约 2^63 倍。
第二种算法是 O(1) 还是 O(n)?
链接问题中提出的论点是:
- 它是 O(n),因为在最坏的情况下,您需要遍历所有可能的 long 值
- 它是 O(1) ,因为它的复杂性是
c x O(1),其中c = 2^64是一个常数。
虽然我理解说它是 O(1) 的论点,但感觉违反直觉。
ps:我添加了java,因为原始问题是Java,但这个问题与语言无关。