族谱网 头条 人物百科

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:647
转发:0
评论:0
逻辑定义n个元素序列{k1,k2...ki...kn},当且仅当满足下列关系时称之为堆:(ki=k2i+1),(i=1,2,3,4...n/2)性质堆的实现通过构造二叉堆(binaryheap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。支持的基本操作某些堆实现还支持其他的一些操作,如斐波那契堆支持检查一个堆中是否存在某个元素。例程为将元素X插入堆中,找到空闲位置,创建一个空穴,若满足堆序性(英文:heaporder),则插入完成;否则将父节点元素装入空穴,删除该父节...

逻辑定义

n个元素序列{k 1 ,k 2 ...k i ...k n },当且仅当满足下列关系时称之为堆: (k i <= k 2i ,k i = k 2i ,k i >= k 2i+1 ), (i = 1,2,3,4...n/2)

性质

堆的实现通过构造 二叉堆 (binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。

任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上( 堆序性 )。

堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。

将根节点最大的堆叫做 最大堆 或 大根堆 ,根节点最小的堆叫做 最小堆 或 小根堆 。常见的堆有二叉堆、斐波那契堆等。

支持的基本操作

某些堆实现还支持其他的一些操作,如斐波那契堆支持检查一个堆中是否存在某个元素。

例程

为将元素X插入堆中,找到空闲位置,创建一个空穴,若满足 堆序性 (英文: heap order ),则插入完成;否则将父节点元素装入空穴,删除该父节点元素,完成空穴上移。直至满足堆序性。这种策略叫做 上滤 (percolate up)。

voidInsert(ElementTypeX,PriorityQueueH){inti;if(IsFull(H)){printf("Queue is full.\n");return;}for(i=++H->Size;H->Element[i/2]>X;i/=2)H->Elements[i]=H->Elements[i/2];H->Elements[i]=X;}

以上是插入到一个二叉堆的过程。

DeleteMin ,删除最小元,即二叉树的根或父节点。删除该节点元素后,队列最后一个元素必须移动到堆得某个位置,使得堆仍然满足堆序性质。这种向下替换元素的过程叫作 下滤 。

ElementTypeDeleteMin(PriorityQueueH){inti,Child;ElementTypeMinElement,LastElement;if(IsEmpty(H)){printf("Queue is empty.\n");returnH->Elements[0];}MinElement=H->Elements[1];LastElement=H->Elements[H->Size--];for(i=1;i*2Size;i=Child){/* Find smaller child. */Child=i*2;if(Child!=H->Size&&H->Elements[Child+1]Elements[Child])Child++;/* Percolate one level. */if(LastElement>H->Elements[Child])H->Elements[i]=H->Elements[Child];elsebreak;}H->Elements[i]=LastElement;returnMinElement;}

应用

堆排序

堆(通常是二叉堆)常用于排序。这种算法称作堆排序。

事件模拟

主要运用堆的排序以选择优先。

参见

二叉堆

二项式堆

最大-最小堆

斐波纳契堆

数据结构


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 快堆
引言基本的裂变概念为了维持链式裂变反应,在裂变中释放的中子必需要与燃料中的其他原子反应,这一反应发生的几率依赖于中子的能量。大多数原子只会与高能中子发生诱发裂变,然而也有一小部分原子更喜欢低能量的中子。天然铀主要包括三种同位素:U-238,U-235,和微量的U-234(U-238的一种衰变产物)。U-238大约占天然铀总量的99.3%,并且只与5MeV或更高能量的中子发生裂变反应,这种中子也就是所谓的快中子。天然铀中大约有0.7%是U-235,它可以与任意能量的中子发生裂变反应,但更容易与低能量的中子发生反应。这两种同位素发生裂变反应时,它们都会释放能量大约在1到2MeV的中子。对U-238来说,这一能量太低不足以引发后续的裂变反应;对U-235来说,这一能量太高又使得不太容易发生裂变反应。这一问题的通常的解决方案是使用一种中子慢化剂,将中子从高能量慢化下来。中子慢化剂是一种能与中子反应...
· 煎堆
起源煎堆的起源可追溯至唐朝,煎堆(当时叫碌堆)是长安宫廷的食品,初唐诗人王梵志有诗云:“贪他油煎䭔,爱若菠萝蜜。”后来不少中原人南迁,就把煎堆带到南方,成为广东著名的油器之一。种类龙江煎堆九江煎堆西樵煎堆参见牛脷酥油条煎堆的传说他乡遇故知吹气的煎堆海南小吃-煎堆
· 堆填
选址选址有以下要点:远离民居附近没有过高的山,以免令填埋工作困难石质坚实;若填埋近于海,则应做好防止海水的渗入水陆交通方便有防污水渗出(英语:Leachate)的功能部分国家经完善规划不致影响民居;但在贫穷国家,由于资金不足,往往将垃圾随便弃置。管理有机物若没有妥善处理,将自然分解,会释出填埋沼气(英语:Landfillgas)与垃圾渗出水(英语:Leachate)。渗出水:要有污水收集管,铺放防渗层垫层(英语:Landfillliner),兴建化油污池。沼气:可能引致气爆(英语:Gasexplosion)、火灾(例如美国每年有约8300宗火灾因此而起)亦有地方善用沼气发电(英语:Landfillgasutilization)。垃圾堆填场区实作印尼一处垃圾堆填区和邻近的贫民区南非一座垃圾山和拾荒者捷克一座绿化后的垃圾山目前被认同的垃圾堆填场区是以密封式设计,一般会以多层功能密封底和面。其配...
· 堆栈
操作堆叠数据结构使用两种基本操作:推入(push)和弹出(pop):推入:将数据放入堆叠的顶端(阵列形式或串列形式),堆叠顶端top指标加一。弹出:将顶端数据资料输出(回传),堆叠顶端资料减一。特点栈的基本特点:先入后出,后入先出。除头尾节点之外,每个元素有一个前驱,一个后继。抽象定义以下是堆栈的VDM(ViennaDevelopmentMethod(英语:ViennaDevelopmentMethod)):函数签名:此处的N代表某个元素(如自然数),而U表示集合求交。语义:软件堆栈阵列堆叠堆栈可以用链表和数组两种方式实现,一般为一个堆栈预先分配一个大小固定且较合适的空间并非难事,所以较流行的做法是Stack结构下含一个数组。如果空间实在紧张,也可用链表实现,且去掉表头。这里的例程是以数组实现的。#include#include#include#definestackstructStack...
· 伏打电堆
参见电化学电池贾凡尼电池

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信