Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 排序算法的效率_Algorithm_Performance_Theory_Big O - Fatal编程技术网

Algorithm 排序算法的效率

Algorithm 排序算法的效率,algorithm,performance,theory,big-o,Algorithm,Performance,Theory,Big O,我正在为明天一个非常重要的面试做准备,有一件事我遇到了很多麻烦:排序算法和BigO效率 知道什么数字很重要?最佳、最差或平均效率?最差,然后是平均效率。还要注意所谓的“隐藏常量”对现实世界的影响——例如,经典的快速排序算法在最坏的情况下是O(n^2),平均是O(n logn),而在最坏的情况下mergesort是O(n logn),但在实践中,快速排序的性能优于mergesort 当然,所有这些都很重要。你必须了解一种排序算法的好处,在最坏的情况下,一种排序算法可能会出现严重的缺陷,或者最坏的情

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


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

最差,然后是平均效率。还要注意所谓的“隐藏常量”对现实世界的影响——例如,经典的快速排序算法在最坏的情况下是O(n^2),平均是O(n logn),而在最坏的情况下mergesort是O(n logn),但在实践中,快速排序的性能优于mergesort

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

我建议你不要只记住这些factoid。了解他们为何如此。如果我采访你,我会确保问一些问题,表明我知道如何分析一个算法,而不仅仅是能吐出你在网页或书中看到的东西。此外,面试前一天不是进行这项研究的时间

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

简而言之

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

  • 可存档的最大排序速度为n*log(n)
  • 如果数据包含已排序的子数据,则最大速度可能优于n*log(n)
  • 如果数据包含重复项,则可以在近似线性时间内完成排序
  • 大多数排序算法都有自己的用途
大多数快速排序变体的平均大小写也是n*log(n),但thy通常比其他未进行大量优化的算法更快。当它不稳定时速度更快,但稳定的变体只慢一小部分。主要问题是最坏的情况。最好的休闲方式是内向型

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


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

您可能还需要研究在某些情况下可以使用的其他排序类型。例如,考虑基数排序。 我刚刚结束了学院的一系列面试

每种算法都有它的优点,否则它就不存在了。 因此,更好地理解您正在学习的算法的优点是什么。哪里做得好?如何改进

我想当你这样做的时候,你会自动地需要阅读各种效率符号。注意最坏的情况,注意平均情况,最好的情况很少


祝你面试顺利。

Natural Mergesort会让quicksort和quickersort付之东流——cfr、、等等。虽然这是一个很好的答案,但我必须管理我会犹豫是否雇佣一个不懂开发人员这一基本和显而易见的东西的人。DVK,你听起来像是一个象牙塔式的人,那种用最大的努力小心翼翼地保护自己知识领域的人。你们不是来分享你们的知识和你们支持社区的努力吗?你害怕有人在这个领域获得能力,然后接受你的工作吗?亚历克斯:这很好。“我不知道蒂姆索特有多好,”MedicineMan说。你对@DVK的反应有点过于保守。有一些好的公司完全同意DVK——这是粉刷篱笆的东西。我当然希望你明天的面试官不是那么固定:)我不知道问问题来提高你的常识有什么错。特别是在准备面试时,你应该攻击自己最大的弱点,而不考虑你的面子或你看起来有多傻。根据我的经验,那些最害怕看起来像傻瓜的人经历了最少的个人成长。谢谢,记忆从来不是最好的途径,但当面临最后期限时,我需要优先考虑大脑中发生的事情。答案并没有解决张贴的中心问题,但它确实提供了基于真实世界经验的各种排序性能的宝贵见解。