ホームページ  >  記事  >  バックエンド開発  >  貪欲なアルゴリズムを使用して、PHP で最小コイン変更問題に対する効率的な解決策を実装するにはどうすればよいでしょうか?

貪欲なアルゴリズムを使用して、PHP で最小コイン変更問題に対する効率的な解決策を実装するにはどうすればよいでしょうか?

PHPz
PHPzオリジナル
2023-09-19 10:22:421325ブラウズ

貪欲なアルゴリズムを使用して、PHP で最小コイン変更問題に対する効率的な解決策を実装するにはどうすればよいでしょうか?

貪欲なアルゴリズムを使用して、PHP で最小コイン変更問題に対する効率的な解決策を実装するにはどうすればよいでしょうか?

はじめに:
日常生活では、特に買い物や取引の際に小銭が必要になることがよくあります。できるだけ少ないコインを使用するには、できるだけ少ないコインを使用して釣銭金額を組み合わせる必要があります。コンピューター プログラミングでは、貪欲なアルゴリズムを使用してこの問題を解決し、効率的な解決策を得ることができます。この記事では、PHP の貪欲アルゴリズムを使用して、最小コイン変更問題に対する効率的な解決策を実装する方法を説明し、対応するコード例を示します。

  1. 貪欲アルゴリズムの原理
    貪欲アルゴリズムは、問題を解決するための考え方であり、各ステップで現在の最適解を選択し、最終的に全体的な最適解を取得します。最小コイン変更問題では、貪欲アルゴリズムの考え方は、すべてのコインが見つかるまで毎回変更する目標金額以下の最大額面のコインを選択することです。
  2. 最小コイン変更問題の解決策
    PHP の貪欲アルゴリズムを使用して最小コイン変更問題を解決する手順は次のとおりです:

ステップ 1: 関数を作成する, minimumCoins という名前で、amount (金額) とコイン額面配列 (coins) の 2 つのパラメーターを受け入れます。
ステップ 2: 変更用のコインの組み合わせを保存する空の結果配列 (結果) を定義します。
ステップ 3: コインの金種配列を降順に並べ替えて、大金種から小金種までのより大きな金種のコインを選択します。
ステップ 4: コインの金種配列を走査し、毎回、現在の金種が変更する目標金額以下のコインを選択します。
ステップ 5: 変更プロセス中に、目標金額を更新し、選択した硬貨の金種を結果配列に追加し、選択した硬貨の金種を目標金額から減算します。
ステップ 6: 目標金額が 0 になるまでステップ 4 と 5 を繰り返します。
ステップ 7: 結果の配列を返します。

以下は具体的な PHP コードの例です:

function minimumCoins($amount, $coins) {
    $result = []; // 存储找零的硬币组合
    rsort($coins); // 降序排列硬币面额数组
    
    foreach ($coins as $coin) {
        while ($coin <= $amount) {
            $result[] = $coin; // 将当前硬币面额添加到结果数组中
            $amount -= $coin; // 更新目标金额
        }
    }
    
    return $result;
}

$amount = 47; // 目标金额
$coins = [25, 10, 5, 1]; // 硬币面额数组
$result = minimumCoins($amount, $coins);

echo "找零组合:";
foreach ($result as $coin) {
    echo $coin . " ";
}

上記のコードは出力します: 「変更の組み合わせ: 25 10 10 1 1」、つまり、変更を見つけるには 5 枚のコインが必要です。 47元。

  1. 時間計算量と空間計算量
    貪欲アルゴリズムを使用して最小コイン釣銭問題を解決する場合の時間計算量は O(n) です。ここで、n はコインの額面の数です。結果を格納するには一定の追加スペースのみが必要なため、スペースの複雑さは O(1) です。

結論:
欲張りアルゴリズムを使用することで、PHP の最小コイン変更問題を効率的に解くことができます。この問題は日常生活において非常に現実的であり、貪欲アルゴリズムはシンプルで効率的な解決策を提供します。この記事で提供されているコード例と解決策のアイデアがお役に立てば幸いです。

以上が貪欲なアルゴリズムを使用して、PHP で最小コイン変更問題に対する効率的な解決策を実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。