Binomial Heap

        花一下午写的一个二项堆的C++实现,思想源自Robert Sedgewick 的 Algorithms in C。

 

        首先说下性能。复杂度没什么好说的,merge, push, pop, top, size, empty 都是O(lgn),下面讲一下本机测试的数据。

 

        (host) Pent. dual-core t3200, 2G hz, 2G ram, (OS) linux 2.6.32,(compiler) gcc 4.5.2

 

        输入 0~n-1的自然数,n = 100000000,一亿

 

        n次push很快,7秒,因为是链式树的实现,甚至比std::priority_queue还要快,后者10秒,但是pop就太不堪了,为标准库的2倍多,

 

        n次push后的析构,花 4秒,唉,都超过push的一半了,std::priority_queue是随机访问序列的适配器,其析构自然是瞬杀了。

 

        这样比起来,其实也很一般。

 

        好吧,我知道不能这么比,二项堆就是二项堆,全O(lgn)操作的数据结构,最主要的是merge。

 

       不得不说, Mr. Sedgewick 的算法解说非常棒,但是其代码,真的太那个了。下面贴出代码,以私有方法insert为主体,模仿二进制加法进行合并式插入。

 

       (PS. 按 Mr. Sedgewick描述的,以简单的二的幂堆的集合为基础进行实现。翻了下算法导论,里面的图解很晕人,没仔细研究,也不知用的什么方法)

 

       

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值