Binomial Queue

前面堆排序已经描述了二叉堆的基本操作,插入(O(logn))、删除(O(logn))和查询最大最小值(O(1)),但是两个二叉堆合并时却很不方便,一个一个调用插入方法完成合并需要O(n)。

[b]Binomial Queue[/b](二项队列):一个链表数组,每个元素指向一棵二项树,数组元素按二项树大小顺序排列。

[b]Binomial Tree(二项树) 是什么 图解[/b]
[img]http://dl.iteye.com/upload/picture/pic/89888/a0cfac4a-be6b-33b6-a720-9e39c8f2f7cf.bmp[/img]

[b]合并两个二项队列 图解[/b]
[img]http://dl.iteye.com/upload/picture/pic/89890/3b4fa5a8-29f4-32a8-88fc-9d42fd9a6489.bmp[/img]

二项队列的插入:就是与一个单节点的堆合并。
查询最大最小:遍历链表数组一遍。
删除最小:将被删除节点的子树变为一个新的二项队列,再与原二项队列合并。

数据结构表示
typedef int ElementType;
typedef struct BinNode *Position;

struct BinNode
{
ElementType Element;
Position LeftChild;
Position NextSibling;// not LightChild
};

typedef struct BinNode *BinTree;

struct Collection
{
int CurrentSize;
BinTree TheTrees[MaxTrees];
};

typedef struct Collection *BinQueue;

来自《数据结构与算法分析》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值