貪欲アルゴリズムの可視化

貪欲法は各段階で今よい候補を選び、後で選び直しません。区間の最早終了やハフマンの最低頻度の合併を、コードと同期させ、正しさの根拠とともに見ます。

短い規則が正しいとは限りません。最早開始、最大価値、次の最安値などは書きやすくても、証明が必要です。交換論法では、最適解の選択を一つずつ貪欲な選択へ置き換え、質を下げないと示します。

各レッスンの内容

レッスン貪欲な規則安全性の根拠観察するもの
区間スケジューリング両立する区間の最早終了を選ぶ最適解の最初と交換しても、後に使える空きを減らさない別の最適予定を貪欲な予定へ変える過程
ジャンプゲーム各索引で最遠到達境界を延ばす最大 nums[i] まで跳べるため到達集合が連続し、切れ目を越せないオレンジの弧と緑の境界、全経路がゼロへ集まる失敗
ハフマン符号最低頻度の二部分木を合併する低頻度の葉を深くする費用が小さく、最適接頭符号を構成できる優先キューで木を作り、固定長とのビット数を比べる
分数ナップサック密度順に入れ、最後を切る分割が密度を保つとき最適だが、不可分なら失敗する密度の矩形と 205/220/240 の比較

推奨する学習順序

  1. 区間スケジューリング:一資源、一規則で、交換しても区間数が減らない様子を見ます。long-blocker は最早開始という誤った規則の反例です。
  2. ジャンプゲーム:最遠位置一つを状態にします。到達集合が連続した前半部分という不変条件を学び、同じ数を一度交換しただけで結論が逆になる例から、配置の重要性を見ます。
  3. ハフマン符号:作った二分木の形が答えです。既定の文は 23 ビット、固定長は 33 ビットで、均一頻度の例では同点になります。その場合、接頭符号木は一記号二ビットを改善できません。
  4. 分数ナップサック:分割可能という前提を検証します。同じ密度規則でも、0/1 の選択へ変えると最適解に負ける例を再生します。

四つの後は、グラフの Dijkstra と最小全域木へ進めます。同じく貪欲な証明を使いますが、グラフのデータ構造と不変条件が中心です。