【どんよくほう】

貪欲法(グリーディアルゴリズム) とは?

💡 「今一番いいもの」を選び続ける
📌 このページのポイント
貪欲法:各ステップで最良を選ぶ ステップ1 ステップ2 ステップ3 結果 30 10 20 最大を選択! 25 5 15 最大を選択! 20 8 12 最大を選択! 合計 75 特徴:高速だが、必ずしも全体最適とは限らない (後戻りせず、その場の最善を選び続ける)
貪欲法のイメージ
ひよこ ひよこ

具体例で教えて?

ペンギン先生 ペンギン先生

お釣り問題が分かりやすいよ。330円のお釣りを最小枚数で返したい。貪欲法:最大の硬貨から使う→500円玉×0、100円玉×3、50円玉×0、10円玉×3=6枚。日本の硬貨体系ではこれが最適解になる。ただし架空の硬貨体系(1円、3円、4円で6円のお釣り)では貪欲法は4+1+1=3枚だけど、最適は3+3=2枚だよ

ひよこ ひよこ

いつ貪欲法が使えるの?

ペンギン先生 ペンギン先生

「貪欲選択性質」がある問題。つまり局所的な最適選択が全体の最適解に繋がる場合。ダイクストラの最短経路アルゴリズムハフマン符号化最小全域木(Kruskal法、Prim法)は貪欲法で最適解が得られる。証明が難しいので、直感で「貪欲で行けそう」と思っても本当にそうか確認が必要だよ

ひよこ ひよこ

DPとの使い分けは?

ペンギン先生 ペンギン先生

貪欲法が適用できるならそちらの方がシンプルで高速。でも貪欲法で最適解が保証されない問題にはDPが必要。ナップサック問題は貪欲法だと最適解にならないことがあり、DPが必要。競技プログラミングでは「まず貪欲法で考えて、反例が見つかったらDPに切り替える」のが定石だよ

ひよこ ひよこ

IPA試験での出題パターンは?

ペンギン先生 ペンギン先生

ジョブスケジューリング問題(「締切までに最大数のジョブをこなす」)が典型。締切が早い順に選ぶ貪欲法で最適解が得られる。ハフマン符号化(出現頻度が高い文字に短い符号を割り当てる)も貪欲法の代表例で試験に出やすいよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「貪欲法」って出てきたら「各段階でその時点の最善を選ぶアルゴリズム」と思えればだいたいOK!
📖 おまけ:英語の意味
「Greedy Algorithm」 = 貪欲アルゴリズム
💬 Greedy(欲張りな)。目の前の最善をGreedy(貪欲)に取り続けるアプローチだよ
← 用語集にもどる