一尘不染

O(n log n)vs O(n)-时间复杂度的实际差异

algorithm

n log n > n-但这就像一段pseudo-linear感情。如果n=1 billion,则登录n〜30;

所以n log n30 billion,这是30 X n,秩序n。我想知道两者之间的时间复杂度差异n log n and n在现实生活中是否显着。

例如:quick select在未排序数组中找到第k个元素时,正在O(n)使用quickselect算法。

如果我对数组进行排序并找到第k个元素,则为O(n log n)。要用1 trillion元素对数组排序,60 times如果我quicksort和做的话,我会变慢index it


阅读 330

收藏
2020-07-28

共1个答案

一尘不染

Big-
O表示法的主要目的是让您像在帖子中所做的那样进行估算,并自己决定花费精力编写通常更高级的算法是否值得您付出额外的CPU周期。购买该代码的改进。根据情况,即使您的数据集相对较小,您也可能会得到不同的答案:

  • 如果您在移动设备上运行,并且算法占执行时间的很大一部分,那么减少CPU使用量就可以延长电池寿命
  • 如果您在一个全有或全无的竞争环境(例如高频交易系统)中运行,那么微观优化可能会在赚钱和亏损之间有所区别
  • 当您的性能分析表明所讨论的算法在服务器环境中占据着执行时间时,切换到更快的算法可能会提高所有客户端的性能。

Big-O表示法隐藏的另一件事是常数乘法因子。例如,Quick Select具有非常合理的乘数,因此将其应用于非常大的数据集所节省的时间非常值得实施。

您需要记住的另一件事是空间的复杂性。通常,具有O(N*Log N) 时间复杂度的算法将具有O(Log N)空间复杂度。例如,当递归函数在堆栈容量有限的系统上运行时,这可能会给非常大的数据集带来问题。

2020-07-28