随笔分类 - 堆heapq
摘要:import heapq lst = list("AbSZDYM6BTXHU") print(lst) # ['A', 'b', 'S', 'Z', 'D', 'Y', 'M', '6', 'B', 'T', 'X', 'H', 'U'] heapq.heapify(lst) print(lst)
阅读全文
摘要:python默认的都是小根堆,实现数字的大根堆,可在堆化前把数字 乘以 -1 ,输出时 再 乘以 -1 变回原值。 比如: [5, 20, 6],堆化前用列表推导式把列表转为: [-5, -20, -6] import heapq import random data = list(range(1,
阅读全文
摘要:堆排序的核心是什么?借助堆数据结构,不断输出当前堆顶元素(小根堆),每次堆顶离开当前堆后,对剩余元素重新调整成堆,直到堆中只剩下一个元素;元素的输出序列可转换成元素的有序序列。 堆排序的步骤:1. 当一个节点被插入时,将该节点放在堆的末尾(这是为了保证堆是完全二叉树);2. 然后将该节点与它的父节点
阅读全文
摘要:堆可视化操作演示:https://visualgo.net/zh/heap 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:小根堆:Key[i]<=key[2i+1]&&Key[i]<=key[2i+2] 或者 大根堆 Key[i]>=Key[2i+1]&&key>=key[2i+2] 即任何一
阅读全文