码迷,mamicode.com
首页 > 其他好文 > 详细

priorityQueue 堆

时间:2017-11-22 13:15:48      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:priorityqueue 堆

priorityQueue 通过add方法添加,通过poll方法一次获得一个最小元素(元素需要实现Comparable或提供Comparator的实现类),实现原理最小堆,也就是说元素按照最小堆结构存放。

最小堆是一个完全二叉树结构(满足第i个节点的左child索引是2i+1,右child索引是2i+2,父节点为i-1/2),且父节点小于左右两个子节点。

一开始如果有一些数据则需要构建最小堆结构,可参看priorityQueue类的heapify方法

提取最小元素后需要重建最小堆结构,用数组最后一个元素代替第一个元素,然后进行最小堆结构调整,参看siftDown方法

添加元素时,将改元素放到数组最后一个元素,然后进行最小堆结构调整,参看siftUp方法

至于里有最小堆排序,第一步构建一个最小堆,则数组的第一个元素是最小元素,然后使之与最后一个元素互换位置,则最后一个元素为最小元素,然后排除最后一个元素,使用第一个到倒数第二个元素进行最小堆结构调整,得到第一个元素是最小元素,然后使之与倒数第二个元素互换,然后再排除倒数第二个元素,用第一元素到倒数第三个元素构建最小堆,如此循环,最后该数组是就是降序排列了。

priorityQueue 堆

标签:priorityqueue 堆

原文地址:http://2839840.blog.51cto.com/2829840/1984028

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!