码迷,mamicode.com
首页 > 其他好文 > 详细

启发式合并

时间:2018-04-04 18:09:02      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:image   bcf   baidu   删掉   art   删除   tps   log   移动   

平衡树的启发式合并是每一次把小的树的各个节点插入大的树,然后删除小的树

复杂度是由于:每一个元素进行一次移动时,其所在集合的大小最少扩大到原来的二倍

线段树/01字典树的启发式合并是:https://wenku.baidu.com/view/88f4e134e518964bcf847c95.html

https://blog.csdn.net/zawedx/article/details/51818475

void merge(root1,root2){//合并到root1上
    if 两颗左子树中有空树 直接给root1接上不是空树的左子树
        else merge(root1.leftson,root2.leftson)
    if 两颗右子树中有空树 直接给root1接上不是空树的右子树
        else merge(root1.rightson,root2.rightson)
    删掉root2这个点
}

或者暴力一点:

if(!root1)  return root2;
if(!root2)  return root1;
root1.leftson=merge(root1.leftson,root2.leftson);
root1.rightson=merge(root1.rightson,root2.rightson);
clean(root2);
return root1

证明是:

技术分享图片

或者说:

调用一次合并函数的时间是常数,
而合并函数每调用一次就会删掉一个点,
所以合并的总代价为删掉的点数和

结合节点的产生的复杂度是正确的,可以说明复杂度正确

 

启发式合并

标签:image   bcf   baidu   删掉   art   删除   tps   log   移动   

原文地址:https://www.cnblogs.com/hehe54321/p/8718082.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!