- 1、本文档共135页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构.ppt
在实现利用败者树进行多路平衡归并算法时, 把败者树的叶结点和非叶结点分开定义。 败者树叶结点key[]有k+1个, key[0]到key[k-1]存放各归并段当前参加归并的记录的排序码,key[k]是辅助工作单元, 在初始建立败者树时使用: 存放一个最小的在各归并段中不可能出现的排序码: -MaxValue。 败者树非叶结点loser[]有k个, 其中loser[1]到loser[k-1]存放各次比较的败者的归并段号, loser[0]中是最后胜者所在归并段号。另外还有一个存放各归并段参加归并记录的数组r[k]。 * 每选出一个当前排序码最小的记录, 就需要在将它送入输出缓冲区之后, 从相应归并段的输入缓冲区中取出下一个参加归并的记录, 替换已经取走的最小记录, 再从叶结点到根结点, 沿某一特定路径进行调整, 将下一个排序码最小记录的归并段号调整到loser[0]中。 段结束标志MaxNum升入loser[0], 排序完成。 * * 利用败者树进行 5 路平衡归并的过程 (1) 初始状态 (2) 加入15, 调整 29 15 5 17 5 05 5 10 -? 5 5 k3 k4 k5 k0 k1 k2 ls1 ls0 ls2 ls3 ls4 10 k2 5 05 ls3 k1 17 5 k0 ls2 4 ls4 15 k4 -? k5 29 k3 5 ls1 5 ls0 * (3)加入29, 调整 (4) 加入10, 调整 29 15 3 17 4 05 5 10 -? 5 5 k3 k4 k5 k0 k1 k2 ls1 ls0 ls2 ls3 ls4 10 k2 2 05 ls3 k1 17 4 k0 ls2 3 ls4 15 k4 -? k5 29 k3 5 ls1 5 ls0 * 29 15 3 17 4 05 2 10 -? 1 5 k3 k4 k5 k0 k1 k2 ls1 ls0 ls2 ls3 ls4 10 k2 2 05 ls3 k1 17 0 k0 ls2 3 ls4 15 k4 -? k5 29 k3 4 ls1 1 ls0 (5) 加入05, 调整 (6) 加入17, 调整 输出05 * (7) 输出05后调整 (8) 输出10后调整 29 15 3 17 0 44 1 10 4 2 k3 k4 k0 k1 k2 ls1 ls0 ls2 ls3 ls4 12 k2 1 44 ls3 k1 17 0 k0 ls2 3 ls4 15 k4 29 k3 4 ls1 2 ls0 输入44 输出12 输出10 输入12 * 29 15 3 17 0 44 2 ? 1 4 k3 k4 k0 k1 k2 ls1 ls0 ls2 ls3 ls4 ? k2 2 44 ls3 k1 17 3 k0 ls2 4 ls4 56 k4 29 k3 1 ls1 0 ls0 输入? 输出17 输出15 输入56 (9) 输出12后调整 (10) 输出15后调整 * 29 56 4 21 3 44 2 ? 1 0 k3 k4 k0 k1 k2 ls1 ls0 ls2 ls3 ls4 ? k2 2 44 ls3 k1 ? 0 k0 ls2 4 ls4 56 k4 29 k3 1 ls1 3 ls0 输入21 输出29 输出21 输入? (11) 输出17后调整 (12) 输出21后调整 * (13) 输出29后调整 (14) 输出32后调整 32 56 4 ? 0 44 2 ? 1 3 k3 k4 k0 k1 k2 ls1 ls0 ls2 ls3 ls4 ? k2 2 44 ls3 k1 ? 0 k0 ls2 3 ls4 56 k4 ? k3 4 ls1 1 ls0 输入32 输出44 输出32 输入? * (15) 输出44后调整 (16) 输出56后调整 ? 56 3 ? 0 ? 2 ? 1 4 k3 k4 k0 k1 k2 ls1 ls0 ls2 ls3 ls4 ? k2 2 ? ls3 k1 ? 0 k0 ls2 3 ls4 ? k4 ? k3 1 ls1 4 ls0 输出?, 结束 输出56 输入? 输入? 归并路数 k 不是越大越好。归并路数 k 增大, 相应需增加输入缓冲区个数。如果可供使用的内存空间不变, 势必要减少每个输入缓冲区的容量, 使内外存交换数据的次数增大。 * 不考的章节 2.5.3 2
文档评论(0)