败者树:主要应用在外排序中,减少外排序内部排序的比较次数。在双亲节点记下刚进行完的这场比赛的败者,让胜者去参加更高一层的比赛,另外,根节点处加入一个节点来记录整个比赛的的赢者。便可以得到一棵败者树。败者树中的每个分支节点记录了比赛失败者而不是胜利者的索引。创建败者树,我们用数组ls记录参加比赛的选手,ls中元素的值表示当前选手的得分,比如ls{10,9,20,6,12},我们要选出得分最小的参加者为比赛的赢者。我们使用一个数组b记录当前孩子节点失败者的索引。使用b[0]存储最后赢者的索引。当数组b中某个参与者的得分改变时,我们只需要沿着从当前节点到根节点的路径修改败者树,而不必改变其他比赛的结果,重构过程如下:将新进入的节点与其父节点进行比赛,把败者的下标放在父节点中,而赢者再与上一级的父节点进行比较;比赛沿着到根节点的路径不断进行,直到节点b[1]处,把败者的索引放在节点b[1],把赢者的索引放在节点b[0]。如图:#include<iostream> using namespace std; //调整函数 void adjust(int ls[], int b[],int n, int s) { //沿着叶子节点b[s]到根节点ls[0]的路径进行调整。 int t = (n + s) / 2;//当前调整节点的父节点,
败者树
最新推荐文章于 2023-12-01 13:54:50 发布