美文网首页
数据结构与算法分析C语言描述 总结笔记 第六章

数据结构与算法分析C语言描述 总结笔记 第六章

作者: jacktown | 来源:发表于2017-06-10 00:07 被阅读0次

    第六章 优先队列(堆)

    1. 基本概念

    一种特殊的队列,至少支持两种操作:Insert和DeleteMin;前者插入元素,相当于队列的enqueue,后者查找、删除、返回最小的元素,相当于队列的dequeue。

    2. 二叉堆

    概念

    具有结构性质和堆序性质的二叉树(或者说具有堆序性质的完全二叉树)

    性质

    • 结构性质:完全二叉树
    • 堆序性质:父节点小于任意子节点

    实现方法

    数组即可, 鉴于其完全二叉树的性质,乘以2可以到达左子节点,除以2可以到达父节点。

    操作及其时间复杂度:(后面四种操作需要节点位置信息为基础)

    • Insert: 采用上滤,最坏为O(logN),平均只要比较2.607次,上移1.607层,O(1)
    • DeleteMin: 采用下滤,最坏为O(logN),平均为O(logN)
    • DecreaseKey:
    • IncreaseKey:
    • Delete:
    • BuildHeap: 空堆N个Insert操作来完成,总运行时间O(N)

    3. d堆

    • 类似二叉堆,只是节点的儿子数都是d个(除了最底层的一些节点)。
    • 有证据显示,4堆在实践中可以胜过二叉堆。

    4.左式堆

    概念

    具有堆序性质和和零路径长相关的结构性质的二叉树。

    性质

    • 堆序性质:父节点小于任意子节点;
    • 结构性质:左儿子节点的零路径长不小于右儿子节点的零路径长。(=>N个节点的左式堆右路径上节点不超过[log(N+1)])

    实现方法

    采用二叉树的实现方法,每个节点增加零路径长域。

    操作及其实践复杂度

    • Merge:从由路径节点入手,O(logN)
    • Insert:合并一个节点左式堆,O(logN)
    • DeleteMin:O(logN)

    5. 斜堆

    概念

    具有堆序的二叉树,但不具有结构性质;其基本操作Merge和左氏堆一致,但是右路径上的节点左右儿子的交换是无条件的(除了右路径上最大节点不交换其左右儿子)

    操作

    • Merge:任意单次操作最坏时间O(N),摊还时间O(logN)
    • ...

    6. 二项队列(binomial queue)

    概念

    具有堆序的二项树的集合(森林)。

    操作

    • Merge: O(logN)
    • Insert:O(logN);从空堆连续N次插入总最坏时间O(N)
    • Delete:O(logN)

    相关文章

      网友评论

          本文标题:数据结构与算法分析C语言描述 总结笔记 第六章

          本文链接:https://www.haomeiwen.com/subject/zhnfqxtx.html