图解败者树、置换-选择排序、最佳归并树

711 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

败者树

败者树是计算机科学学科里的一种数据结构。 ... 败者树是计算机科学学科里的一种数据结构,可用于外部排序中提高效率。

在不使用败者树的情况下,进行k路归并,S趟归并需要的比较次数为 在这里插入图片描述 k路归并的败者树深度为⌈log2k⌉,则最多需要⌈log2k⌉次比较,总的比较次数为 在这里插入图片描述 在这里插入图片描述

置换-选择排序

  1. 首先从初始文件中输入 6 个记录到内存工作区中;
  2. 从内存工作区中选出关键字最小的记录,将其记为 MINIMAX 记录;
  3. 然后将 MINIMAX 记录输出到归并段文件中;
  4. 此时内存工作区中还剩余 5 个记录,若初始文件不为空,则从初始文件中输入下一个记录到内存工作区中;
  5. 从内存工作区中的所有比 MINIMAX 值大的记录中选出值最小的关键字的记录,作为新的 MINIMAX 记录;
  6. 重复过程 3—5,直至在内存工作区中选不出新的 MINIMAX 记录为止,由此就得到了一个初始归并段;
  7. 重复 2—6,直至内存工作为空,由此就可以得到全部的初始归并段。

在这里插入图片描述 工作原理:每次选择工作区中最小的一个放入归并段中,并设置MINIMAX值

在第5行中,为什么选择21,原因是此时的MINIMAX为17 > 10,因此只能选择次小的21,第6、7行同理

当工作区中的数都小于MINIMAX时,则需要使用第二个归并段来输出(第十行),第一个归并段的数据完整了(第九行

这就是置换-选择排序

最佳归并树

最佳归并树就是通过哈夫曼树的思想来构建k路二叉树,得到最短的带权路径长度WPL,也就是系统磁盘I/O次数的最小值,以此来降低开销

  1. 不需要添加虚段 在这里插入图片描述
  2. 需要添加虚段 在这里插入图片描述
  3. 虚段添加规则 在这里插入图片描述