news 2026/9/2 16:08:12

python实现堆结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python实现堆结构
class Heap: def __init__(self, is_min_heap=True): self.heap = [] self.is_min_heap = is_min_heap def _compare(self, a, b): """比较函数,根据是最小堆还是最大堆决定比较方式""" if self.is_min_heap: return a < b else: return a > b def _parent(self, index): """获取父节点索引""" return (index - 1) // 2 def _left_child(self, index): """获取左子节点索引""" return 2 * index + 1 def _right_child(self, index): """获取右子节点索引""" return 2 * index + 2 def _swap(self, i, j): """交换堆中两个元素""" self.heap[i], self.heap[j] = self.heap[j], self.heap[i] def _heapify_up(self, index): """向上调整堆结构""" parent = self._parent(index) if index > 0 and self._compare(self.heap[index], self.heap[parent]): self._swap(index, parent) self._heapify_up(parent) def _heapify_down(self, index): """向下调整堆结构""" largest = index left = self._left_child(index) right = self._right_child(index) if left < len(self.heap) and self._compare(self.heap[left], self.heap[largest]): largest = left if right < len(self.heap) and self._compare(self.heap[right], self.heap[largest]): largest = right if largest != index: self._swap(index, largest) self._heapify_down(largest) def insert(self, value): """插入元素到堆中""" self.heap.append(value) self._heapify_up(len(self.heap) - 1) def extract_top(self): """提取堆顶元素""" if len(self.heap) == 0: return None top = self.heap[0] self._swap(0, len(self.heap) - 1) self.heap.pop() self._heapify_down(0) return top def get_top(self): """获取堆顶元素""" if len(self.heap) == 0: return None return self.heap[0] def size(self): """获取堆的大小""" return len(self.heap) def is_empty(self): """判断堆是否为空""" return len(self.heap) == 0 # 测试代码 if __name__ == "__main__": # 测试最小堆 min_heap = Heap(is_min_heap=True) print("=== 测试最小堆 ===") data = [5, 3, 8, 1, 2, 7] for num in data: min_heap.insert(num) print(f"堆顶元素: {min_heap.get_top()}") print(f"堆大小: {min_heap.size()}") print("提取堆顶元素:") while not min_heap.is_empty(): print(min_heap.extract_top(), end=" ") print() # 测试最大堆 max_heap = Heap(is_min_heap=False) print("=== 测试最大堆 ===") data = [5, 3, 8, 1, 2, 7] for num in data: max_heap.insert(num) print(f"堆顶元素: {max_heap.get_top()}") print(f"堆大小: {max_heap.size()}") print("提取堆顶元素:") while not max_heap.is_empty(): print(max_heap.extract_top(), end=" ") print()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 13:23:41

SQLite Indexed By

SQLite Indexed By SQLite 是一个轻量级的数据库管理系统,它以其小巧的体积、高效的数据处理能力和强大的功能而广受欢迎。在SQLite数据库中,索引是提高查询效率的关键因素。本文将深入探讨SQLite索引的原理、类型、创建方法以及最佳实践。 索引的原理 索引是数据库中一种…

作者头像 李华
网站建设 2026/8/30 3:18:58

PostgreSQL NULL 值处理与优化

PostgreSQL NULL 值处理与优化 引言 在数据库设计中,NULL 值是一个重要的概念。在 PostgreSQL 中,NULL 值用于表示未知或缺失的数据。本文将详细介绍 PostgreSQL 中 NULL 值的处理方法,以及如何优化与 NULL 值相关的查询。 什么是 NULL 值? 在 PostgreSQL 中,NULL 值表…

作者头像 李华
网站建设 2026/9/2 15:13:17

YOLOv5l模型在PyTorch-CUDA-v2.8上的训练收敛速度分析

YOLOv5l 模型在 PyTorch-CUDA 环境下的训练收敛速度分析在现代目标检测任务中&#xff0c;模型训练效率直接决定了研发周期和落地成本。以自动驾驶中的实时障碍物识别为例&#xff0c;一个高精度模型若需数天才能完成训练&#xff0c;将极大拖慢迭代节奏。而如今&#xff0c;借…

作者头像 李华
网站建设 2026/8/30 4:19:15

PyTorch-CUDA-v2.8镜像体积优化:精简不必要的依赖包

PyTorch-CUDA-v2.8镜像体积优化&#xff1a;精简不必要的依赖包 在现代AI系统的构建中&#xff0c;一个看似微不足道的细节——容器镜像大小——往往成为影响部署效率和资源利用率的关键瓶颈。尤其是在CI/CD流水线频繁拉取镜像、边缘设备带宽受限或Kubernetes集群大规模调度的…

作者头像 李华
网站建设 2026/8/29 23:36:39

Anaconda配置PyTorch环境时提示空间不足怎么办?

Anaconda配置PyTorch环境时提示空间不足怎么办&#xff1f; 在深度学习项目启动阶段&#xff0c;一个常见的“拦路虎”并不是模型跑不通&#xff0c;而是——环境装不上。尤其当你兴冲冲打开终端准备用 conda install pytorch 创建开发环境时&#xff0c;却收到一条冰冷的提示&…

作者头像 李华
网站建设 2026/9/2 23:02:42

如何在PyTorch-CUDA-v2.8中集成MLflow进行实验追踪?

如何在 PyTorch-CUDA-v2.8 中集成 MLflow 进行实验追踪 在现代深度学习项目中&#xff0c;模型训练早已不再是“写代码—跑实验—看结果”的简单循环。随着团队规模扩大、实验频率激增、超参数组合爆炸式增长&#xff0c;研究人员常常面临这样的窘境&#xff1a;三个月前某个表…

作者头像 李华