最大最小堆的操作以及实现
2010-01-12 15:02
411 查看
堆是一种常用的数据结构,但是没有链表等其他数据结构常用,所以常常容易忘记。
这里要说的是最大最小堆,以最大堆进行说明,最小堆可进行类推。最大最小堆为完全二叉树,一般用数组实现,子节点和父节点的位置关系为:
index(parent)=index(child)/2(取整) index(left child)=index(parent)*2 index(right child)=index(parent)*2+1
最大堆的操作:
1.插入
首先将插入的节点让在数组(最大最小堆一般使用数组结构)末尾,然后进行btot操作,所以时间复杂度为lgn
2.删除
首先将顶点删除,然后将数组的最后一个值放在顶点的位置,然后进行ttob操作,所以时间复杂度为lgn
3.初始化
从数组的n/2位置处进行ttob操作,所以时间复杂度为nlgn
实现过程中需要的2个辅助操作:
1.自顶向下调整堆(lgn),标记为totb(top to bottom)
2.自底向上调整堆(lgn),标记为btot(bottom to top)
这里要说的是最大最小堆,以最大堆进行说明,最小堆可进行类推。最大最小堆为完全二叉树,一般用数组实现,子节点和父节点的位置关系为:
index(parent)=index(child)/2(取整) index(left child)=index(parent)*2 index(right child)=index(parent)*2+1
最大堆的操作:
1.插入
首先将插入的节点让在数组(最大最小堆一般使用数组结构)末尾,然后进行btot操作,所以时间复杂度为lgn
2.删除
首先将顶点删除,然后将数组的最后一个值放在顶点的位置,然后进行ttob操作,所以时间复杂度为lgn
3.初始化
从数组的n/2位置处进行ttob操作,所以时间复杂度为nlgn
实现过程中需要的2个辅助操作:
1.自顶向下调整堆(lgn),标记为totb(top to bottom)
2.自底向上调整堆(lgn),标记为btot(bottom to top)
相关文章推荐
- 动态函数调用实现下列操作,输入2个数以及操作符计算结果。@求最大公约数 $求最小公倍数 -求差 +求和
- C++实现堆、最大堆、最小堆 -- 堆排序插入删除操作
- 动态函数调用实现下列操作,输入2个数以及操作符计算结果。@ 求最大公约数 $求最小公倍数 - 求差 + 求和 等等
- //动态函数调用实现下列操作,输入2个数以及操作符计算结果。@ 求最大公约数 $求最小公倍数 - 求差 + 求和 等等
- struts2源码分析--IOC容器的实现(操作以及容器的初始化)
- 实现table中checkbox复选框、以及判断checked是否被选中、js操作checkedbox选中
- 如何在DataGrid控件中实现编辑、删除、分类以及分页操作
- 链式存储结构实现队列的入队和出队操作以及 栈的出栈和入栈操作
- C# j基本操作-拷贝文件夹的所有内容到另一个文件夹内: 复制代码 1 public static void CopyDir(string srcPath, string实现文件夹的复制以及删除
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- libcurl post/get上传下载文件 以及断点下载(操作libcurl 实现断点下载(续点续传))
- MapReduce实现基本SQL操作的原理-join和group by,以及Dinstinct
- java操作hdfs,实现文件上传、下载以及查看当前文件夹下所有文件
- (二叉树)谈一谈各类算法和数据结构的c++实现以及相关操作的复杂度(二)
- Java实现-队列中取最大值操作
- 大数操作,用顺序表实现最大一百位数的加减法实现
- 最大堆与最小堆的实现
- KD-tree的原理以及构建与查询操作的python实现
- C# 实现PPT文档加密、解密以及重置密码的操作
- (C语言版)栈和队列(一)——实现链式栈和链式队列的基本操作以及遇到的问题