news 2026/6/10 11:54:14

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/6/10 13:58:52

PyTorch-CUDA-v2.8镜像资源调度优化方向探讨

PyTorch-CUDA-v2.8镜像资源调度优化方向探讨 在当前深度学习项目日益复杂、训练任务频繁迭代的背景下&#xff0c;一个稳定、高效且可复用的运行时环境已成为研发流程中的关键基础设施。尤其是在多团队协作、GPU集群共享或持续集成&#xff08;CI/CD&#xff09;场景下&#xf…

作者头像 李华
网站建设 2026/6/10 14:00:16

DTD 元素

DTD 元素 概述 DTD(Document Type Definition,文档类型定义)是XML文档的骨架,它定义了XML文档的结构、元素、属性和它们的约束关系。DTD是一种简单的XML文档声明,用于描述XML文档的结构。它主要被用于定义XML文档的类型,确保XML文档的合法性。 DTD的基本结构 一个DTD…

作者头像 李华
网站建设 2026/6/10 13:59:22

YOLOv5++改进版在PyTorch-CUDA-v2.8上的适配尝试

YOLOv5 在 PyTorch-CUDA-v2.8 环境下的适配实践 在当前 AI 工程化加速落地的背景下&#xff0c;一个常见的现实挑战浮出水面&#xff1a;如何让社区中那些“纸面性能亮眼”的改进模型&#xff0c;真正跑起来&#xff1f;以 YOLOv5 为例&#xff0c;这个由开发者社区自发演进的高…

作者头像 李华
网站建设 2026/6/10 0:32:57

【接口测试】4_PyMySQL模块 _操作数据库

文章目录一、SQL 语法回顾二、select-查询数据&#xff08;重点&#xff09;2.1 查询操作步骤2.2 cursor游标2.2.1 cusor对象的fetch*()方法2.2.2 cusor对象的fetch*()方法的原理2.3 查询案例三、异常捕获3.1 语法3.2 案例四、增删改-数据&#xff08;重点&#xff09;4.1 增删…

作者头像 李华
网站建设 2026/6/9 19:30:25

企业级AI开发环境:PyTorch-CUDA镜像支持Kubernetes编排

企业级AI开发环境&#xff1a;PyTorch-CUDA镜像支持Kubernetes编排 在当今AI驱动的产业变革中&#xff0c;企业对深度学习模型的迭代速度和部署效率提出了前所未有的要求。一个典型的现实挑战是&#xff1a;研究员在本地训练成功的模型&#xff0c;到了生产环境却因CUDA版本不…

作者头像 李华
网站建设 2026/6/10 1:59:24

PyTorch安装教程GPU版:Raspberry Pi能否运行?

PyTorch安装教程GPU版&#xff1a;Raspberry Pi能否运行&#xff1f; 在人工智能开发日益普及的今天&#xff0c;越来越多开发者尝试将深度学习模型部署到边缘设备上。一个常见的疑问随之而来&#xff1a;既然我们能在笔记本甚至台式机上用 GPU 跑 PyTorch&#xff0c;那能不能…

作者头像 李华