技能一覧 › 大学数学 アルゴリズムと計算量

貪欲法が最適でない場合の判定

硬貨問題などで貪欲法の結果 と動的計画法による最適値 を比べ、 となる を見つけたり数えたりできる

前提

説明

硬貨の種類が決まっているとき、「払える最大の硬貨から使う」貪欲法の枚数 と、動的計画法で求めた本当の最小枚数 を表にして並べます。そうすることで、貪欲法が損をする金額 ( となる )を見つけたり数えたりできます。新しい硬貨の組を作るときや、プログラムで貪欲法を使ってよいかを確かめるときに役立ちます。ここでは、1 円硬貨を含み、どの金額も払える硬貨の組を考えます。

なぜそうしてよいのか

貪欲法の払い方も、 円をちょうど払う払い方の 1 つです。 はそのような払い方すべての中での最小枚数なので、いつでも が成り立ちます。したがって「貪欲法が最適でない」とは、 と真に大きくなることです。両者を同じ で比べれば判定できます。

は前提の技能の漸化式 で求めます。 も同じ形の漸化式で表せます。貪欲法は最初に「 以下で最大の硬貨 」を 1 枚使い、残り 円にも同じ規則を当てはめます。よって です。 は可能な硬貨をすべて試して最小を取りますが、 は 1 通りしか試しません。この違いが差を生みます。

差が出ても、それより大きい金額すべてで差が出るとは限りません。そのため、調べる範囲の をひとつずつ比べる必要があります。

手順

  1. 動的計画法で の表を作る:、 について ( は硬貨の額面で、 のものだけを考える)

  2. 貪欲法で の表を作る:、 を 以下で最大の硬貨として

  3. 同じ で と を比べ、 となる に印を付ける( となることはないので、出たら計算ミス)

  4. 印の付いた を、問われた形(すべて・個数・最小のもの)で答える

例題

1 円、3 円、4 円の 3 種類の硬貨が何枚でも使えるとする。 円をちょうど払うとき、貪欲法の枚数を 、最小枚数を とする。 の範囲で となる をすべて求めよ。

例題の解答

手順1( の表): から順に、 を計算する(引けるものだけを使う)。。

手順2( の表): は なら 4、 なら 3、 なら 1 である。。

手順3(比較): である。実際、貪欲法は だが、最適は である。 である。貪欲法は だが、最適は である。ほかの ではすべて となる。

手順4:求める は である。

答え:

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能を使う問題