【问题标题】:Efficiency of Sort Algorithms排序算法的效率
【发布时间】:2010-11-27 22:35:45
【问题描述】:

我正在为明天的一次非常重要的面试做准备,但有一件事我遇到了很多麻烦:排序算法和 BigO 效率。

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

【问题讨论】:

  • 我当然希望你明天的面试官不是那么普通:)
  • 我不知道提出问题以提高您的一般知识有什么问题。尤其是在准备面试时,你应该攻击你最大的弱点,而不考虑面子或你看起来有多愚蠢。根据我的经验,那些最害怕看起来像个傻瓜的人经历的个人成长最少。

标签: algorithm performance theory big-o


【解决方案1】:

最差,其次是平均水平。也要注意所谓的“隐藏常量”对现实世界的影响——例如,经典的快速排序算法在最坏的情况下是 O(n^2),平均是 O(n log n),而归并排序在最坏的情况下是 O(n log n),但在实践中快速排序将优于归并排序。

【讨论】:

  • Natural Mergesort 可以将快速排序和 quickersort 抛诸脑后 -- cfr svn.python.org/projects/python/trunk/Objects/listsort.txtstackoverflow.com/questions/154504/…hatfulofhollow.com/posts/code/timsort 等。
  • 虽然这是一个很好的答案,但我必须管理我会犹豫是否雇用一个不了解开发人员这样基本和显而易见的东西的人。
  • DVK,你听起来像是象牙塔里的那种人,那种用最大的努力小心翼翼地守护着他的小知识领域的人。您不是在这里分享您的知识,以及您支持社区的努力吗?您是否担心有人会在该领域获得能力然后抢走您的工作?
  • alex:这很漂亮。不知道 timsort 有多好。
  • @MedicineMan。你对@DVK 的回应有点过于防御性了。那里有一些完全同意 DVK 的好公司——这就是 Paint The Fence 的东西。
【解决方案2】:

当然,所有这些都很重要。您必须了解一种算法在平均情况下的好处可能会在最坏的情况下变成可怕的缺陷,或者最坏的情况并没有那么糟糕,但最好的情况也没有那么好,它只适用于未排序的数据等。

【讨论】:

    【解决方案3】:

    我建议您不要仅仅记住这些事实。了解它们为何如此。如果我在采访你,我会确保问一些问题,表明你了解如何分析算法,而不仅仅是把你在网页或书中看到的东西吐出来。另外,面试的前一天不是做这个学习的时间。

    祝你好运!!请在评论中报告进展情况!

    【讨论】:

    • 谢谢,死记硬背从来都不是最好的方法,但是当面临最后期限时,我需要优先考虑大脑中的内容。
    【解决方案4】:

    简而言之。

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

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

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

    大多数归并排序变体的最佳、平均和最坏情况都固定为 n*log(n)。它稳定且相对容易扩大规模。但它需要一个相对于总项目大小的二叉树(或其仿真)。主要问题是内存。最好的临时解决方法是 timsort。

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

    【讨论】:

    • 答案并没有解决所发布的核心问题,但它确实提供了对基于现实世界经验的各种排序性能的宝贵见解。
    【解决方案5】:

    您可能还想研究在某些条件存在时可以使用的其他类型的排序。例如,考虑基数排序。 http://en.wikipedia.org/wiki/Radix_sort

    【讨论】:

      【解决方案6】:

      我刚刚在我的大学完成了一组面试......

      每个算法都有它的好处,否则它就不会存在。 因此,最好了解您正在研究的算法有什么好处。哪里做的好?如何改进?

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

      祝你面试顺利。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-17
        • 2017-07-05
        • 1970-01-01
        • 2014-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多