当前课程知识点:数据结构(Data Structures) >  3. Tree >  3.7 Introduction of Heap >  Video

返回《数据结构(Data Structures)》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《数据结构(Data Structures)》慕课在线视频列表

Video课程教案、知识点、字幕

各位同学大家好

接下来我们将学习到二叉树的

另外一个特殊应用 堆

我们先来看一下堆的定义

所谓的堆指的是一种具有下面的堆性质的

所谓的堆性质

指的是树上的每个结点它的取值

和它的孩子结点之间存在某些特殊的关系

其中一种堆的性质是指

树里面的每个结点

它的值都要小于或者等于

它的所有孩子的取值

具有这样性质的完全二叉树

我们把它称为叫小顶堆 Min-heap

顾名思义就是在上面的元素

是比较小的元素

根据这幅图中

给出的是一个小顶堆的例子

很显然 在树根位置里面

我们存放的是整个堆中最小的元素

另外一种堆的性质是指

每一个结点它的值要大于或者等于

它的孩子的取值

那么具有这个性质的完全二叉树

我们称为叫大顶堆

在右面这个图中所展示的

是一个大顶堆的例子

在这里面比较大的元素

是处于离树根比较近的位置

其中树根结点它的值是最大的

基于堆的结构

我们可以比较容易获得一组元素的最值

比如在这个图中它是一个大顶堆

那么最大值就是处于堆顶的位置 96

而当我们把这个堆顶的元素拿掉的时候

如果我们有办法可以很高效地

把剩下的元素重新调整成为一个大顶堆

那么我们又可以轻易地获得

剩下元素里面的最大值83

这个过程可以持续不断地做下去

我们就可以比较高效地

去获得在整个堆中最大的K个数据元素

同样的对小顶堆

我们也可以很高效地去获得

最小的K个元素

下面我们来看一下堆的实现

堆是一种完全二叉树

所以我们可以采用数组来去实现它

我们可以把堆里面的元素

从上到下 从左往右

依次地存储在数组中

而堆中的元素之间的关系

可以通过一组数学公式来进行计算

给定任何一个结点

我们都可以很容易地去找到它的父亲

以及它的孩子

下面我们来看一下具体的类实现

我们这里定义了一个maxHeap类

因为我们是基于数组去实现它的

所以在类里面有一个核心的数据成员

就是一个数组Heap

除了Heap之外

我们还定义了两个辅助的属性

一个是数组的大小size

以及在堆里面的数据元素的个数n

通过这些简单的属性成员

我们就可以去刻画一个堆的基本存储方式

另外为了去实现堆中的结点之间的关系

我们可以实现下面的一组基本操作

首先是左孩子关系操作 leftchild

这个函数的输入参数

是某个结点它的数组下标pos

我们知道对于一个

存放在pos位置上的结点来说

它的左孩子是存放在2×pos+1这个位置

因此leftchild这个函数

我们就返回2×pos+1

另外相似的右孩子关系操作

它会返回2×pos+2

这里我们还看到parent函数

它返回的是某个结点的父亲的位置

根据公式我们可以算出来

父亲所在的位置是(post-1)/2

最后我们可以定义一个isLeaf函数

用来去判断给定的一个结点

它是否是Yes结点

我们知道对于存放在pos位置的结点来说

它的左孩子如果存在的话

它应该存放在2×pos+1这个位置

那么我们也知道

叶子它是没有孩子的

因此它的2×pos+1这个位置

应该不属于0到n的这个合理的范围

所以我们会得到

2×pos+1>=n

那么我们通过一个不等式的变换会得到

pos>=n/2

所以我们要判断一个结点

它是否是叶子结点

我们只需要去判断它的pos

是不是大于等于n/2

另外这个pos

还要必须符合一个合理的下标取值范围

所以同时它要满足pos

现在我们已经学习了一些堆的存储结构

以及基本操作

在后面的章节中

我们将进一步地学习到

关于堆的更多操作

好的 我们这节课就学习到这里

下节课我们再见

数据结构(Data Structures)课程列表:

1. Introduction

-1. Introduction--1.1 Introduction of Data

-1.1 Introduction of Data Structure

--Introduction of Data Structure

-1.2 Data Structure and A

-1.2 Data Structure and Algorithm

--Video

-1.3 Asymptotic Analysis

-1.3 Asymptotic Analysis

--Video

-1.4 Simplifying Rules of

-1.4 Simplifying Rules of Asymptotic Analysis

--Video

2. List

-2.1 Introduction of List

-2.1 Introduction of List

--Video

-2.2 Array based List

-2.2 Array based List

--Video

-2.3 Insertion Operation on Array

-2.3 Insertion Operation on Array based List

--Video

-2.4 Remove Operation on Array based List

-2.4 Remove Operation on Array based List

--Video

-2.5 Linked list

-2.5 Linked list

--Video

-2.6 Insertion Operation on Linked list

-2.6 Insertion Operation on Linked list

--Video

-2.7 Remove Operation on Linked list

-2.7 Remove Operation on Linked list

--Video

-2.8 SetPos Operation on Linked list

-2.8 SetPos Operation on Linked list

--Video

-2.9 Stack

-2.9 Stack

--Video

-2.10 Application of Stack

--Video

-2.11 Queue

-2.11 Queue

--Video

3. Tree

-3.1 Definition of Binary Tree

-3.1 Definition of Binary Tree

--Video

-3.2 Implementation of Binary Tree

-3.2 Implementation of Binary Tree

--Video

-3.3Traversal

-3.3 Traversal

--Video

-3.4 Binary Search Tree

-3.4 Binary Search Tree

--Video

-3.5 Search on BST

-3.5 Search on BST

--Video

-3.6 Insertion on BST

-3.6 Insertion on BST

--Video

-3.7 Introduction of Heap

-3.7 Introduction of Heap

--Video

-3.8 Construction of Heap

-3.8 Construction of Heap

--Video

-3.9 Operations on Heap

--Video

-3.10 General Tree

--Video

4. Search

-4.1 Definition of Searching

--Video

-4.2 Searching of Sorted Array

-4.2 Searching of Sorted Array

--Video

-4.3 Definition of Hash Table

--Video

-4.4 Collision in Hash Table

-4.4 Collision in Hash Table

--Video

-4.5 Extension of Linear Probing

--Video

-4.6 Insertion Operation of Hash Table

--Video

-4.7 Search Operation of Hash Table

-4.7 Search Operation of Hash Table

--Video

5. Index

-5.1 Introduction of Index

--Video

-5.2 Linear Index

-5.2 Linear Index

--Video

-5.3 2-3 tree index

-5.3 2-3 tree index

--Video

-5.4 Implementation of 2-3 tree

-5.4 Implementation of 2-3 tree

--Video

-5.5 B-Tree

-5.5 B-Tree

--Video

-5.6 Insertion Operation on B+ Tree

--Video

-5.7 Deletion Operation on B+ Tree

--Video

6. Graph

-6.1 Definition of Graph

--Video

-6.2 Implementation of Graph

--Video

-6.3 Adjacency Matrix

--Video

-6.4 Adjacency List

--Video

-6.5 Graph Traversal - DFS

--Video

-6.6 Graph Traversal - BFS

--Video

-6.7 Topological Sort

--Video

-6.8 Shortest Path Problem

--Video

-6.9 Single Source Shortest Path

--Video

-6.10 Dijkstra Algorithm

--Video

7. Sorting

-7.1 Sorting Problem

--Video

-7.2 Insertion Sort

--Video

-7.3 Selection Sort

--Video

-7.4 Bubble Sort

--Video

-7.5 Shell Sort

--Video

-7.6 Quick Sort

--Video

-7.7 Heap Sort

--Video

-7.8 Comparison

--Video

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。