堆中删除任意元素
来源:互联网 发布:java json遍历 编辑:程序博客网 时间:2024/05/16 19:26
算法导论6.5-8
def heapDelete(A, i): A[i], A[-1] = A[-1], A[i] A.pop() maxHeap(A, i)
上面这个算法是错误的,因为没有考虑如果替换元素比被替换元素的值更大,那么有可能i的父节点也不能保持最大堆性质的情况。如图,要删除1,用6替换1,3不再保持最大堆性质。
10 / \ 9 3 / \ / \ 8 5 1 2 / \ 7 6
修改后的版本
def heapDelete(A, i): t = A.pop() if A[i] < t: # A[i]节点保持最大堆性质,但是A[i]的父节点可能最大堆性质不再保持 heapIncreaseKey(A, i, t) else: # A[i]父节点保持最大堆性质,但是A[i]的最大堆性质可能不在保持 A[i] = t maxHeapify(A, i)
0 0
- 堆中删除任意元素
- js简单删除数组中任意元素
- 删除任意数组中相同的元素 , 删除排序后的数组中相同的元素
- vector中删除任意元素(按序列号,比如程序中删除第4个)
- 九、堆与优先队列---(3)输出堆中元素并获取和删除堆顶元素
- 堆的添加,删除元素
- java删除数组中的任意位置元素
- 堆中插入元素
- 数组元素的删除、首元素和尾元素的删除、任意位置元素的删除
- 数组任意位置插入元素,删除特定元素
- 二叉堆类添加和删除元素
- 堆删除最小元素的操作思路
- 堆顶元素的获取与删除
- BW中删除元素
- 数组中删除元素
- lua中删除元素
- 删除数组中元素
- 删除list中元素
- LinkedList总结
- 欢迎使用CSDN-markdown编辑器
- 16. Linux常用命令
- grep常用套路-技巧篇
- 数据科学家路线图
- 堆中删除任意元素
- POJ Balanced Lineup 3264
- iOS 遇到证书签名无效,且出现此证书是“由未知颁发机构签名的解决办法”
- 批量转换csv为excel和批量解压目录下所有压缩包的文件
- MyEclipse8.5生成注册序列号
- Android组件系列----BroadcastReceiver广播接收器
- 如何用kaldi训练好的DNN模型做在线识别
- TCP详解几个状态
- const修饰符可以把对象转变成常数…