【笔记】
创建一个新二项堆
寻找最小关键字
最小关键字必在根节点中。
合并两个二项堆
反复连接根节点的度数相同的各二项树
第一阶段,将二项堆H1和H2的根表合并为一个链表H,它按度数排序成单调递增次序。
第二阶段,将相等度数的根连接起来,直到每个度数至多有一个根时为止。
情况1,degree[x]!=degree[next-x]。将指针指向下一个位置。
情况2,当x为具有相同度数的三个根中的第一个时发生,把三个相等度数的根中的第二个和第三个联合起来。
情况3和情况4,当x为具有相同度数的两个根中的第一个时发生。
情况3,key[x]<=key[next-x],故将next-x连接到x上。
情况4,next-x具有更小关键字,故x被连接到next-x上。
BINOMIA-HEAP-UNION的运行时间时间为O(lgn),其中n为二项堆H1和H2中总的结点数。
插入一个结点
构造一个只包含一个结点的二项堆H‘,再在O(lgn)时间内,将其与包含n个结点的二项堆H合并。
抽取具有最小关键字的结点
具有最小关键字的根x被从H的根表中去掉。x的各子女分别为B_{k-1},B_{k-2}...B_0树的根。
得到一个包含x树中除x外每个结点的二项堆H’。
合并H与H‘所得的结果二项堆包含原堆中除x的所有结点。
减小关键字的值
使关键字冒泡上升
删除一个关键字