|
|
|
@ -12,7 +12,7 @@
|
|
|
|
|
|
|
|
|
|
该方法只适用于 $k \ll n$ 的情况,因为当 $k$ 与 $n$ 比较接近时,其时间复杂度趋向于 $O(n^2)$ ,非常耗时。
|
|
|
|
|
|
|
|
|
|
![遍历寻找最大的 $k$ 个元素](top_k.assets/top_k_traversal.png)
|
|
|
|
|
![遍历寻找最大的 k 个元素](top_k.assets/top_k_traversal.png)
|
|
|
|
|
|
|
|
|
|
!!! tip
|
|
|
|
|
|
|
|
|
@ -24,7 +24,7 @@
|
|
|
|
|
|
|
|
|
|
显然,该方法“超额”完成任务了,因为我们只需要找出最大的 $k$ 个元素即可,而不需要排序其他元素。
|
|
|
|
|
|
|
|
|
|
![排序寻找最大的 $k$ 个元素](top_k.assets/top_k_sorting.png)
|
|
|
|
|
![排序寻找最大的 k 个元素](top_k.assets/top_k_sorting.png)
|
|
|
|
|
|
|
|
|
|
## 方法三:堆
|
|
|
|
|
|
|
|
|
@ -36,7 +36,7 @@
|
|
|
|
|
4. 遍历完成后,堆中保存的就是最大的 $k$ 个元素;
|
|
|
|
|
|
|
|
|
|
=== "<1>"
|
|
|
|
|
![基于堆寻找最大的 $k$ 个元素](top_k.assets/top_k_heap_step1.png)
|
|
|
|
|
![基于堆寻找最大的 k 个元素](top_k.assets/top_k_heap_step1.png)
|
|
|
|
|
|
|
|
|
|
=== "<2>"
|
|
|
|
|
![top_k_heap_step2](top_k.assets/top_k_heap_step2.png)
|
|
|
|
|