加载中...
败者树是一种用于多路归并的完全二叉树结构,每个内部节点记录两个子节点比较中的败者,树根之上另设节点保存全局胜者。相比胜者树,它在更新时只需沿路径与父节点比较一次,减少了比较次数,常用于外部排序的多路归并阶段。

| 类型 | 选择树/多路归并结构 |
| 核心用途 | 外部排序多路归并 |
| 内部结点 | 保存比较败者 |
| 调整复杂度 | 对数级比较 |
| 相关结构 | 胜者树 |
败者树(Loser Tree)是一种支持高效多路归并的树形选择结构,属于选择树的一种。它把多个有序序列的当前首元素作为叶子,内部节点存放两两比较中失败者的下标,顶端额外一个节点记录当前的全局最小胜者。
在外部排序中,当数据量超过内存容量时,常把数据分成若干有序归并段,再用多路归并合并。若采用简单的线性扫描,每输出一个元素需比较所有归并段的首元素;败者树把这一选择过程组织成树,使每次选出最小元素后重新调整的代价降到对数级,大幅减少比较次数。
败者树最典型的用途是外部排序的多路归并阶段,尤其在归并路数较多时,它比逐路扫描高效得多。数据库系统在处理大规模排序、聚合与连接时,底层归并常借助此类选择树。它也可用于合并多个有序数据流,如日志合并与检索系统中的多路倒排表求交。
问:败者树和胜者树有什么区别?答:胜者树内部结点保存比较的胜者,更新时需与兄弟结点比较;败者树保存败者,更新时只需与路径上的父结点比较,因此实现中调整过程更简洁、比较次数略少。
问:归并路数为 k 时性能如何?答:选出一个最小元素后重新调整的比较次数约为以二为底 k 的对数级,故总体归并所有元素的比较代价与元素数乘以路数对数成正比。

| 类型 | 选择树/多路归并结构 |
| 核心用途 | 外部排序多路归并 |
| 内部结点 | 保存比较败者 |
| 调整复杂度 | 对数级比较 |
| 相关结构 | 胜者树 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧