可能有很多理由让我们更喜欢大O时间复杂度较高的算法,而不是较低的算法:
始终存在隐藏常数,在O(logn)算法中,该常数可以更低。因此在实际应用中,它可以更快地处理真实数据。
还有空间方面的顾虑(例如在烤面包机上运行)。
还有开发人员的时间问题-O(logn)可能更容易实现和验证1000×。
我很惊讶还没有人提到记忆限制应用程序。
可能存在由于其复杂性(即O(1) 我所说的“内存受限”是指您经常访问的数据经常处于缓存外。为了获取这些数据,您必须将实际内存空间中的内存拉到缓存中,然后才能对其执行操作。这个获取步骤通常相当缓慢--比您的操作本身慢得多。 因此,如果您的算法需要更多的操作(然而这些操作是在已经在缓存中的数据上执行的[因此不需要fetch]),就实际的Wall-time而言,它仍然会比您的算法执行的操作更少(这些操作必须在缓存外的数据上执行[因此需要fetch])。