左倾堆的C语言实现

Date 2016-09-24(星期六) 13:47 By Ming In 算法 Tags 算法,

左倾堆(leftist tree 或 leftist heap)又称为左式堆,左偏树,左偏堆,最左堆等。左倾堆是优先队列的一种实现方式,当优先队列需要解决“两个优先队列合并”的问题时,二叉堆的效率就比较差了,这时左倾堆等方式可以很好的解决这类问题。左倾堆合并时间复杂度为O(lgn)。左倾堆在统计问题,最值问题 ...

阅读全文 »


D堆的C语言实现

Date 2016-09-23(星期五) 19:13 By Ming In 算法 Tags 算法,

D堆是二叉堆的简单推广,跟二叉堆的区别是所有的节点都有d个儿子,代码也跟二叉堆的相似。下图表示一个D=3的最小D堆。

图

D堆插入操作的时间改进为O(log(d,N)),然面删除操作要花费较大时间,一般需要O(d*log(d,N))。如果D不是2的幂,也不能通过二进制移位来实现乘法和除法,这样也大大增加运行时间。 大部分时候总是使用二叉堆,但D堆也在一些情况下使用 ...

阅读全文 »


二叉堆的C语言实现

Date 2016-07-04(星期一) 23:13 By Ming In 算法 Tags 算法,

堆是一颗完全树,同时满足每个节点均大于或小于它的子节点,这样的数据结构被称为最大堆或者最小堆。 这种结构处于一种半排序状态,它的存取效率从整体上讲介于有序和无序之间。当对象处于动态时,是种非常有优势的数据结构。存取的时间复杂为log(a,n),其中a为完全树的度。

通常二叉堆以数组存储,层为 log(2,n),可以使用以下的代码来定义二叉堆结构。

typedef struct binary_heap_s ...

阅读全文 »