インタビュアー: 貪欲アルゴリズムとバックトラッキングアルゴリズムについて、どのように理解していますか?応用シナリオ?

インタビュアー: 貪欲アルゴリズムとバックトラッキングアルゴリズムについて、どのように理解していますか?応用シナリオ?

[[429460]]

この記事はWeChatの公開アカウント「JS Daily Question」から転載したもので、著者はHuihuiです。この記事の転載についてはJS Daily Question公式アカウントまでご連絡ください。

1. 貪欲アルゴリズム

貪欲アルゴリズムは、貪欲アルゴリズムとも呼ばれ、アルゴリズム設計における考え方の一種です。

各段階は局所的な最適選択であり、全体最適を達成することを期待しているが、結果は必ずしも最適ではない。

コイン交換の例を見てみましょう。1元、2元、5元のコインを複数持っていて、それを一定の金額に交換したいのですが、必要なコインの最小数は

今 11 元を両替したい場合、貪欲アルゴリズムの考え方に従って、まず最も額面が大きい 5 元硬貨を選択して両替します。すると、11 = 5 + 5 + 1 となり、これが最適な選択肢となります。

しかし、持っている硬貨の額面が 1、3、または 4 で、それを 6 元に交換したい場合、貪欲アルゴリズムによれば、6 = 4 + 1 + 1 が選択されますが、これは最良の選択ではありません。

上記の例から、貪欲アルゴリズムにはいくつかの欠点があることがわかります。貪欲アルゴリズムが使用されるシナリオには、次のような特徴があります。

貪欲法によって問題を解決できる場合、貪欲法が一般的にその問題を解決する最善の方法となります。

貪欲アルゴリズムを選択するかどうかは、主に次の 2 つの特性があるかどうかによって決まります。

  • 貪欲な選択: 問題に対する全体的な最適解が一連の局所的最適解を通じて達成され、各選択が前の選択に依存できるが、後で行われる選択に依存する必要がない場合。
  • 最適なサブ構造: 問題に対する最適な解決策にそのサブ問題に対する最適な解決策が含まれている場合、その問題は最適なサブ構造という特性を持ちます。問題の最適なサブ構造プロパティは、その問題が貪欲アルゴリズムによって解決できるかどうかの鍵となります。

2. バックトラッキングアルゴリズム

バックトラッキング アルゴリズムもアルゴリズム設計におけるアイデアです。問題の解決策を徐々に見つけて構築する戦略です。

バックトラッキング アルゴリズムは、問題に対する可能な解決策から始まります。それが機能しない場合は、問題が解決されるまでバックトラックして別のアクションを選択します。

バックトラッキング アルゴリズムを使用する問題には、次の特性があります。

  • 行列の方向や木のパスなど、パスはたくさんある
  • これらの道の中には行き止まりと人生の道があり、アイデアは質問の要件を満たさない道であり、人生の道は要件を満たしています。
  • 通常、再帰はすべてのパスをシミュレートするために使用されます

一般的な疑似コードは次のとおりです。

  1. 結果 = []
  2. 関数backtrack(path, selectlist):
  3. 終了条件が満たされた場合:
  4. result.add (パス)
  5. 戻る 
  6.  
  7. 選択リスト選択の場合:
  8. 選択する
  9. backtrack(パス、オプションリスト)
  10. 選択を元に戻す

次の 3 つの問題の解決に重点を置きます。

  • パス:つまり、選択されたもの
  • 選択リスト
  • 終了条件

たとえば、古典的なバックトラッキング アルゴリズムは、次のように完全な順列問題を解決するために使用されます。

重複する数字のない配列 nums の場合、すべての可能な順列を返したいとします。この問題を解決するアイデアは次のとおりです。

  • 再帰ですべてのケースをシミュレートする
  • 重複した要素に遭遇した場合はバックトラックする
  • 再帰エンドポイントに到達して戻るすべての状況を収集し、

コードは次のとおりです。

  1. var permute =関数(数値) {
  2. const res = []、パス = [];
  3. バックトラッキング(nums, nums.length, []);
  4. resを返します
  5.      
  6. 関数バックトラッキング(n, k, used) {
  7. パスの長さがkの場合
  8. res.push( Array.from (パス));
  9. 戻る;
  10. }
  11. ( i = 0; i < k; i++ とします) {
  12. if(used[i])継続する;
  13. パスをプッシュします(n[i]);
  14. used[i] = true ; // 同じブランチ
  15. バックトラッキング(n, k, 使用済み);
  16. パスをポップします。
  17. 使用済み[i] = false ;
  18. }
  19. }
  20. };

結論

分割統治法と動的プログラミングについても学習しました。次は貪欲アルゴリズムとバックトラッキング アルゴリズムについて学習します。

分割統治法、動的計画法、貪欲戦略のソリューションは次のとおりです。

これら 3 つに対応する典型的な問題は次のとおりです。

参考文献

https://zh.wikipedia.org/wiki/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95

https://leetcode-cn.com/problems/permutations/solution/dai-ma-sui-xiang-lu-dai-ni-xue-tou-hui-s-mfrp/

https://cloud.tencent.com/developer/article/1767046

<<:  人間の農業の将来は主にロボットに依存することになるのでしょうか?基本的に人間の介入は必要ありません

>>:  DFSアルゴリズムは5つの島の問題を克服する

ブログ    
ブログ    
ブログ    

推薦する

...

...

武器化されたAIとIoT攻撃は最大の技術的脅威となる

1. 「企業が人工知能やモノのインターネットなどの新しいテクノロジーの導入を検討するにつれ、攻撃対象...

AI はどのようにしてよりスマートな建物を作り出すのでしょうか?

[[405913]]センサー、ビッグデータ、人工知能 (AI) を融合したスマート ビルの出現は、...

機械学習の7つのステップ

機械学習の応用は急速に成長しており、医療、電子商取引、銀行業務などのさまざまな分野で不可欠な要素とな...

...

All Research: AIガバナンス市場規模は2027年に13億4,520万米ドルに達する

9月28日、市場調査会社オールリサーチが発表したレポートでは、2027年までに人工知能ガバナンス市場...

...

ネイチャー誌に「LK-99は超伝導体ではない」という記事が掲載された。

長年続いていた室温超伝導の謎が解明されたようだ。昨日、ネイチャー誌は「LK-99は室温超伝導体ではな...

...

ガートナー:2026年までに企業の80%が生成型AIを導入する見込み、これは現在の16倍にあたる

アナリスト会社ガートナーは10月13日、2026年までに企業の80%以上が生成型AIアプリケーション...

香港科技大学のタン・ピン氏のチームが3D生成における重要な問題を突破し、多頭モンスターの出現を防止

生成モデルは画像生成の分野で大きな成功を収めてきましたが、この技術を 3D 分野に拡張するには常に多...

「これまで作られなかった最も重要な機械」アラン・チューリングとチューリングマシン

コンピューティングは、私たちのほとんどが直感的に理解できる馴染みのある概念です。関数 f (x) =...