这个问题出现在家庭作业上。我无法理解为什么?您似乎总是希望选择产生最佳运行时间的算法。
答案 0 :(得分:2)
Big O和Big Theta符号仅表示对于任意大的输入大小,性能趋于某种限制。例如,函数99999999n是O(n)但函数(1/9999999999)n ^ 2是O(n ^ 2)。但是,对于任何合理大小的输入(不是无限大),O(n ^ 2)函数显然可能更快。
换句话说,如果您可以对输入数据做出假设,那么在某些情况下,通常较差的算法可能会表现得更好。
上述概念的一个真实例子是排序 - 如果数组已经排序(冒泡排序),有些算法在O(n)时间内执行。如果你知道很多数组已经排序,你可以选择使用冒泡排序而不是合并排序。
另一个您可能不想使用更节省时间算法的极端情况是空间效率。也许你是在内存非常少的嵌入式设备上编程的。你宁愿使用更少的内存,浪费更多的时间,而不是尽可能节省时间。