数据结构篇二:Priority Queues (PQs) wit

2021-12-03  本文已影响0人  walkerwzy

这是一位 google 工程师分享的8小时的数据结构的视频,我的笔记

优先队列和堆的插曲,在优先队列里引入了heap只是个插曲而不算正式介绍,但其实讲得差不多了。


Priority Queues (PQs) with an interlude on heaps

每次取出最小(或最大)的->pool,添加到PQ,如何得知极值呢?-> heap

Heap

Priority Queue有时候也被叫做Heap,因为它只是一个ADT,当然它也可以用别的数据结构实现。

以下四个,都是heap


image.png

这些就不是


image.png

Usage

可见是很多算法的基础

Complexity

Turning Min PQ into Max PQ

大多数编程语言标准库只提供了min PQ。

  1. 在构建min pq的时候,把比较标准从x>=y变成x<=y(operator重载)
  2. 在构建min pq的时候,把x变成-x,取出的时候再取反一次

原则都是取巧,而且,第二种方法,存在pq里的,并不是你要使用(和本想存储)的对象,所以取出的时候需要处理。

Priority Queue with Binary Heap

实现了heap invariant的binary tree.

除了Binary Heap,还有很多

Adding Elements to Binary Heap

Removing Elements From a Binary Heap

  1. Poll()
  1. Remove(m) 即删除一个特定元素

Complexity
Pool(): O(log n)
Remove(): O(n) (最坏情况下,可能要删的元素在最后一个)

用hashtable优化remove

上一篇 下一篇

猜你喜欢

热点阅读