什么是堆
可能最容易想到的就是堆与栈,一个变量分配在堆还是栈?栈向低地址延伸,堆往高地址延伸。叫栈是因为代码执行时cpu一般需要通过压栈来保存执行上下文(寄存器),而执行完就出栈恢复执行上下文,这是高效的中断式执行。为什么叫堆呢?我大胆猜测一下,内存一块块申请,释放频率较高,有时需要块更大的连续内存,有时需要块小的,造成了内存出现很多碎片,这个地方反复地申请、释放,搞的乱七八糟,索性起名叫堆,一堆堆的,这个堆区别与数据结构的堆。
什么是数据结构的堆
数据结构的堆,是颗完全二叉树,以连续地址存储(vector)。
插入的方式是,先将元素放到vector尾部,然后vector不断和父母节点比较交换,直到找到合适的位置,所以时间复杂度是O(lgN),也就是树的高度。
删除第一个元素的方式是,先将最后的元素跟第一个元素交换,然后将最后的元素删除,然后第一个元素再跟两个孩子节点中的一个交换,直到找到合适的位置,所以时间复杂度也是O(lgN)。
堆的特点
堆是插入、删除时排序,比较适合处理像海量数据中找到前100个这种类似的。也可以用堆实现优先队列。
阅读(2187) | 评论(1) | 转发(0) |