😝 多路平衡归并与败者树

k路平衡归并

什么是k路平衡归并:

1、最多只能有k个段归并为一个

2、每趟归并中,若有m个归并段参与归并,则经过这一趟处理后得到m/k向上取整个新的归并段

败者树

当路多的时候会带来什么问题,因为每次需要选择n路中最小的或者最大的,则每次选择都需要n-1次比较,这不是一个较小的开销

败者树–可视为一棵完全二叉树(多了一个头头)。k个叶节点分别是当前参加比较的元素,非叶子结点用来记忆左右子树的“失败者”,而让胜者往上继续进行比较,一直到根结点。

当把最强的拿走后,来一个新的则替换叶子节点,向上让他打比赛打赢就像上爬。

在败者树节点中记录来自哪一个归并段即可,叶子节点是虚拟的,叶子节点并不存储值。

“失败树”是一个完全二叉树。