排序算法的效率

时间:2009-09-13 16:59:51

标签: algorithm performance theory big-o

明天我正在研究一个非常重要的面试,有一件事我遇到了很多麻烦:排序算法和BigO效率。

知道什么数字很重要?最佳,最差或平均效率?

6 个答案:

答案 0 :(得分:4)

最差,其次是平均值。要注意所谓的“隐藏常数”的真实影响 - 例如,经典的快速排序算法在最坏的情况下是O(n ^ 2),平均是O(n log n),而mergesort在最坏的情况下是O(n log n),但是quicksort在实践中将胜过mergesort。

答案 1 :(得分:2)

当然,所有这些都很重要。您必须了解一种算法在一般案例中的好处在最坏的情况下会变成可怕的赤字,或者最糟糕的情况并不是那么糟糕,但最好的情况并不是那么好,而且它只适用于未分类的数据等

答案 2 :(得分:2)

简而言之。

排序算法效率因输入数据和任务而异。

  • 排序最大速度,可归档为n * log(n)
  • 如果数据包含已排序的子数据,则最大速度可以比n * log(n)
  • 更好
  • 如果数据包含重复项,则可以在接近线性的时间内完成排序
  • 大多数排序算法都有其用途

大多数快速排序变体的平均情况也是n * log(n),但是通常比其他未经过大量优化的算法更快。当它不稳定时它会更快,但稳定的变体只会慢一点。主要问题是最坏的情况。最好的休闲装是Introsort。

大多数合并排序变体的最佳,平均和最差情况都固定为n * log(n)。它稳定且相对容易扩展。但是它需要相对于总项目大小的二叉树(或其仿真)。主要问题是记忆。最好的休闲装是timsort。

排序算法也因输入大小而异。我可以做一个新手声称,超过10T大小的数据输入,没有匹配合并排序变体。

答案 3 :(得分:1)

我建议你不要只记住这些事实。了解他们为何如此。如果我正在采访你,我会确保提出问题,告诉我你了解如何分析算法,而不仅仅是可以吐出你在网页或书中看到的东西。此外,面试前一天不是进行此项学习的时间。

祝你好运!请在评论中报告它是如何发生的!

答案 4 :(得分:1)

我刚刚在我的大学接受了一组面试......

每种算法都有其优点,否则它不存在。 因此,更好地了解您正在研究的算法的优点。它在哪里做得好?如何改进?

我猜你自己需要在执行此操作时阅读各种效率符号。注意最坏的情况,并注意平均情况,最好的情况很少见。

你的面试最好。

答案 5 :(得分:0)

您可能还想查看在存在特定条件时可以使用的其他类型的排序。例如,考虑Radix排序。 http://en.wikipedia.org/wiki/Radix_sort