首页 > 编程知识 正文

如何构建大顶堆,数据结构串的堆分配是如何实现的

时间:2023-05-03 15:17:05 阅读:161034 作者:1602

【一】个人资料的最小堆为完全二叉树,非叶节点的值小于等于左儿童和右儿童的值。 本文图解说明最小堆的构建、插入、删除的过程。 知道了最小的山的相应知识后,最大的山与此相似。 最小堆示例:

【2】操作最小堆构建最小堆:

初始数组为9、3、7、6、5、1、10、2

沿着完全二叉树,依次填写数字。

填写完毕后,请填写从最后一个非叶子结点(本示例为数字6的节点)开始调整。

根据性质,小数字会向上移动; 至此,第一次调整完成。

请注意,对于已调整的节点和子节点,需要递归调整。

第二次调整是将数字6的节点排列的下标小1的节点(比数字6的下标小1的节点是数字7的节点)、

此示例的图示如下所示。

注意:数字9的节点将与数字1的节点互换。 更换后,需要递归调整,请注意。

最小堆的元素插入 【插入到该二叉树的最后一个节点,再调整】以上的最小堆为例,插入数字0。

数字0的节点首先进入该二叉树的最后一个节点,根据最小堆的定义,从底向上递归调整。

插入操作的图示如下所示。

最小堆的节点删除【是把根节点删除,最后一个叶子节点放到根节点上,再调整】对于最小和最大堆,删除操作将发生在根节点上。

对于删除操作,将二叉树的最后一个节点置换为根节点,自上而下递归调整。

以下为图解。

【3】有常见的面试问题。 如何从包含10亿个数字的文档中检索最多10个数字? 计算机的内存只有1米吗?

考虑到10亿个数据很多,无法一次性放入我们的计算存储器

采用常用的排序算法可能也是因为操作不好,数据量大。

这个地方被认为可以用一堆小天花板来解决这个问题。

1、让计算机向io读取文件

2、将读取的数据制作成包含10个要素的小山顶山

3、构建完成后,每次将从文件中读取的一个数字与栈顶元素进行比较,

如果小于堆顶部的元素,请直接丢弃或跳过。 如果读取的数据大于堆上的元素,则为、

那么可以用这个元素代替炉顶元素来调整小炉顶。 所述算法的时间复杂度为o((100亿--1000 ) log )-1000 ),或o )-(n-m ) logM ),且空间复杂度为m

自转: https://blog.csdn.net/wenge 1477/article/details/101797674

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。