美文网首页Python七号
为什么归并排序分两组进行而不是更多?

为什么归并排序分两组进行而不是更多?

作者: somenzz | 来源:发表于2019-08-26 23:01 被阅读0次

归并排序想必大家都不陌生,我之前在学习算法的时候也分享过,见前文Python-排序-归并排序中如何用哨兵来追求极致的性能?

今天在这里提出一个问题:为什么归并排序分两组进行而不是更多?

我们看到的几乎全部的归并算法都是最经典的两路归并排序算法,时间复杂度是O(NlogN),这里是以 2 为底。为什么大家都分为两组,而不是三组,四组呢? 这里的两组到底有什么好呢?

不妨先用反证法:

如果将数组分解成更多组(假设分成 K 组),就是是 K 路归并排序算法,当然是可以的,比如 K=3 时,是 3 路归并排序,依次类推。通过递归树方法计算等式 T(n)= 3T(n/3)+ O(n) 可以得到 3 路归并排序的时间复杂度为 O(NlogN),其中 logN 以 3 为底。尽管 3 路合并排序与 2 路相比,时间复杂度看起来比较少,但实际上花费的时间会变得更高,因为合并要时要比较多组数据,取最小的一个,导致比较次数会增加。类似的问题还有二分查找比三分查找更受欢迎。

再从正面来解释:

计算机原本就是二进制,处理的字节序列不是 1 就是 0,对应程序中的判断最常用的就是 if else。这种判断是最快的,也是最简单的,简单就意味着不易出错和高效,其实排序中最耗时的就是比较次数,比较的次数少了,效率自然就好。

其实归并排序的核心思想是分而治之,给我们的启示就是:当遇到大的比较难解决的复杂问题时,能否将此问题分解成为小一点的问题,小问题再进行分解更小的问题,直到最小的问题可以通过标准化的工具去处理完成,最逐步汇总小问题的结果,最终解决大问题。

其实我个人认为,管理者的能力就是任务分解和汇总的能力,如果分解不好任务,也汇总不好下面反馈的结果,那么下面的员工也很难做的更好。

以上是个人的一些收获,欢迎留言与我交流。

相关文章

网友评论

    本文标题:为什么归并排序分两组进行而不是更多?

    本文链接:https://www.haomeiwen.com/subject/vuujectx.html