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

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

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

ブログ    
ブログ    

推薦する

Google Gemini の大きな転換? Stanford Meta Chinese は推論性能が GPT-3.5 よりも優れていることを証明

Gemini の推論能力は本当に GPT-4 よりも弱いのでしょうか?以前、Google の大ヒット...

...

エンドツーエンドの自動運転に向けて、Horizo​​n Robotics が Sparse4D アルゴリズムを正式にオープンソース化

Horizo​​n Roboticsは1月22日、純粋な視覚ベースの自動運転アルゴリズムであるSpa...

自動車業界における 5G の登場は、車両のインターネットと自動運転の普及にどのように役立つのでしょうか?

5G技術は大規模に導入されつつあり、車両ネットワークや自動運転に大きな影響を与えるでしょう。今年2...

...

AIは都市部の地震監視のノイズ問題を解決すると期待されている

人口密度が高く、重要な施設が多数存在する都市では、破壊的な地震が発生すると壊滅的な結果をもたらすこと...

EU諸国の4分の1がAIによるサイバーセキュリティ管理を望んでいる

予想外かもしれませんが、消費者のかなりの部分は、サイバーセキュリティを生身のサイバーセキュリティ専門...

見逃しているかもしれない 3 つの重要な AI トレンド

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

ビッグデータとリアルタイム分析のためのアルゴリズム分類

今日、ビッグデータ技術の発展と進歩により、大量のデータを収集および送信するための新しい、より効率的な...

ChatGPT Civilization Simulator が再びオンラインになりました!クリックひとつで、火山噴火の日の古代都市ポンペイにタイムスリップ

GPT-4のアップデート機能により、AIを使って歴史をシミュレートすることは、単なる「テキストロール...

Amazon Lexについて

Amazon Lex は、音声とテキストを使用してあらゆるアプリケーションに会話型インターフェースを...

無料の Python 機械学習コース パート 3: 多項式回帰

多項式回帰は線形回帰の改良版です。線形回帰を知っていれば、簡単に理解できるでしょう。そうでない場合は...

2024年に最も使用される11のAIテキスト生成ツール

世界は、スーパーヒーローのマントを身につけていない強力な世界的勢力のような人工知能 (AI) が支配...

Tensorflowを使用して畳み込みニューラルネットワークを構築する

1. 畳み込みニューラルネットワーク畳み込みニューラル ネットワーク (CNN) は、人工ニューロン...

マイクロソフトの面接アルゴリズムに関する 4 つの質問

(1)要素が0から65535までの任意の数値であり、同じ値が繰り返し出現しない整数列。 0 は例外で...