构建堆的时间复杂度2025年3月17日 | 阅读 3 分钟 使用 heapify 操作构建堆的时间复杂度取决于我们使用的方法;让我们了解一下我们有哪些方法。 构建堆有两种标准方法 朴素方法(插入) 在此方法中,我们必须单独将每个元素插入到堆中。 从一个空堆开始,我们逐个插入元素。 由于您插入了 n 个元素,使用此方法构建堆的总时间复杂度为 O(n log n)。 Floyd 算法(Heapify) Floyd 算法是构建堆的一种更有效的方法。 它以自底向上的方式工作,从最后一个非叶节点开始并对每个节点进行堆化。 堆化单个节点的时间复杂度为 O(log n),其中 n 是堆中的元素数量。 由于堆中存在 n/2 个非叶节点,使用 Floyd 算法构建堆的总时间复杂度为 O(n)。 在实践中,Floyd 算法因其更好的时间复杂度而成为构建堆的首选方法,使其比朴素插入方法更有效。Floyd 算法的 O(n) 项涉及的常数因子通常小于插入方法的 O(n log n) 项涉及的常数因子。 让我们来实现这两种方法的代码。 让我们来实现朴素方法的代码。 代码 输出 ![]() 说明 heapify 函数 接受一个堆和一个索引作为参数。将给定索引处的元素向上移动,直到满足堆属性。 buildHeapInsertion 函数 它从第二个元素开始遍历数组。对每个元素调用 heapify,有效地将其插入堆中。 main 函数 它使用值初始化一个数组。调用 buildHeapInsertion 使用插入方法构建堆。打印生成的堆。 时间复杂度 提供的使用插入方法的堆构建的时间复杂度为 O(n log n),其中 n 是数组中的元素数量。 另一种方法:Heapify 输出 ![]() 说明 heapify 函数 接受一个堆、堆的大小 (n) 和一个索引作为参数。 将给定索引处的元素与其左子节点和右子节点进行比较,并在需要时与较大的子节点交换。 递归地调用 heapify 对被交换的子节点索引。 buildHeapFloyd 函数:从最后一个非叶节点迭代到堆的根节点。 对每个节点调用 heapify,有效地将数组转换为堆。 main 函数 使用值初始化一个数组。 调用 buildHeapFloyd 使用 Floyd 算法构建堆。打印生成的堆。 时间复杂度 提供的使用 Floyd 算法(也称为 heapify 或自底向上堆构建)的堆构建的时间复杂度为 O(n),其中 n 是数组中的元素数量。 两种方法最终都会得到一个有效的堆。第一种方法(朴素插入)逐个将元素插入堆中,而第二种方法(Floyd 算法)使用自底向上的方法高效地构建堆。 下一主题构建线性类型后缀 |
在本主题中,我们将学习如何从链表中移除循环。到目前为止,我们已经学会了如何使用 Floyd 算法检测循环和循环的起始点。Floyd 算法也将用于从链表中移除循环……
阅读 4 分钟
简介:给定一个非负整数数组,其中每个元素代表一个数字。您的任务是找到数组中的一对数字,使其和最大,并且这两个数字共享相同的最大数字。编写一个函数 maxSumWithEqualMaxDigits(nums),该函数接受……
阅读9分钟
导言:软件工程的基本组成部分,信息结构有效地协调和存储信息,以促进熟练的修改和恢复。它们是创建计算和解决各个领域中具有挑战性问题的关键组成部分。通常,信息结构规定了数据的组织、保存和...
阅读 17 分钟
引言:矩阵操作和置换领域在从计算机科学到计算生物学等各种领域都起着重要作用。在数据结构中发现矩阵中修改过的行是一项有趣的尝试,它揭示了嵌入在数据结构中的复杂模式和关系。在此...
7 分钟阅读
引言 本文将解释比特数组,探讨如何识别它们,并提出一个用于在 C 中查找比特性的算法。一种称为比特数组的特定序列显示出一种特殊的元素模式,其特征是先增加然后减少(或反之)。确定是否...
阅读 4 分钟
在二叉搜索树中,最小值和最大值概念在查找树中可能不存在的元素方面起着至关重要的作用。二叉搜索树中给定值的最小值是指小于...
阅读 6 分钟
二叉树的左视图是各层最左边节点的集合。示例:输入:输出:4 5 3 6 方法 1:迭代实现 在迭代版本中执行树的层序遍历。我们可以通过更改层序遍历来保留当前层的节点。打印...
5 分钟阅读
问题陈述:给定两个具有 x1 和 x2 个不同节点的 BST,并要求找到两个节点的哪些值的和恰好等于 x BST 1:3 / \ 1 4 / \ 0...
阅读 23 分钟
提供了两个数组,arr1[0..m-1] 和 arr2[0..n-1]。确定 arr2[] 是否是 arr1[] 的子集。两个数组没有任何顺序。可以假设两个数组中的每个元素都是唯一的。示例 1 arr1[] = {11, 1, 13, 21, 3, 7},……
阅读 10 分钟
引言 创建世界上最复杂、最受欢迎的棋盘游戏之一的实体或数字版本,是设计国际象棋游戏的具有挑战性但有益的努力。国际象棋是一款两人策略游戏,需要精心准备、敏锐的观察……
阅读 12 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India