堆、堆排序以及TopK问题

2018-12-21  本文已影响0人  yandaren

堆的定义

堆是一种特殊的数据结构,可以形象化的看成一颗完全二叉树,一般内部的存储结构为数组;堆中的某个节点总是不大于或者(不小于)其左右节点,其中前者为成为小顶堆(最小堆,堆顶为最小值),后者成为大顶堆(最大堆,堆顶为最大值)

堆的一些操作

下面以最大堆为例进行堆操作的说明

堆排序

堆排序的话,无需额外的空间,直接可以在原堆内数组上进行堆排序;

TopK问题

TopK问题描述:在N个无序元素中,找到最大的K个(或最小的K)

按照一般排序算法来寻找的话,时间复杂度为O(nlogn) + O(k); 当N很大,而K很小的时候,这种方法很慢;
可以采用堆来解决这个问题;下面以找到最大的K个值为例

上一篇 下一篇

猜你喜欢

热点阅读