我正在准备明天一场相当重要的面试,但有一件事让我十分困扰:排序算法和BigO效率。
哪个数字是需要了解的?最好的、最坏的还是平均效率?
我正在准备明天一场相当重要的面试,但有一件事让我十分困扰:排序算法和BigO效率。
哪个数字是需要了解的?最好的、最坏的还是平均效率?
最差的情况是最糟糕的,其次是平均情况。还要注意所谓的“隐藏常数”对现实世界的影响 - 例如,经典的快速排序算法在最坏情况下是O(n^2),平均情况下是O(n log n),而归并排序在最坏情况下是O(n log n),但实际上快速排序比归并排序更高效。
当然,了解它们全部都很重要。你必须理解一种排序算法在平均情况下的优点可能会在最坏情况下变得非常糟糕,或者最坏情况并不那么糟糕,但最好情况并不太好,并且仅适用于未排序的数据等。
简而言之。
排序算法的效率会因输入数据和任务而异。
大多数快速排序变体的平均情况也是n*log(n),但它们通常比其他未经过重度优化的算法更快。当它不稳定时,它更快,但稳定的变体只稍微慢一点。主要问题是最坏情况。最好的临时解决方案是Introsort。
大多数归并排序变体的最佳、平均和最坏情况都固定为n*log(n)。它是稳定的,相对容易扩展。但它需要一个二叉树(或其仿真),与总项目的大小相关。主要问题是内存。最好的临时解决方案是timsort。
排序算法也因输入大小而异。我可以说一个新手的观点,在10T大小的数据输入中,没有任何匹配归并排序变体。
我刚刚结束了大学的一轮面试...
每个算法都有其优点,否则就不会存在。因此,最好理解你正在学习的算法的好处。它在哪里表现良好?如何改进它?
我猜当你这样做时,你自然需要阅读各种效率符号。要考虑最坏情况,并注意平均情况,最佳情况很少出现。
祝你面试顺利。