👋 Hi, I’m @Beast Cheng
👀 I’m interested in photography, hiking, landscape…
🌱 I’m currently learning python, javascript, kotlin…
📫 How to reach me --> 458290771@qq.com
喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑💻
感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏
多路平衡归并带来的问题
外部排序时间开销 = 读写外存的时间 + 内部排序所需时间 + 内部归并所需时间
归并趟数 S = l o g k r S=log_kr S=logkr,归并路数 k 增加,归并趟数 S 见效,读写磁盘总次数减少
使用 k 路平衡归并策略,选出一个最小元素需要对比关键字 k − 1 k-1 k−1 次,导致内部归并所需时间增加
对于这个问题,可以使用 “败者树”进行优化
败者树的构造
可视为一颗完全二叉树(多了一个头)
败者树在多路平衡归并中的应用
- 每个叶子结点对应一个归并段
- 分支结点记录失败败者来自哪个归并段
- 根结点记录冠军来自哪个归并段
对于 k 路归并,第一次构造败者树,需要对比关键字 k − 1 k-1 k−1 次
有了败者树,选出最小元素,只需要对比关键字 l o g 2 k log_2k log2k 次