`
flforever1213
  • 浏览: 124780 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

算法 之 堆 - 简介

阅读更多

在许多算法中,需要支持下面两种元素运算的数据结构:插入元素和寻找最大值元素。支持这两种运算的数据结构称为优先队列。

如果使用普通队列,那么寻找最大元素需要搜索整个队列,开销比较大;如果采用排序数组,那么插入运算就需要移动很多元素,开销也会比较大。优先队列的有效实现是使用一种称为堆的简单数据结构。

 

一个(二叉)堆是一个几乎完全的二叉树,它的每个节点都满足堆的特性:如果v和p(v)分别是节点和它的父节点,那么存储在p(v)中的数据键值不小于存储在v中数据项的键值。

 

这样,堆的特性蕴含着:沿着每条从根到叶子的路径,元素的键值以非升序排列。

有n个节点的堆T(一个几乎完全的二叉树),可以由一个数组H[1...n]用下面的方式来表示:

    · T的根节点存储在H[1]中。

    · 假设T的节点x存储在H[j]中,如果它有左子节点,这个子节点存储在H[2j]中;如果他也有右子节点,这个子节点存储在H[2j+1]中。

    · 元素H[j]的父节点如果不是根节点,则存储在H[j/2]中。

 

如果堆中的节点有右子节点,则它一定也有左子节点,这是从几乎完全的二叉树的定义的来的。因此堆可以看作是二叉树,而它实质上是一个数组H[1...n]。它有如下性质:对于任何索引j,≤ ≤ n,key(H[j/2])  key (H[j])。

 

下图是一个分别用树和数组来表示的堆得例子。为了简化这张图,我们把存储在堆中的数据项的键看作是数据项本身。在图中我们注意到,如果树的节点以自顶向下、从左到右的方法,按1到n的顺序编号,那么每一项H[i]在对应的树中表示成为编号为i的节点。在图中,这个编号由树节点旁的标号指明。这样,用这种方法以数组形式给出一个堆,可以很容易构造出它的相应的树,反之亦然。

堆上的运算:

    · Sift-up

    · Sift-down

    · Insert

    · Delete

    · MakeHeap

    · HeapSort

2
0
分享到:
评论

相关推荐

    算法导论 - Thomas

    - **简介**:本部分重点介绍了排序算法和相关数据结构。 - **第六章:堆排序** - **6.1 堆的定义**:阐述了堆的性质及其在堆排序中的作用。 - **6.2 维护堆属性**:描述了如何保持堆的数据结构满足其基本性质。 ...

    数据结构与算法分析-------

    - **章节7:高级排序**(第243页):进一步探讨各种高效的排序算法,如快速排序、堆排序等。 4. **第4部分:树结构** - **章节8:二叉树**(第280页):介绍二叉树的基本概念、性质及遍历方法。 - **章节9:红黑...

    算法 第4版-谢路云译-带完整书签

    2.4.4 堆的算法 199 2.4.5 堆排序 205 2.5 应用 214 2.5.1 将各种數据排序 214 2.5.2 我应该使用啷种排序算法 218 2.5.3 问题的归约 219 2.5.4 排序应用一览 221 第3章查找 227 3.1 符号表 228 ...

    算法 第4版-谢路云 译(Java描述)_13099749-完整版(jb51.net)

    除了算法之外,数据结构也是本书的重点之一,包括但不限于数组、链表、栈、队列、树(二叉树、红黑树等)、堆等。掌握好数据结构能够帮助我们更好地设计和实现算法。 #### 6. 高级算法 此外,《算法 第4版》还涵盖...

    最新某男孩第8期算法+设计模式

    目录: 1.s8算法1-1 算法基础 10.s8算法2-4 链表 哈希表 11.s8算法2-5 算法题 ...5.s8算法1-5 堆排序 6.s8算法1-6 归并排序+希尔排序 7.s8算法2-1 线性时间排序 8.s8算法2-2 数据结构 栈 9.s8算法2-3 队列 迷宫问题

    算法-第4版-完整版

    2.4.4 堆的算法 199 2.4.5 堆排序 205 2.5 应用 214 2.5.1 将各种数据排序 214 2.5.2 我应该使用哪种排序算法 218 2.5.3 问题的归约 219 2.5.4 排序应用一览 221 第3章 查找 227 3.1 符号...

    算法导论-答案(第二版-扫描版)

    堆排序是一种基于二叉堆数据结构的比较排序算法。例如,习题6.1-1至6.1-7讨论了堆排序的基础概念及其实现方式。习题6.2-1至6.2-6进一步介绍了如何维护堆的性质。习题6.3-1至6.3-3则探讨了如何构建初始堆。 ### 第7...

    最短路径算法-三种算法简介.doc

    - 使用二叉堆(Binary Heap)优化数据结构,加快查找速度。 - 从起点和终点同时进行双向搜索,以减少搜索时间。 ### 2. A*算法 #### 2.1 概念 A*算法是一种启发式搜索算法,特别适用于寻找静态环境中两点之间的最短...

    数据结构算法与应用-C++语言描述(6)

    5. **排序与查找算法**:排序算法如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,各有优缺点,适用于不同场景。查找算法包括顺序查找、二分查找、哈希查找等,它们影响着数据检索的效率。 6. **...

    算法导论——教师手册

    - **主题简介**:讲解基于堆的数据结构以及如何利用堆进行排序。 - **关键知识点**: - 堆的定义及其性质 - 构建最大堆的方法 - 堆排序算法的实现 - **应用场景**:适用于需要对大量数据进行排序的情况。 **6. ...

    算法导论(英文第四版)非扫描

    - **1.1 算法简介**:阐述了算法的概念及其重要性。 - **1.2 算法作为技术**:介绍了算法如何作为一种工具和技术应用于各个领域。 - **第二章:入门** - **2.1 插入排序**:通过一个简单的例子介绍了一种基本的...

    ACM算法题100题-经典算法库

    7. **数据结构**:比如树、图、堆、栈等,是实现上述算法的基础。 ### Java/C++ 在算法题中的应用 1. **语言特性**: - **Java**:面向对象编程,有丰富的类库支持,如Collections框架对于集合操作的支持非常友好...

    数据结构与算法(Java版-英文)

    - **第7章:高级排序** - 进一步讨论更高效的排序算法,如快速排序、归并排序和堆排序。 - **第8章:二叉树** - 详细介绍二叉树的定义、性质、遍历方法以及平衡二叉树的概念。 - **第9章:红黑树** - 聚焦于红黑树...

    数据结构与算法分析java版

    - **章节简介**:本章探讨了更高效的排序算法,如快速排序、堆排序等。 - **核心知识点**: - 快速排序的原理及其实现 - 堆排序的步骤与时间复杂度分析 - 归并排序的过程与效率评价 **第8章:二叉树(第280页)*...

    算法导论-Introduction to Algorithms

    - **排序算法**:除了插入排序和堆排序之外,书中还可能涵盖冒泡排序、选择排序、归并排序等多种排序算法,并比较它们之间的优劣。 - **搜索算法**:介绍如何在数据集中查找特定元素的方法,如二分查找等。 - **图...

    编程竞赛实例算法完整版

    根据提供的标题“编程竞赛实例算法完整版”及描述“编程竞赛算法经典入门,算法实例,算法参考”,我们可以归纳总结出以下关键知识点: ### 一、编程竞赛基础 #### 1.1 编程竞赛简介 - **定义**:编程竞赛是一种以...

Global site tag (gtag.js) - Google Analytics