美文网首页
数据结构之堆

数据结构之堆

作者: 点一下我的id | 来源:发表于2018-12-20 14:10 被阅读0次

堆:n个元素的序列{k1,k2,…,kn},当且仅当满足下列关系时,成为堆:

image.png
如果将序列看成一个完全二叉树,非终端结点的值均小于或大于左右子结点的值。
利用树的结构特征来描述堆,所以树只是作为堆的描述工具,堆实际是存放在线形空间中的。
(09,17,65,23,45,78,87,53,31)--------------------(87,78,53,45,65,09,31,17,23)
image.png
层次遍历
最小堆a[]={09,17,65,23,45,78,87,53,31}
最大堆b[]={87,78,53,45,65,09,31,17,23}

Heaps(priority queues)

堆,这个数据结构的诞生主要是因为queue需要priority。

也就是队列里面的数据不遵循队列先进先出的规则而是有特定的优先级要求。这方面的一个应用是,操作系统对进程的处理。有些任务需要较长的时间处理,有些则很短时间就可以处理完,如果都按照进队的顺序处理显然是不合理的。堆这个数据就能很好地实现这些功能。

堆的实现

堆可以用简单的链表(linked list)实现。这样的话,Insert操作的时间复杂度是O(1)(直接插入),DeleteMins的操作就要耗费多一点的时间,为O(N)。当然另外一种实现可以用排好序的链表,这样删除操作的时间复杂度就为O(1),而插入操作要达到O(N)。但是通常情况下,插入操作要更频繁一些。

如果用二叉搜索树就未免有点大才小用了。毕竟,堆只需要插入和删除操作,而二叉搜索树提供了很多其他的操作。另外一个问题是,二叉搜索树的Delete操作会使树越来越不平衡(极端情况下左子树为空,右子树满)不过这样对于二叉搜索树的操作也只是时间复杂度也只是增加常数级的时间。log(2N)- log(N)= 1.

综合上面的考虑,堆的数据结构的实现最为常用的是binary heaps。

Binary Heaps

二叉堆的实现用数组实现。二叉堆需要满足以下两个条件。(当然这些条件这样设置都是有原因的)

structure property 结构原则:

二叉堆是一棵完全二叉树。

heap order property 堆的排序原则:

堆的根元素应该是最小的。而且这个定义对堆中的任意子树都适用。

就这样的堆来说,插入和删除操作都是log(N)的,不过我们知道时间复杂度的考虑都是以最坏的时间来考虑的。平均来说,插入和删除操作都将比log(N)要好。

堆的数据结构的定义:

struct HeapStruct
{
    int Capacity;
    int Size;
    ElementType *Element;
}

相关文章

  • 数据结构之「堆」

    堆 堆 是一种特殊的完全二叉树结构,通常,它有两种类型:最小堆 和 最大堆。 最小堆(min heap)是父节点的...

  • 数据结构之堆

    堆:n个元素的序列{k1,k2,…,kn},当且仅当满足下列关系时,成为堆: Heaps(priority que...

  • 数据结构与算法之美-28讲堆和堆排序

    数据结构与算法之美-28讲堆和堆排序 特别备注 本系列非原创,文章原文摘自极客时间-数据结构算法之美[https:...

  • iOS 数据结构之堆

    堆 一个堆是一个二叉树,是以数组的方式存在,因此他不用父子指针。这个树由于堆的特性是部分有序的,这个特性决定着这些...

  • (八)数据结构之堆

    堆的概念: 堆(英语:Heap)是计算机科学中的一种特别的树状数据结构。若是满足以下特性,即可称为堆:“给定堆中任...

  • 堆结构的实现

    堆的定义: 这里的堆是指一种数据结构(或数据结构属性),非指堆内存。堆属性用二叉树来体现,具有堆属性的数据结构才可...

  • 看图说话数据结构之二项队列(优先队列)——原理解析

    数据结构之二叉堆(优先队列)——原理解析,数据结构之二叉堆(优先队列)——java实现,数据结构之左式堆(优先队列...

  • 栈和堆以及栈区和堆区的区别

    栈和堆以及栈区和堆区的区别 数据结构中的栈和堆 栈:具有先进后出性质的数据结构 堆:一种经过排序的树形数据结构,节...

  • 数据结构中堆、栈和队列的理解

    一、堆 堆是一种经过排序的树形数据结构,每个节点都有一个值,通常我们所说的堆的数据结构是指二叉树。所以堆在数据结构...

  • iOS堆、栈和队列

    堆 堆是一种经过排序的树形数据结构,每个节点都有一个值,通常我们所说的堆的数据结构是指二叉树。所以堆在数据结构中通...

网友评论

      本文标题:数据结构之堆

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