如何在 C++ 中实现最小堆2024 年 8 月 28 日 | 3 分钟阅读 当我们需要一种数据结构来处理**插入、删除**和**查找**最小元素,并且时间复杂度为 **O(Logn)** 时,最小堆就派上用场了。在本文中,我们将探讨如何在 C++ 中实现最小堆。一个完整的二叉树,可以是最小堆或最大堆,被称为**二叉堆**。**最大二叉堆**的根键必须是堆中所有其他键中最大的。对于**二叉树**中的每个节点,此属性都需要递归地成立。最小堆与**最小二叉堆**类似。 最小堆算法对于 min_heap()示例我们以一个例子来说明如何在 C++ 中实现**最小堆** 输出 Enter the number of elements in the array: 10 Enter 10 elements: 25 10 30 5 15 40 20 35 45 50 Min Heap: 5 10 20 25 15 40 30 35 45 50 最小堆的 C++ 表示最小堆存储在一个数组中。根元素是 **Arr[0]**。 对于索引为 i 的节点 重要的 MinHeap 方法insert() 新元素**插入**到堆数组的末尾。之后,通过将其当前元素与其父元素交换来恢复堆属性,直到父元素的值超过当前值。将元素插入**最小堆**需要 **O(Logn)** 的时间。 getMin() 它提供根元素(最小元素)的值。**MinHeap** 中的 **getMin** 的时间复杂度为 **O(1)**。 extractMin() 此过程删除并返回**最小堆**的根元素。在将堆的最后一个元素与根元素交换之后,**最小堆**将执行**堆化**过程。**ExtractMin()** 的时间复杂度为 **O(Logn)**。 decreaseKey() 使用此技术时,**索引 i** 处的键值会减小。此方法的时间复杂度为 **O(Logn)**。 delete() 此过程用于删除**索引 i** 处的键。**最小堆**的删除操作的时间复杂度为 **O(Logn)**。 二叉堆的特点以下是二叉堆的特点 它是一个完全二叉树。换句话说,所有层都完全填满。即使最后一层可能没有完全完成,其所有组成部分都在**左侧**。这个特性使得二叉堆可以存储在**一维数组**中。 二叉堆有两种类型:**最小堆**和**最大堆**。在**最小/最大堆**中,根元素的值是最小的或最大的。 结论本文介绍了最小堆的 C++ 实现。还探讨了最小堆的一些最关键的技术。 |
我们可以使用循环和算术运算符在 C++ 中反转数字。在此程序中,我们从用户那里获取数字作为输入并反转该数字。让我们看一个反转给定数字的简单 C++ 示例。示例 #include <iostream> using namespace std; int main() { int n, reverse=0, rem;...
阅读1分钟
设计模式是在软件设计中反复出现的问题的成熟解决方案,由经验丰富的软件工程师开发。它们提供了一种标准化和改进软件系统设计的方法,使其更易于维护、修改和扩展。在 C++ 中,有许多不同的……
阅读 6 分钟
在处理 C 和 C++ 程序时,有效的处理数据类型至关重要。将字符串转换为双精度浮点值是一个经常遇到的场景,可以使用 strtod() 函数进行处理。尽管此函数看似简单,但它具有一些复杂性和需要考虑的因素……
阅读 3 分钟
C++ 中的自底向上方法是一种软件开发策略,它涉及将复杂的系统分解为更小、更易于管理的部分,然后将这些部分构建成一个更大、更全面的程序。这种方法可以与自顶向下方法相对应,后者从...
阅读 3 分钟
在处理 C++ 编程时,格式化输出在提高代码可读性和用户友好性方面起着至关重要的作用。在控制输出格式的可用工具中,setf() 函数是一项有价值的功能。这篇博文将深入探讨 setf() 函数...
阅读 3 分钟
直方图简介及其用例 直方图使用图形方式表示数据集合的频率分布。它们经常用于科学研究、统计和数据分析中可视化和分析数据。直方图由一系列垂直条组成,每个条的...
阅读9分钟
与任何其他语言中的数组一样,C++ 中的 vector 是动态的;因此,其大小不是固定的。为什么使用 vector?因为 C++ 数组是静态的,并且在定义后无法更改其宽度,这在存储数据量不断变化的数据集时并不理想……
阅读 4 分钟
多态被定义为将一个函数或运算符用于多种用途的过程。换句话说,我们也可以说运算符或函数可以以不同的方式为我们服务。例如,假设运算符 '+' 用于……
阅读 4 分钟
在 C++ 中,创建新线程是利用多处理器或多核来最大化程序性能的强大方法。线程允许多个独立进程同时执行,从而使程序能够同时执行多项任务。这对于 CPU 密集型应用程序尤其有用,例如……
阅读 4 分钟
在本文中,您将了解 C++ 中的符号表。编译器设计符号表为了存储有关不同实体(如变量和函数名称、对象和类等)存在的信息,编译器会构建并维护一个数据结构。符号表是...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India