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

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

[[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つの島の問題を克服する

ブログ    
ブログ    

推薦する

次世代言語モデルパラダイム LAM が登場します! AutoGPTモデルがLLMを席巻、計画、メモリ、ツールの3つの主要コンポーネントの包括的なレビュー

ChatGPT によって開始された AI の波は私たちを人工知能の時代へと導き、言語モデルは日常生活...

...

このトレンドは止められない!すべてのデータ サイエンティストが知っておくべき 5 つのグラフ アルゴリズム

すべてがつながっている世界では、ユーザーは独立した個人ではなく、何らかの形で互いにつながっています。...

...

2 ステップで 25 フレームの高品質アニメーションを生成 (SVD の 8% として計算) | オンラインでプレイ可能

消費されるコンピューティング リソースは、従来の Stable Video Diffusion (S...

継続的な冷却を心配する必要はありません。ドローンが電力網を保護して暖かさを提供します

秋の雨が降るたびに寒さがやってきます。今年の秋は例年より遅く訪れましたが、寒さも増しています。気温の...

人工知能技術は将来のネットワークセキュリティの起爆点と原動力となるかもしれない

Markets and Marketsの人工知能サイバーセキュリティ予測レポートによると、AIサイバ...

Kingsoft WPS Office 2019 正式リリース: Word、Excel、PPT を 1 つのソフトウェアで操作

7月3日、キングソフトは北京オリンピックタワーで「シンプル・クリエイティブ・シンプルではない」をテー...

生成型人工知能が経済と社会に与える影響

生成アルゴリズム、事前トレーニング済みモデル、マルチモーダルなどの技術の累積的な統合と反復を経て、人...

CMU と ETH が画期的な成果を達成: 敏捷性が最大限に高められたロボット犬は、スピードと安全性を兼ね備え、超高速で障害物を乗り越えることができます。

高速ロボット動作の分野では、速度と安全性の両立が常に大きな課題となっています。しかし今、カーネギーメ...

なぜ人間は自分たちよりも賢い人工知能を作り出すのでしょうか?舞台裏では複雑なネットワークサポートが行われている

人間が自分よりも賢いものを創造できる理由について考えたことがありますか?あなたは、人工知能というこの...

マスク氏とクック氏は秘密協定を結んだのか?アップルは「アップル税」でテスラに数百万ドルの節約をもたらす

ビッグデータダイジェスト制作著者: カレブ周知のとおり、Apple の App Store のポリシ...

機械学習とAIを活用してAPIベースのセキュリティソリューションを開発

[[248484]] [51CTO.com クイック翻訳] アプリケーション セキュリティの脅威の背...

人工知能を導入できるいくつかのアプリケーション

人工知能は長年にわたって世界を支配しており、さまざまな分野における主要な問題が AI を使用して解決...