软考
APP下载

筛选法建立初始堆图解

在数据结构中,堆是一种特殊的数据结构,用于维护具有优先级的元素的集合。它在许多算法中是必不可少的,例如堆排序和Dijkstra算法。在堆中,元素按照一定的顺序进行排序。初学者学习堆的最大难点之一在于建立初始堆。本文将介绍通过筛选法来建立初始堆的图解方法。

1. 什么是筛选法?

筛选法,也称为下虑法,是一种在堆中维护基础元素关键字的方法,从而避免在进行查找和删除操作时破坏堆的定义。它通过不断地尝试将节点下移到其深度更大的子节点,从而在不破坏堆的定义的情况下对其进行更新。

2. 如何通过筛选法建立初始堆?

如果需要将一个任意数组建立成一个堆,可以利用筛选法。步骤如下:

(1)首先找到堆的最后一个节点,因为它是深度最大的节点。将最后一个节点的父节点作为当前节点;

(2)然后将当前节点的子节点中的关键字最大的节点与当前节点进行比较。如果当前节点的关键字最大,则堆的定义仍然保持不变;否则,与最大节点交换,并且在当前节点上重复步骤2,直到堆的定义保持不变为止;

(3)接下来将当前节点移动到它的父节点,重复步骤2和3,直到堆的最后一个节点。当最后一个节点处理完时,初始堆就建立完成了。

3. 图解筛选法建立初始堆的过程

以下是一个数组的例子,用于展示筛选法建立初始堆的过程。

![heap](https://img-blog.csdn.net/20180611101936435?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JhbmdfYWR5X2dldmluX2dldg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)

初始状态下,我们得到的数组是 { 8, 9, 1, 7, 2, 3, 5, 4, 6, 0 }。 通过筛选法,找到数组的最后一个节点,即节点0,然后按照步骤2开始,递归地下沉处理所有节点。 我们现在来看一下该过程的图解:

![heap2](https://img-blog.csdn.net/20180611103051140?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JhbmdfYWR5X2dldmluX2dldg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)

经过这个过程之后,初始堆的关键字排序就变成了 { 9, 8, 5, 7, 6, 3, 1, 4, 2, 0 } 。 这个过程可以使用树来表示。如果我们将上述过程总结为下图,你可以看到的是,一种已经分层好的二叉树生成的方式。

![heap3](https://img-blog.csdn.net/20180611103714197?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JhbmdfYWR5X2dldmluX2dldg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)

4.

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库