刷题方法:多路归并

Posted MISAYAONE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题方法:多路归并相关的知识,希望对你有一定的参考价值。

理解多路归并和归并的区别,其实也没有区别:

1,2,3,4,5

1,3,5

两个增序数组合并,归并排序,两个指针分别指向两个数组的头结点,对比遍历即可。

但如果是多行数组呢?

1,2,3,5,6

2,3,4,4,5

3,4,4,4,7

1,1,2,4

....

它们的合并显然不能用以上方法来完成。这里就要用到多路归并了。

多路归并的思想:每个排序数组的第一个元素导入堆中,初始化好,当弹出元素属于第 i 个数组的时候,压入第 i 个数组的下一个元素

这里要用到 python 中的最小堆。heapq,记住这三个核心操作即可。

(核心:以数组元素的第一个值大小来组建堆,因此后面的堆中存储的元素为(sum,i,j))

import heapq
a = [1,2,3,2,4,2,5,6]
#初始化最小堆
heapq.heapify(a)
#pop 最小元素
heapq.heappop()
#push 元素
heapq.heappush(a, 2)

例子:

以上是关于刷题方法:多路归并的主要内容,如果未能解决你的问题,请参考以下文章

多路平衡归并和败者树

多路平衡归并和败者树

[M思维] lc264. 丑数 II(多路归并+STL堆)

多路归并

例24:归并排序

磁盘排序算法(多路归并位图)