貪欲アルゴリズム (または貪欲アルゴリズム) とは、問題を解決するときに、その時点で適切と思われる選択を常に行うことを意味します。つまり、全体的な最適解を考慮せずに、彼が導き出したのは、ある意味では局所的な最適解なのです。 貪欲アルゴリズムは最適な解を保証するものではありませんが、いくつかの問題では貪欲アルゴリズムの解が最適な解となります。貪欲アルゴリズムを使用して問題を計算できるかどうかを判断できる必要があります。貪欲アルゴリズムと他のアルゴリズムには明確な違いがあります。動的プログラミングでは、貪欲に選択するのではなく、常にすべてのサブ問題のソリューションを組み合わせて、現在の最適ソリューション(グローバル最適ソリューション)を取得します。バックトラッキング方式は、パスを選択しようとするものです。選択が間違っている場合は、「後悔」、つまり戻って別の選択を試すことができます。
1. 変更の問題 店主が n 元のお釣りを返す必要があるとします。硬貨の額面は 100 元、50 元、20 元、5 元、1 元です。必要な硬貨の最小額を返すにはどうすればよいでしょうか? (注: 10 元という額面はありません) お釣りが376元だったらどうなりますか?100*3+50*1+20*1+5*1+1*1=375 コードは次のとおりです。
2 ナップサック問題 一般的なナップサック問題には、整数ナップサック問題と部分ナップサック問題があります。問題の説明は大まかに次のようになります。 泥棒が店でn個の品物を見つけました。i番目の品物はVi元の価値があり、重さはWiキログラムです。彼はできるだけ価値の高いものを持ち帰りたいと願っていますが、彼のバックパックには最大で W キログラムの物しか入りません。どの商品を持っていくべきでしょうか?
例: 0-1 ナップサックと分数ナップサックの両方で、貪欲アルゴリズムは最適なソリューションを得ることができますか? なぜですか? 明らかに、貪欲アルゴリズムは、小数点付きバックパックの最適解を確実に得ることができます。各アイテムの単位重量の値を計算し、降順で並べ替えてから、アイテムの取り出しを開始します。そのタイプのアイテムがすべて入る限り、すべてを入れることができます。すべてを入れることができない場合は、バックパックがいっぱいになるまでいくつか入れることができます。 この問題に関しては、0-1 バックパックがいっぱいにならないことは明らかです。偶然可能だとしても、すべての 0-1 ナップサック問題を満たすことはできません。 0-1 ナップサック問題 (整数ナップサック問題とも呼ばれる) は、2 つのタイプに分けられます。1 つは、各カテゴリのアイテム数が制限されている (制限されている) 問題です。 1 つは無制限で、好きなだけ取得できることを意味します。貪欲な戦略は、両方に使用することはできません。 0-1 ナップサックは、整数ナップサック問題の典型的な第 1 種です。 分数バックパックコードの実装:
n 個の非負の数値があり、文字列と同じ方法で整数に連結されます。連結して最大の整数を得るにはどうすればよいですか? たとえば、 32、94、128、1286、6、71 を連結すると、最大の整数 94716321286128 が形成されます。 注 1:文字列のサイズの比較は、整数のサイズの比較とは異なります。文字列のサイズを比較する場合、まず最初の桁を見て、大きい方が大きな数字になります。しかし、長い文字列と短い文字列をどのように比較するのでしょうか。たとえば、128 と 1286 をどのように比較するのでしょうか。 考え方は次のとおりです。 # シンプル: 2つの等しい数値を比較すると
# 比較する桁数が等しくない場合、貪欲アルゴリズムをどのように使用すればよいでしょうか? # 考え方を変えて文字列を連結し、結果を比較します
デジタルスプライシングコードは次のとおりです。
4 活動選択の問題 同じ会場を占有する n 個のアクティビティがあるが、その会場は一度に 1 つのアクティビティのみが使用できるとします。 各アクティビティには開始時刻 Si と終了時刻 Fi (質問内の時間は整数で表されます) があり、アクティビティが間隔 [Si、fi) 内のスペースを占めることを示します。 (注:左が開いて右が閉じています) Q: この会場で開催されるイベントの数を最大限に増やすには、どのような活動が必要ですか? 貪欲な結論:最初に終了するアクティビティは、最適なソリューションの一部である必要があります。 証明: a はすべてのアクティビティの中で最初に完了するアクティビティであり、b は最適ソリューションの中で最初に完了するアクティビティであると仮定します。 a=bの場合、結論は真である a!=b の場合、b の終了時刻は a の終了時刻よりも遅くなければなりません。このとき、a は最適解の b を置き換えるために使用されます。a は最適解の他のアクティビティ時間と重なってはならないため、置き換え後の解も最適解です。 コードは次のとおりです。
5 最大部分列合計 最大サブ配列の合計を求める問題は、整数配列 (配列要素は負と正の両方) が与えられた場合に、連続するサブ配列の合計の最大値を求めることです。以下では、貪欲アルゴリズムを使用して 1 つずつ走査します。 コードは次のとおりです。
|
<<: Googleの検索アルゴリズムがユーザーをより深く理解する方法
>>: 人工知能はデジタルマーケティング革命において否定できないトレンドとなっている
最近、バックエンドで数年間働いてきたプログラマーが、かなり混乱を招く質問をオンラインで提起しました。...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
【環球網智能報記者張洋】過去2年間で、人工知能技術が次のホットスポットとなり、多くの有名なテクノロジ...
[[328065]] 2020年2月7日、第34回アメリカ人工知能学会年次会議(AAAI 2020...
11月16日、業界をリードする科学研究機関、米国国立スーパーコンピューティングセンター、そしてAI分...
11月7日、ゼネラルモーターズの自動運転会社クルーズは、自動運転タクシーは4~5マイルごとに人間の支...
[[413292]]顧客に顔のスキャンを義務付けることができるかどうかという議論を引き起こした最初の...
[[176432]] 【導入】ほとんどの科学研究では、大量の実験データの統計分析は、通常、コンピュー...
みなさんこんにちは、三元です。前回の記事では、AIを使いこなせない人は本当に将来淘汰されていくのか?...
2021年の両会期間中、百度の李ロビン会長の「地域社会におけるスマート高齢者ケアの推進を加速し、テ...
[[275552]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitA...
Microsoft は、大規模言語モデルのパフォーマンスを向上させる新しいツール、Jigsaw を発...
インターネットの普及は人々に多くの利便性をもたらしましたが、噂が広がる温床にもなっています。ネット上...