贪心算法可视化

贪心每步选择当前最合适的候选,不回头修改。本组把选择与证明一起展示:区间调度选择最早结束者,哈夫曼合并最低频子树,动画都与代码同步。

简短规则不一定正确。“最早开始”“最大价值”“下一步最便宜”都容易写出,关键是证明。交换论证说明如何把某个最优解逐步换成贪心选择,且不降低质量。

各课展示什么

课程贪心规则安全依据观察内容
区间调度选兼容区间中结束最早者可替换最优解的首个区间,留下不少于原来的空间把另一份最优日程逐步交换成贪心日程
跳跃游戏按索引维护最远可达边界每次可跳“最多” nums[i],可达集保持连续前缀,断层后无法越过橙色跳跃弧与绿色边界,对照所有路径陷入零的位置
哈夫曼编码合并频率最低的两棵子树稀有叶子更深的成本较低,常见符号留浅,可建立最优前缀码优先队列构建编码树,实时比特数与定长编码比较
分数背包按价值密度装入,最后一件可切分切分保留密度,可分时高密度优先最优;不可分时该规则会失败密度矩形与 205/220/240 三个比较值

建议学习顺序

  1. 区间调度:一项资源、一个选择规则,观察交换过程如何不减少区间数。long-blocker 预设展示“最早开始”这个错误规则的失败。
  2. 跳跃游戏:状态只有一个最远位置。不变量是可达区域保持连续前缀;失败预设只交换一次相同数值的位置,就得到相反结论,说明数组结构同样重要。
  3. 哈夫曼编码:贪心构建的二叉树就是答案。默认文本使用 23 比特,定长编码用 33;均匀频率预设则持平,没有前缀树能优于每符号两比特。
  4. 分数背包:检验可分性这个前提。同样的密度规则在可分物品中最优,改为 0/1 选择后就可能输给最优解,内置对照会重放这个失败。

学完这四课,可继续学习图算法中的 Dijkstra 与最小生成树。它们也使用贪心证明,但数据结构和图上的不变量是课程重点。