`
iwebcode
  • 浏览: 2010348 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

数据结构-堆

 
阅读更多
最大堆/最小堆

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

   (1)Ki<= k2i且 ki<= k2i-1

  或 (2) Ki>= k2i且 ki>= k2i-1

          (i = 1,2,…[n/2])

当满足(1)时,为最小堆,当满足(2)时,为最大堆。

  若将此序列对应的一维数组堪称是一个完全二叉树,则2i和2i+1个节点分别是节点i的左右子节点。

如下为一个最大堆:

下面以最小堆为例说明堆的输出

  图1为一个最小堆,当最小节点根节点13输出后,将最后一个节点97作为根节点,移到顶端,如图2. 然后要对堆进行调整。比较此完全树的根节点与其两个子节点大小,因为27 < 38 < 97,所以27是三个节点里最小的,将节点27与根节点97交换。此时以97替代27而产生的右子树为一个新的堆,再以97为根节点,对此最小堆进行调整,同理,知道要将97与49交换,得到图3的完全树。此时以97代替49为根节点的右子树为一个新堆,再对此堆做同样的操作,因为此完全树已经是最小堆,所以可以停止操作,堆的调整完毕。此时再将根节点,对的最小值输出,并进行同样的调整,可以得到如图4的新堆。这个过程被称为“筛选”。

同样以最小堆说明堆的初始化

  从一个无序序列初始化为一个堆的过程就是一个反复“筛选”的过程。由完全二叉树的性质可以知,一个有n个节点的完全二叉树的最后一个非叶节点是节点[n/2],堆的初始化过程就从这个[n/2]节点开始。上图为如下无序数组的初始化:

    {49,38,65,97,76,13,27,50}

  首先,未处理的数组对应的堆为图1模样。从第四个节点开始([8/2]=4),因为50< 97,故要交换两节点,交换后还要继续对其新的左子树进行类似输出后那样的筛选。易见其左子树只有节点97,已经为最佳情况,故可以继续堆的初始化,如图2。再考虑第三个节点,因为13 < 27 < 65,即节点13为当前的最小节点,故与节点65交换,并对新的左子树进行筛选,其也为最佳情况,故可继续堆的初始化,结果如图3。然后考虑第二个节点,因为38 < 50 < 76,故已经为最优情况,不用调整。最后再考虑第一个节点,根节点。因为 13 <38 < 49,故需要将根节点49与其右孩子节点13交换,交换后还要继续对其新的右子树进行类似输出后那样的筛选,可见右子树还需要调整,因为 27< 49< 65,故将节点49与节点27交换。此时已经处理完了根节点,初始化结束。最终结果如图5.


分享到:
评论

相关推荐

    特殊的数据结构-堆.pptx

    特殊的数据结构-堆.pptx

    数据结构-堆及其应用PPT

    本资源是博文【数据结构】有关堆你知多少?的配套演示资料,包含堆的结构、堆的调整算法、堆的两种应用的动画演示。可结合以下博文查看:http://t.csdn.cn/ahdIh

    《数据结构-堆排序》

    《数据结构》严蔚敏版 堆排序

    数据结构-堆(Heap)介绍和Java示例代码

    介绍数据结构堆(Heap)的概念、特点、优缺点、适用场景和Java示例代码

    数据结构-优先队列-堆排序

    如题。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    数据结构---堆排序

    比较详细地讲述了堆排序的思路和代码实现,适合初学者

    数据结构-快速和堆排序.ppt

    数据结构-快速和堆排序.ppt该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~

    数据结构从入门到精通-堆排序

    数据结构从入门到精通-堆排序

    基于python的数据结构代码实现-堆Heap

    基于python的数据结构代码实现-堆Heap

    考研-数据结构-殷人昆.zip

    1.1 针对考研数据结构的代码书写规范以及C 与C 语言基础1 1.1.1 考研综合应用题中算法设计部分的代码书写规范1 1.1.2 考研中的C 与C 语言基础3 1.2 算法的时间复杂度与空间复杂度分析基础 12 1.2.1 考研中的算法时间...

    数据结构-3期(KC002) 堆排序算法.docx

    数据结构-3期(KC002) 堆排序算法.docx 学习资料 复习资料 教学资源

    数据结构-利用堆分配方式实现串的操作C语言

    这是我买的一本课程设计案例书上的源代码,上面的案例很经典,特别适合于作 毕业设计的学生使用,当然了,也可以做为做课程设计的学生以参考,希望能给 大家提供帮助!!

    数据结构-从应用到实现 (java版)

    主要内容包括:算法效率的输入规模、阶和大O,数据结构的无序和有序列表,队列和栈基于数组和链表的设计实例,递归详解,二叉查找树和AVL树,堆、散列表和排序以及图论等。对于每一种数据结构的性质和用途,《计算机...

    数据结构-利用堆分配方式实现串的操作

    这是一个利用堆分配方式实现串的基本操作的小程序,用C++ 写的,欢迎修改指正!

    Java语言编写的数据结构-排序

    Java语言编写的数据结构-排序。包括冒泡排序、选择排序、插入排序、希尔排序、快排、堆排序。

    基础算法与数据结构 -- Java 实现.zip

    算法与数据结构它们分别涵盖了以下主要内容: 数据结构(Data Structures): 逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)...

    数据结构--算法相关.zip

    基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,...

    数据结构-算法.zip

    算法与数据结构它们分别涵盖了以下主要内容: 数据结构(Data Structures): 逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)...

    数据结构--排序 很细致

    数据结构(C语言版) 第10章 排序 内 容 10.1 基本概念 10.2 冒泡排序 10.3 选择排序 10.4 插入排序 10.5 希尔排序 10.6 快速排序 10.7 堆排序 10.8 归并排序 10.9 基数排序

    数据结构-排序.doc

    数据结构--内部排序算法 1、下列排序算法中,_____________排序在某趟结束后不一定能选出一个元素放到其最 终的位置上。 (1)选择 (2)冒泡 (3)归并 (4)堆 2、下列排序算法中,依次将待排序列中的元素和前面...

Global site tag (gtag.js) - Google Analytics