algs4
目前已经把 algs4
中的优先队列这一节阅读完毕。我改变以前的看法,以前我认为通过 algs4
这本书我是一个算法都学不会,真要学算法还是得看算法导论,这是一年前在看
KMP
算法时的想法,更早之前阅读前几章时我也是这么想的,之前不管是哪一个时段,我都没有把书中的源码给跑起来,加上那个
KMP
算法它讲得确实有点地方有问题,现在我明白了,可能作者的水平真的是很高,所有很多东西他的脑袋里面是清清楚楚的,但是他水平太高了,所以写出来的时候不免思维有些跳跃,这对于我们想要去钻每一个牛角尖的读者来说就有些难搞了。
好在这个优先队列的部分写得很好,加上我的编程经验的提升,像编译源码之类的问题,是不可能绊住在这个地方的,因此,可以亲手运行得出正确的结果,这也增大了我学习这个算法的欲望。
至于其他的算法,用到的时候再来看一看,到时再作评价。
现在来看,这个代码的质量确实是经过千锤百炼的。很结实。
用例
注意,我们最好把 alg4
包中的所有代码全部编译出来,然后再执行程序。
然后,在 powershell 中测试用例:
初级实现
随书代码给了一个优先队列的有序数组实现,这里来测试一下。
无序数组实现:
基于堆的优先队列
使用优先队列的多项归并
这里需要重点理解一下,我复习这个优先队列的目的其实就是在做 LeetCode
的第 22
题时,那个题目需要用到这个数据结构,然后,这里的多项归并所用到的思想和解那一道题的思路是一模一样的。
这个程序的作用,用这里的
m1.txt
、m2.txt
、m3.txt
来辅助说明,就是每一次把每一个文件中的最左边的数据取出来,然后从中挑出最小的数据。之后再重复这个过程。最终输出的结果是所有文件中的所有数据得到有序的排列。
堆排序