バックトラッキングアルゴリズムの理論的基礎を一緒に復習しましょう。覚えていますか?

バックトラッキングアルゴリズムの理論的基礎を一緒に復習しましょう。覚えていますか?

[[423516]]

バックトラッキング アルゴリズムは、実は非常にわかりにくく、理解するのが困難です。バックトラッキング アルゴリズムを学ぶには、私の B ステーション ビデオを見ることをお勧めします。このビデオを見ると、バックトラッキング アルゴリズムに関する疑問がすべて解消されると思います。

バックトラッキングとは何か

バックトラッキングは、検索方法の 1 つであるバックトラッキング検索とも呼ばれます。

バイナリ ツリー シリーズでは、バックトラッキングについて何度も説明しました。たとえば、バイナリ ツリーでは再帰が使用されていると考えていましたが、実際にはバックトラッキングも含まれていました。

バックトラックは再帰の副産物であり、再帰がある限りバックトラックは発生します。

したがって、以下の説明では、バックトラック関数、つまり再帰関数とは関数のことを指します。

バックトラッキングの効率

バックトラッキング法のパフォーマンスはどうでしょうか? ここで明確にしておきましょう。バックトラッキング法は難しくて理解しにくいですが、効率的なアルゴリズムではありません。

バックトラッキングの本質は、網羅的な列挙、つまりすべての可能性を列挙し、必要な答えを選択することです。バックトラッキングをより効率的にしたい場合は、いくつかのプルーニング操作を追加できますが、網羅的な列挙というバックトラッキングの本質は変わりません。

では、効率的でないのになぜバックトラッキングを使用するのでしょうか?

選択の余地がないので、いくつかの問題を力ずくで探し出し、せいぜいそれらを刈り込むだけでも十分ですが、これ以上に効率的な解決策はありません。

この時点で、誰もが興味を持っているはずです。これらはどのような質問なのでしょうか。あまりにもすごいので、力ずくで検索するしかありません。

バックトラックで解決した問題

バックトラッキングは一般に次の問題を解決できます。

  • 組み合わせ問題: 特定の規則に従って N 個の数値から k 個の数値の集合を見つける
  • 切断問題: 特定の規則に従って弦を切断する方法はいくつかあります
  • サブセット問題: N 個の数値の集合のうち、要件を満たすサブセットはいくつありますか?
  • 配置問題: N 個の数字を特定の規則に従って配置します。配置方法は何通りありますか?
  • チェス盤の問題: N クイーン、数独の解き方など

これらをご覧になれば、すべての問題が単純ではないことがお分かりいただけると思います。

さらに、組み合わせと順列を区別できない生徒もいるかもしれません。

組み合わせでは要素の順序は強調されませんが、配置では要素の順序は強調されます。

たとえば、{1, 2} と {2, 1} は順序が重視されていないため、組み合わせると 1 つのセットになります。ただし、並べると、{1, 2} と {2, 1} は 2 つのセットになります。

組み合わせは無秩序であり、配置は順序があるということを覚えておけば、それで十分です。

バックトラッキングを理解する方法

バックトラッキングによって解決される問題は、ツリー構造に抽象化できます。そうです、バックトラッキングによって解決されるすべての問題は、ツリー構造に抽象化できるのです。

バックトラッキング法は、セット内のサブセットを再帰的に検索する問題を解決するため、セットのサイズがツリーの幅を構成し、再帰の深さがツリーの深さを構成します。

再帰には終了条件が必要なので、高さが制限されたツリー (N 項ツリー) にする必要があります。

初心者はこの部分をあまり理解できないかもしれません。 後ほどバックトラッキングアルゴリズムで解決するすべての問題で、この点を強調し、図を描いて対応する例を示します。 今は印象を持っていただければ十分です。

バックトラッキングテンプレート

以下は、Carl がまとめたバックトラッキング アルゴリズムのテンプレートです。

二分木の再帰について説明した際に、再帰三部作について説明しました。ここでは、バックトラッキング三部作について説明します。

  • バックトラッキング関数テンプレートの戻り値とパラメータ

バックトラッキング アルゴリズムでは、関数に backtracking という名前を付けるのが私の習慣ですが、好きな名前を付けることができます。

バックトラッキング アルゴリズムの関数の戻り値は通常 void です。

パラメータを見てみましょう。バックトラッキング アルゴリズムに必要なパラメータは、バイナリ ツリー再帰を使用する場合ほど一度に簡単に決定できないため、通常は最初にロジックを記述し、必要に応じてパラメータを入力します。

しかし、後ほどバックトラッキングの質問の説明をするときに、誰もが理解しやすいように、最初にパラメータを決定するお手伝いをします。

バックトラッキング関数の疑似コードは次のとおりです。

  1. void バックトラック(パラメータ)
  • バックトラック関数の終了条件

二分木の再帰を説明すると、木構造であるため、木構造を走査するための終了条件が存在する必要があることがわかります。

したがって、バックトラックにも終了条件があります。

終了条件に達すると、ツリーで確認できます。一般的に、リーフ ノードが見つかると、条件を満たす答えが見つかります。この答えが保存され、このレベルの再帰が終了します。

したがって、バックトラック関数の終了条件の疑似コードは次のようになります。

  1. if (終了条件) {
  2. 結果を保存します。
  3. 戻る;
  4. }
  • バックトラック検索のトラバーサルプロセス

上で述べたように、バックトラック法は一般的にセット内の再帰検索です。セットのサイズがツリーの幅を構成し、再帰の深さがツリーの深さを構成します。

図に示すように:

バックトラッキングアルゴリズムの理論的基礎

図では、セットのサイズを意図的に子供の数と同じにしていることに注意してください。

バックトラッキング関数のトラバーサル プロセスの疑似コードは次のとおりです。

  1. for (select: 現在のレイヤーセット内の要素 (ツリー内のノードの子の数はセットのサイズです)) {
  2. 処理ノード。
  3. backtracking(パス, 選択リスト); // 再帰
  4. バックトラック、処理結果の取り消し
  5. }

for ループはコレクション間隔をトラバースします。for ループはノードが持つ子の数と同じ回数だけ実行されることがわかります。

バックトラックはここで自分自身を呼び出して再帰を実現します。

図からわかるように、for ループは水平方向のトラバーサルとして理解でき、バックトラック (再帰) は垂直方向のトラバーサルであり、ツリーのトラバーサルを完了します。一般的に言えば、リーフ ノードの検索は、見つけられる結果の 1 つです。

プロセスを分析した後、バックトラッキング アルゴリズム テンプレート フレームワークは次のようになります。

  1. void バックトラッキング(パラメータ) {
  2. if (終了条件) {
  3. 結果を保存します。
  4. 戻る;
  5. }
  6.  
  7. for (select: 現在のレイヤーセット内の要素 (ツリー内のノードの子の数はセットのサイズです)) {
  8. 処理ノード。
  9. backtracking(パス, 選択リスト); // 再帰
  10. バックトラック、処理結果の取り消し
  11. }
  12. }

このテンプレートは非常に重要です。後ほどバックトラッキングの質問でこのテンプレートを使用します。

バックトラッキング アルゴリズムを学んだことがない友達は、これを見ると少し混乱するかもしれません。後で具体的な問題について説明すると分かりやすくなります。バックトラッキング問題をすでに解いた友達も、これを見ると同じように感じるはずです。

要約する

この記事では、バックトラッキング アルゴリズムとは何かを説明し、バックトラッキングと再帰が互いに補完し合うことを学びました。

次に、バックトラッキング法の効率性について説明しました。バックトラッキング法は実際には総当たり検索であり、効率的なアルゴリズムではありません。

次に、バックトラックで解決できる問題の種類をいくつか挙げます。それぞれの種類の問題は単純ではないことがわかります。

最後に、バックトラッキング法で解決される問題をツリー構造(N 項ツリー)に抽象化する方法を説明し、バックトラッキング法のテンプレートを示しました。

<<:  専門家の洞察: 5G とロボットの未来を実現する

>>:  張宏江:AIは開発を支配する次の法則になるかもしれない

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

人工知能は非常に人気があります。PULSE は低品質のモザイク画像を保存し、数秒で高解像度の画像に変換できます。

[51CTO.com オリジナル記事] モザイクとはどういう意味ですか?従来のモザイクは、主に映画...

中国、米国、欧州における人工知能開発の現状の比較分析

1. 背景と比較方法[[393581]]人工知能は、経済、安全保障、社会の発展を促進する基礎技術です...

Transformerが3Dモデリングに革命を起こし、MeshGPT生成結果がプロのモデラーやネットユーザーに衝撃を与える:革命的なアイデア

コンピュータグラフィックスでは、「三角メッシュ」は 3D 幾何学的オブジェクトの主な表現であり、ゲー...

...

...

量子機械学習変分量子分類器 (VQC) の紹介

変分量子分類器 (VQC) は、量子コンピューティング技術を使用して分類タスクを実行する機械学習アル...

ロボットによるモノのインターネットは製造業の未来となるのでしょうか?

ロボットによるモノのインターネットは、産業用ロボットと IoT センサーという 2 つの貴重なテクノ...

人工知能が生き残るために頼りにしているビッグデータは、独占企業の手に渡ると本当に恐ろしいものになる

わずか5年で、人工知能は急速に発展しました。最近、GPT-3が再び白熱した議論を巻き起こしています。...

比較分析に基づく人工知能技術の革新の道筋に関する研究

1. はじめに人工知能(AI)技術は1950年代に誕生し、現在では最も最先端かつ最も普及しているハイ...

2030 年までにどの AI アプリケーションが普及するでしょうか?

何十年もの間、人工知能はSFの中で邪悪な力として描かれてきました。アーサー・C・クラークの『宇宙の旅...

ディープラーニング プロジェクトをゼロから構築するにはどうすればよいでしょうか?詳細なチュートリアルはこちら

ディープラーニングに関する理論コースを受講した後、多くの人が独自のプロジェクトを構築してみることに興...

...

スタンフォード大学の「バーチャルタウン」がオープンソース化:25人のAIエージェントが「ウエストワールド」に登場

「ウエストワールド」を見たことがある友人は、このドラマの舞台が未来の世界、巨大なハイテクな大人向けテ...

2018 年に人工知能を変える 5 つのビッグデータ トレンド

ビッグデータや人工知能の広範な導入を通じて、これらの新興技術の大きな影響が世界経済に浸透するにつれ、...

人工知能の台頭が懸念を引き起こしています。私たちはどう対応すべきでしょうか?

AlphaGoがイ・セドルに勝利したことで世界は人工知能に再び親しむようになったが、アップグレード...