当前位置: 首页 > news >正文

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()
http://www.rkmt.cn/news/177222.html

相关文章:

  • Conda环境删除恢复:误删后如何找回PyTorch配置
  • PyTorch模型量化压缩:降低token生成延迟,节省GPU资源
  • Markdown嵌入交互式图表:动态展示PyTorch训练曲线
  • PyTorch张量操作详解:充分利用GPU加速矩阵运算
  • 揭秘要诀!AI应用架构师揭秘企业算力资源调度要诀
  • Conda配置PyTorch环境全攻略:避免常见CUDA版本冲突问题
  • YOLOv5s模型转ONNX格式:借助PyTorch-CUDA完成导出
  • Jupyter Notebook内核崩溃?检查PyTorch内存泄漏问题
  • AppML 案例模型
  • Markdown写技术博客必备:记录PyTorch安装与调试全过程
  • 清华镜像站同步频率解析:确保PyTorch包版本最新
  • SelectExamples 根据类名和语言寻找某一个类的示例代码
  • 2025国内最新裸眼3D品牌 TOP5 推荐!服务深耕于四川、成都、广州、北京、云南等地区,优质服务厂家及企业权威榜单发布,重构视觉展示新生态 - 全局中转站
  • 热梗营销玩出深度共振,美团联合快手再造全民回忆
  • CNN图像分类实战:基于PyTorch-CUDA-v2.8的端到端训练
  • 【毕业设计】基于SpringBoot的高尔夫球场管理系统的设计与实现基于Springboot高尔夫场地预约网站管理系统(源码+文档+远程调试,全bao定制等)
  • 【飞书入门】飞书支持Markdown 吗
  • 【计算机毕业设计案例】基于Springboot的克州旅游网站的设计与实现精品路线推荐、行程规划、价格查询(程序+文档+讲解+定制)
  • Bootstrap5 表单验证
  • JSP 生命周期
  • Java毕设项目:基于Springboot高尔夫场地预约网站管理系统基于SpringBoot的高尔夫球场管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 机器人也能听懂音乐:本田研究院让机器人学会用耳朵预知未来
  • Anaconda配置PyTorch环境时提示空间不足怎么办?
  • 清华镜像站证书过期问题临时绕行方案
  • Git分支管理策略:适用于复杂PyTorch项目开发
  • AndroidWiFiADB终极指南:告别USB线缆,实现无线调试新体验
  • jQuery Mobile Data 属性详解
  • Jupyter Notebook实战:基于PyTorch-CUDA-v2.8的模型训练全流程
  • 如何在PyTorch-CUDA-v2.8中使用ONNX导出模型?
  • vue项目的选择星级样式和axios依赖调用