貪欲法(Greedy Algorithm)は、最適解を求める際に、部分最適解を選び続けることで全体の最適解を目指すアルゴリズムの一種です。この手法は、問題に対して局所的に最適な選択を行い、それを繰り返すことで最終的な解を導きます。貪欲法は、最適解が局所最適解の組み合わせで得られる場合に効果的です。
貪欲法は、以下のような問題に広く使用されます。
ここでは、貪欲法を使ってコイン問題を解くサンプルコードを示します。与えられた金額を作るために使用する最小のコイン枚数を求めます。コインの種類は事前に定義されています。
def coin_change(coins, amount):
# コインを降順にソート
coins.sort(reverse=True)
count = 0
for coin in coins:
# 現在のコインで何枚使えるか計算
while amount >= coin:
amount -= coin
count += 1
return count
# コインの種類と金額を設定
coins = [1, 5, 10, 25]
amount = 63
# コイン問題を解く
result = coin_change(coins, amount)
print(f"最小のコイン枚数: {result}")
coin_change
関数は、コインのリストと金額を引数として受け取ります。このアルゴリズムは、コインの額面が特定の条件を満たす場合(例えば、1, 5, 10, 25のようなコインの組み合わせ)に、最適解を保証します。しかし、すべてのコインの組み合わせにおいて最適解を保証するわけではないことに注意が必要です。
このように、貪欲法は特定の問題に対して効果的な解法を提供することができます。しかし、問題によっては最適解を求められない場合もあるため、問題の特性を理解することが重要です。次回は、分割統治法の基本とその応用について学んでいきましょう。