[算法] 优先队列

普通队列:先入先出

优先队列:依照元素优先级的大小取出数据

现实世界中,许多情况是可以插队的(根据权重)

 

应用:

游戏中AI优先攻击哪个敌人(根据经验高低、血多少等)

操作系统处理应用

 

在第N个元素中选出前M个元素

使用排序可在O(NlogN)内解决

使用优先队列可在O(NlogM)内解决(N和M相差越大优化越明显)

快速获取Top10最热门的搜索关键词(Top K问题)

 

求中位数

 

用不同的数据结构实现优先队列:

普通数组,入队O(1),出队O(n)

顺序数组,入队O(n),出队O(1)

堆的入队和出队的效率都是O(lgn)

对于总共N个请求,普通数组或顺序数组,最差情况O(n^2),而堆是O(nlgn)

 

堆是一种特殊的树,需满足:

1)是一颗完全二叉树

2)每个节点的值都必须大于等于(或小于等于)其子树中每个节点的值

posted @ 2020-01-29 19:27  cxc1357  阅读(151)  评论(0)    收藏  举报