排序、堆与贪心

围绕顺序、动态候选和局部最优,串联排序算法、堆与优先队列、贪心算法。

已发布文章计算机基础入门2 分钟阅读发布于 2026年9月1日更新于 2026年9月15日
文章目录
  1. 先从整理一叠卡片开始
  2. 我为什么先补这一章
  3. 我自己的学习顺序
  4. 我当时最容易混淆的地方
  5. 我后来这样检查自己是否真的理解
知识目录数据结构与算法:从基础到工程实践20 / 77
LOCAL NOTE高亮并记笔记
0 / 1000 · 只保存在这台设备
READER NOTES排序、堆与贪心》的本机笔记

我真正开始理解“排序、堆与贪心”,不是在背完某段代码之后,而是在一次次写错之后。最明显的问题是:排序、堆和贪心以前在我脑子里是三块分开的知识,做 Top K 和任务调度后才发现它们经常在同一个问题里配合。把这些错误重新摊开来看,我才找到比口诀更可靠的理解方式。

排序、堆与贪心这一章关注的是“候选选择”和“顺序带来的结构”。它们在工程里非常常见:排行榜、任务调度、优先级队列、Top K、区间选择、资源分配,都离不开这几类思想。

这一章的重点不是死记排序代码,而是理解为什么排序之后问题会变简单,为什么堆可以动态维护最值,为什么贪心必须证明正确。

先从整理一叠卡片开始

如果只整理一次,可以把全部卡片排好序;如果卡片不断加入,而你每次只关心最小或最大的一张,维护一个堆通常更合适;如果要从一堆活动里选出尽量多的不冲突安排,则可能需要排序后做贪心选择。

它们分别回答三个不同问题:

  1. 排序:怎样得到完整顺序?
  2. :怎样持续维护当前最重要的候选?
  3. 贪心:怎样证明眼前选择不会损害最终结果?

排序算法工程选择图

我为什么先补这一章

这一章重点解决:

  1. 排序算法怎么选。
  2. Top K 和动态最值为什么适合用堆。
  3. 贪心策略为什么不能只凭直觉。
  4. 如何从“局部选择”推导“全局最优”。

我自己的学习顺序

  1. 排序算法:从比较排序到工程选择。
  2. 堆与优先队列算法:Top K、中位数与任务调度。
  3. 贪心算法:局部最优与证明思维。

我当时最容易混淆的地方

排序不是目的,排序通常是在制造一个可利用的顺序,让后续判断更简单。

堆不是排序专用结构,它更像一个动态候选池:每次都能快速拿到当前最重要的元素。

贪心最危险的地方是“看起来很合理”。真正能用贪心,必须能说明每一步局部选择不会破坏最终最优。

我后来这样检查自己是否真的理解

  • 快排为什么平均快,但最坏会退化?
  • 什么时候用小根堆维护前 K 大?
  • 区间调度为什么按结束时间排序通常有效?
  • 贪心和动态规划都在做选择,它们的区别是什么?
JARVIS · 当前文章

有哪里没看懂?可以只问这篇。

Jarvis 会限定在《排序、堆与贪心》及其公开关联内容中检索,并把引用定位回原文章节。

JARVIS / ARTICLE针对《排序、堆与贪心》提问
当前范围排序、堆与贪心不会悄悄扩大到全站
0 / 1000

准备好了。当前只会围绕排序、堆与贪心回答。

READER SIGNAL

这篇内容对你有帮助吗?

不需要登录。你的反馈会直接进入作者待处理列表。