导语
二叉堆确实是入门级的重要数据结构了,而二项队列也是慢慢要去掌握的一种支持高效合并的优先队列实现。本文稍作比较,望抛砖引玉。
列个表格比较基本操作性能
| 基本操作 | insert(平均) | deleteMin/deleteMax | merge |
|---|---|---|---|
| 二项队列 | O(1) | O(logN) | O(logN) |
| 二叉堆: | O(1) | O(logN) | O(N) |
不难看出,二项队列merge操作优势明显。
二叉堆插入O(1)的解释如下
说明:二叉堆插入也是 O(1) 这点,我其实原本不太敢写,因为网搜确实都写是O(logN),但大家这么想就能理解了(因为我们说的是平均情况):
二叉堆建堆的时间复杂度是O(N),除以逐一插入的N个元素,就平均是O(1)。
准确地说,O(logN)其实是最坏情况。
Merge操作的性能比较
对于二项队列而言,它可以弥补二叉堆的在合并操作上的“低效”。
