news 2026/4/3 6:12:42

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/4/3 0:11:57

Markdown嵌入交互式图表:动态展示PyTorch训练曲线

Markdown嵌入交互式图表&#xff1a;动态展示PyTorch训练曲线 在深度学习项目的日常开发中&#xff0c;你是否经历过这样的场景&#xff1f;模型已经跑了几十个epoch&#xff0c;终端里滚动着一行行损失值&#xff0c;但你依然无法判断它到底收敛了没有。截图几张静态图像发给同…

作者头像 李华
网站建设 2026/4/1 22:18:17

PyTorch-CUDA-v2.8镜像容器逃逸风险评估与防范

PyTorch-CUDA-v2.8镜像容器逃逸风险评估与防范 在AI工程实践中&#xff0c;我们常会遇到这样的场景&#xff1a;团队成员提交的训练脚本在本地运行完美&#xff0c;但一旦部署到服务器就报错“CUDA not available”&#xff1b;更糟的是&#xff0c;某天突然发现一台GPU主机被…

作者头像 李华
网站建设 2026/3/31 14:30:14

Conda环境清理技巧:释放PyTorch开发磁盘空间

Conda环境清理技巧&#xff1a;释放PyTorch开发磁盘空间 在深度学习项目的日常迭代中&#xff0c;一个看似不起眼的问题常常悄然浮现——明明刚启动的云实例有上百GB存储&#xff0c;几轮实验下来却突然提示“磁盘空间不足”。尤其当你使用的是预装 PyTorch 和 CUDA 的镜像时&a…

作者头像 李华
网站建设 2026/3/31 2:21:53

如何在PyTorch-CUDA-v2.8中启用混合精度训练?

如何在 PyTorch-CUDA-v2.8 中启用混合精度训练 在当前深度学习模型动辄上百亿参数的背景下&#xff0c;训练效率和显存占用已成为制约研发迭代速度的关键瓶颈。尤其在视觉、大语言模型等场景中&#xff0c;使用传统 FP32 单精度训练不仅容易“爆显存”&#xff0c;还会让每个 e…

作者头像 李华
网站建设 2026/3/30 14:33:46

马里兰大学突破:AI实现侦探式渐进推理探索

这项由马里兰大学学院园分校的陈瑞凡、梁怡君、什韦塔巴德瓦杰、科韦西科比纳、李明和周天怡等研究人员共同完成的研究发表于2025年12月&#xff0c;论文编号为arXiv:2512.11995v1。有兴趣深入了解的读者可以通过该编号查询完整论文。当我们面对一个复杂问题时&#xff0c;比如…

作者头像 李华