バックトラッキング アルゴリズムは、実は非常にわかりにくく、理解するのが困難です。バックトラッキング アルゴリズムを学ぶには、私の B ステーション ビデオを見ることをお勧めします。このビデオを見ると、バックトラッキング アルゴリズムに関する疑問がすべて解消されると思います。 バックトラッキングとは何かバックトラッキングは、検索方法の 1 つであるバックトラッキング検索とも呼ばれます。 バイナリ ツリー シリーズでは、バックトラッキングについて何度も説明しました。たとえば、バイナリ ツリーでは再帰が使用されていると考えていましたが、実際にはバックトラッキングも含まれていました。 バックトラックは再帰の副産物であり、再帰がある限りバックトラックは発生します。 したがって、以下の説明では、バックトラック関数、つまり再帰関数とは関数のことを指します。 バックトラッキングの効率バックトラッキング法のパフォーマンスはどうでしょうか? ここで明確にしておきましょう。バックトラッキング法は難しくて理解しにくいですが、効率的なアルゴリズムではありません。 バックトラッキングの本質は、網羅的な列挙、つまりすべての可能性を列挙し、必要な答えを選択することです。バックトラッキングをより効率的にしたい場合は、いくつかのプルーニング操作を追加できますが、網羅的な列挙というバックトラッキングの本質は変わりません。 では、効率的でないのになぜバックトラッキングを使用するのでしょうか? 選択の余地がないので、いくつかの問題を力ずくで探し出し、せいぜいそれらを刈り込むだけでも十分ですが、これ以上に効率的な解決策はありません。 この時点で、誰もが興味を持っているはずです。これらはどのような質問なのでしょうか。あまりにもすごいので、力ずくで検索するしかありません。 バックトラックで解決した問題バックトラッキングは一般に次の問題を解決できます。
これらをご覧になれば、すべての問題が単純ではないことがお分かりいただけると思います。 さらに、組み合わせと順列を区別できない生徒もいるかもしれません。 組み合わせでは要素の順序は強調されませんが、配置では要素の順序は強調されます。 たとえば、{1, 2} と {2, 1} は順序が重視されていないため、組み合わせると 1 つのセットになります。ただし、並べると、{1, 2} と {2, 1} は 2 つのセットになります。 組み合わせは無秩序であり、配置は順序があるということを覚えておけば、それで十分です。 バックトラッキングを理解する方法バックトラッキングによって解決される問題は、ツリー構造に抽象化できます。そうです、バックトラッキングによって解決されるすべての問題は、ツリー構造に抽象化できるのです。 バックトラッキング法は、セット内のサブセットを再帰的に検索する問題を解決するため、セットのサイズがツリーの幅を構成し、再帰の深さがツリーの深さを構成します。 再帰には終了条件が必要なので、高さが制限されたツリー (N 項ツリー) にする必要があります。 初心者はこの部分をあまり理解できないかもしれません。 後ほどバックトラッキングアルゴリズムで解決するすべての問題で、この点を強調し、図を描いて対応する例を示します。 今は印象を持っていただければ十分です。 バックトラッキングテンプレート以下は、Carl がまとめたバックトラッキング アルゴリズムのテンプレートです。 二分木の再帰について説明した際に、再帰三部作について説明しました。ここでは、バックトラッキング三部作について説明します。
バックトラッキング アルゴリズムでは、関数に backtracking という名前を付けるのが私の習慣ですが、好きな名前を付けることができます。 バックトラッキング アルゴリズムの関数の戻り値は通常 void です。 パラメータを見てみましょう。バックトラッキング アルゴリズムに必要なパラメータは、バイナリ ツリー再帰を使用する場合ほど一度に簡単に決定できないため、通常は最初にロジックを記述し、必要に応じてパラメータを入力します。 しかし、後ほどバックトラッキングの質問の説明をするときに、誰もが理解しやすいように、最初にパラメータを決定するお手伝いをします。 バックトラッキング関数の疑似コードは次のとおりです。
二分木の再帰を説明すると、木構造であるため、木構造を走査するための終了条件が存在する必要があることがわかります。 したがって、バックトラックにも終了条件があります。 終了条件に達すると、ツリーで確認できます。一般的に、リーフ ノードが見つかると、条件を満たす答えが見つかります。この答えが保存され、このレベルの再帰が終了します。 したがって、バックトラック関数の終了条件の疑似コードは次のようになります。
上で述べたように、バックトラック法は一般的にセット内の再帰検索です。セットのサイズがツリーの幅を構成し、再帰の深さがツリーの深さを構成します。 図に示すように: バックトラッキングアルゴリズムの理論的基礎 図では、セットのサイズを意図的に子供の数と同じにしていることに注意してください。 バックトラッキング関数のトラバーサル プロセスの疑似コードは次のとおりです。
for ループはコレクション間隔をトラバースします。for ループはノードが持つ子の数と同じ回数だけ実行されることがわかります。 バックトラックはここで自分自身を呼び出して再帰を実現します。 図からわかるように、for ループは水平方向のトラバーサルとして理解でき、バックトラック (再帰) は垂直方向のトラバーサルであり、ツリーのトラバーサルを完了します。一般的に言えば、リーフ ノードの検索は、見つけられる結果の 1 つです。 プロセスを分析した後、バックトラッキング アルゴリズム テンプレート フレームワークは次のようになります。
このテンプレートは非常に重要です。後ほどバックトラッキングの質問でこのテンプレートを使用します。 バックトラッキング アルゴリズムを学んだことがない友達は、これを見ると少し混乱するかもしれません。後で具体的な問題について説明すると分かりやすくなります。バックトラッキング問題をすでに解いた友達も、これを見ると同じように感じるはずです。 要約するこの記事では、バックトラッキング アルゴリズムとは何かを説明し、バックトラッキングと再帰が互いに補完し合うことを学びました。 次に、バックトラッキング法の効率性について説明しました。バックトラッキング法は実際には総当たり検索であり、効率的なアルゴリズムではありません。 次に、バックトラックで解決できる問題の種類をいくつか挙げます。それぞれの種類の問題は単純ではないことがわかります。 最後に、バックトラッキング法で解決される問題をツリー構造(N 項ツリー)に抽象化する方法を説明し、バックトラッキング法のテンプレートを示しました。 |
>>: 張宏江:AIは開発を支配する次の法則になるかもしれない
「中国の改革開放40年はIT産業の爆発的な成長をもたらしたが、ハイエンドチップは常に輸入に依存してき...
最も徹底したオープンソース モデルがここにあります - 130 億のパラメーター、申請なしで商用利用...
ビジネスが今やデータ主導型になっていることは誰もが知っています。データ収集の増加に伴い、分析はビジネ...
近年、人工知能などの新世代情報技術や5Gなどの新世代通信技術の急速な発展に伴い、あらゆる分野で科学技...
いくつかの指標によれば、生成的敵対的ネットワーク (GAN) の研究は過去 2 年間で大きな進歩を遂...
最近、浙江省の高温が話題になっています。継続的な高温と干ばつの悪影響を緩和するために、浙江省の多く...
先日の中国国際輸入博覧会では、多くの現実的な人工知能製品が展示され、AIに代表される新技術が生活の細...
あなたはアルゴリズムを信じますか?答えが何であれ、私たちの生活はアルゴリズムによって完全に変わりまし...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
Googleは木曜日に創立15周年を迎えた。これを記念して、同社は同日、2010年以来最大の検索エン...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
新型コロナウイルスの世界的大流行が続く中、従業員にリモートワークを奨励する企業が増えています。従来の...
Uber や Netflix などの企業でプログラミング、コーディング、ソフトウェア開発の職に応募す...