Python 中的最小堆实现2024 年 8 月 29 日 | 5 分钟阅读 最小堆是一种数据结构,它满足堆属性,即每个节点的值都小于或等于其子节点的值。这意味着堆的最小值始终存储在根节点。 以下是构建最小堆的算法:
insert 函数接收一个堆和一个值,并将该值添加到堆中,同时保持堆属性。 insert 函数的算法:
示例实现此算法的 Python 程序 输出 [1, 3, 5, 4, 8, 7] build_heap 方法首先将输入列表复制到heap数组中,然后对堆中的每个非叶节点调用min_heapify方法,从底部开始向上构建。它确保生成的堆满足最小堆属性。
总而言之,MinHeap 类的构建堆的最坏情况时间复杂度为O(n log n),插入、提取和最小堆化操作为O(log n)。其最坏情况空间复杂度为O(n),因为在构建堆时需要将输入列表复制到堆数组中。 一种替代方法是使用表示为二叉树的二叉堆,其中每个节点最多有两个子节点。在此表示中,堆存储在列表中,其中索引 i 处节点的父节点位于索引 (i-1)//2 处,而索引 i 处节点的左和右子节点分别位于索引 2*i+1 和2*i+2 处。 示例 输出 [1, 3, 5, 4, 8, 7] 说明 在此实现中,__init__方法接受一个可选的lst参数,如果提供了该参数,则用于构建堆。build_heap方法接受一个列表作为输入,并就地修改堆以确保它满足最小堆属性。 这两种方法基本相同。在这两种情况下,我们都使用数组实现了二叉最小堆来存储堆,并且我们使用min_heapify方法来确保在每次插入或删除操作后都满足最小堆属性。 这两种实现之间的唯一区别是,在第一种方法中,build_heap方法接受一个列表作为输入并从头创建一个新的堆,而在第二种方法中,build_heap方法修改一个已存在的表示为数组的堆。 |
在本教程中,我们将学习如何改进 Python 中的面向对象设计。当我们编写类并设计 Python 中的交互时,我们会遵循一组指令,有助于构建更好的面向对象代码。面向对象设计是流行且广泛...
阅读 13 分钟
网络安全中的人工智能正在彻底改变我们抵御黑帽黑客和恶意黑客的方式。在网络安全方面采取专注的策略非常重要。从技术角度来看,采取全面的安全方法非常重要,其中...
11 分钟阅读
在本教程中,我们将解释字典的一些重要且有趣的用例。字典是最重要和最有用的数据结构,它存储键值对,并且灵活、高效且易于使用。尽管 Python 中的字典通常用于...
阅读9分钟
TensorFlow 是一个用于深度学习和机器学习的开源软件库。它最初由 Google Brain 团队创建,目前由 Google TensorFlow 团队负责维护。它用于许多不同的用途,包括时间序列预测、语音和图像识别以及......
阅读 4 分钟
JSON 代表 JavaScript Object Notation,它是一种流行的数据格式,用于表示结构化数据。它是服务器和 Web 应用程序之间传输数据的有效方式。JSON 中的数据表示类似于 Python 字典。示例如下。示例...
阅读1分钟
在本模块中,我们将创建一个用于旋转屏幕的 Python 代码,并将其与 GUI 一起使用。使用 rotatescreen 模块中的一些函数,这是一个用于在系统中旋转屏幕的简单 Python 库,可以更改显示...
阅读 4 分钟
在本教程中,我们将讨论 Python 中 time 模块的 clock() 函数。我们还将看到 Python time clock() 方法的语法以及一些示例以便更好地理解。理解 Python 中的 time clock() 方法 clock() 方法是一个函数...
阅读 3 分钟
任何人都可以通过玩翻转图块游戏来测试自己的记忆力。在此集合中,每个数字或图形都有成对的图块,这是一个偶数。我们必须翻转图块,以便在它们朝下时可以看到它们。一个人翻转...
阅读 12 分钟
在本教程中,我们将学习如何使用 Python 代码生成 HTML。我们将学习 tinyhtml 模块并生成一些 HTML。创建 HTML 可能非常繁琐和具有挑战性,有时需要花费大量时间进行调试,并且容易出错。而...
阅读 3 分钟
在本文中,我们将讨论将函数作为参数传递给 Python。函数可以接受多个参数。这些参数可以是对象、变量(相同或不同数据类型)和函数。Python 函数是第一批优雅的小工具。在以下实例中,一个特性...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India