この記事はWeChatの公開アカウント「bigsai」から転載したもので、著者はbigsaiです。この記事を転載する場合はbigsai公開アカウントまでご連絡ください。 序文 分割統治アルゴリズムは、一般的に使用される 5 つのアルゴリズム (分割統治アルゴリズム、動的計画法アルゴリズム、貪欲アルゴリズム、バックトラッキング法、分割統治境界法) の 1 つです。多くの人は、日常の学習で分割統治アルゴリズムを知っているだけで、体系的に分割統治アルゴリズムを学習したことがないかもしれません。この記事では、分割統治アルゴリズムをより包括的に理解できるようにします。 分割統治アルゴリズムを学ぶ前に、質問させてください。誰もが子供の頃に貯金箱を持った経験があると思います。親や親戚からお金をもらったら、自分の宝物にそのお金を貯め、時々そのお金を数えていました。しかし、お金の山を扱うのは、データが大きすぎて頭で理解できず、間違いを起こしやすいので難しいかもしれません。お金をいくつかの小さな部分に分割し、それらを合計してお金の合計額を算出してもよいでしょう。 もちろん、各部分の金額がまだ多すぎると思われる場合は、分割して結合することもできます。なぜこんなにたくさんあるのかというと、 それぞれの小さなお金の山を計算する方法は、最大のお金の山を計算する方法と同じです(違いはサイズです) そうすると、大きなお金の山の合計は、実際には小さなお金の山の結果の合計になります。これは実際には一種の分割統治の考え方です。 もちろん、このお金はすべて考え抜かれたものです... 分割統治アルゴリズムの紹介 分割統治アルゴリズムは、分割統治の考え方を使用するアルゴリズムです。分割統治とは何ですか? 分割統治とは、文字通り「分割して統治する」という意味で、複雑な問題を 2 つ以上の同一または類似のサブ問題に分割し、そのサブ問題をさらに小さなサブ問題に分割することを意味します。最後のサブ問題が単純かつ直接的に解決できるまで、分割していき、元の問題の解決策はサブ問題の解決策の組み合わせになります。コンピュータサイエンスにおいて、分割統治法は分割統治の考え方を採用した非常に重要なアルゴリズムです。分割統治法は、ソートアルゴリズム (クイックソート、マージソート)、フーリエ変換 (高速フーリエ変換) など、多くの効率的なアルゴリズムの基礎となります。 親問題をサブ問題に分解し、同じ方法で解決することは再帰の概念と一致しているため、分割統治アルゴリズムは通常、再帰的に実装されます (もちろん、非再帰的な実装もあります)。分割統治アルゴリズムの説明も文字通り理解しやすいです。実際、分割統治にはマージプロセスもあります。
一般的に、分割統治アルゴリズムは本文で 2 つ以上の再帰呼び出しに分解され、サブクラスの問題は一般に分離されています (互いに影響を及ぼしません)。問題が大きすぎて直接解決できないが、小規模であれば簡単に解決でき、分割統治アルゴリズムの適用条件を満たす場合は、分割統治アルゴリズムを使用できます。 では、分割統治アルゴリズムを使用して問題を解決するには、どのような条件 (特性) を満たす必要があるのでしょうか? 1. 元の問題は通常、規模が大きく、直接解決するのは困難ですが、問題をある程度の大きさに縮小すればより簡単に解決できます。 2. 問題は、同じ(類似の)解決方法を持ついくつかの小さなサブ問題に分解できます。さらに、サブ問題に対する解決策は独立しており、相互に影響を与えません。 3. 問題分解のサブ問題をマージすると、問題の解決策が得られます。 分割統治アルゴリズムと再帰の間にはどのような関係があるのか疑問に思うかもしれません。実際、分割統治は、問題を分割、統治、統合するプロセスに焦点を当てた重要なアイデアです。再帰とは、自分自身を呼び出すことで往復のプロセスを形成する方法(ツール)であり、分割統治法では、このような往復のプロセスを複数利用することがあります。 分割統治アルゴリズムの古典的な問題 分割統治アルゴリズムの古典的な問題では、そのアイデアが重要です。実装には主に再帰を使用するため、コード実装はほとんどが非常に単純であり、この記事でもアイデアの説明に重点を置いています。 分割統治アルゴリズムの典型的な問題ですが、私はそれを 2 つのカテゴリに分類します。サブ問題が完全に独立しているものと、サブ問題が完全に独立していないものです。 1. 元の問題に対する答えがサブ問題の結果から完全に推測できる場合、サブ問題は完全に独立しています。 2. サブ問題は完全に独立しているわけではありません。一部の区間問題や区間をまたぐ問題では、分割統治法の結果が区間をまたぐことがあります。問題を検討する際には、これらを注意深く参照する必要があります。 バイナリ検索 バイナリ検索は分割統治法の一例ですが、バイナリ検索には独自の特殊性があります。
通常のバイナリ検索では、完全な区間を 2 つの区間に分割します。2 つの区間で個別に値を検索し、結果を確認する必要があります。ただし、順序付けられた区間では、結果がどの区間にあるかを直接判断できるため、2 つの区間のうちの 1 つだけを計算し、最後まで続行する必要があります。実装方法には再帰的と非再帰的の 2 つがありますが、非再帰的の方が一般的に使用されます。
クイックソート クイックソートも分割統治法の一例です。クイックソートの各ラウンドでは、数字が選択され、この数字より小さい数字は左側に配置され、この数字より大きい数字は右側に配置されます。次に、2つのサブ区間は再帰的な分割統治法によって解決されます。もちろん、クイックソートは分割時に多くの作業を行い、すべての数字が最下層に分割されると、シーケンスの値がソートされた値になります。これは分割統治の現れです。
マージソート(逆順) クイックソートは分割時に多くの作業を行いますが、マージはその逆です。分割の場合、マージは数に応じて均等に分割し、マージの場合は、2 つずつ順番にマージします。これは、2 つの順序付けられたシーケンスに対して O(n) レベルの複雑さで必要な結果が得られるためです。マージソートに基づく逆数の変換も分割統治の考え方によって解決されます。
最大部分列合計 最大部分列合計の問題を解決するには、動的プログラミングを使用できますが、分割統治アルゴリズムを使用して問題を解決することもできます。ただし、最大部分列合計は、部分列合計に長さの問題が関係するため、マージ時に単純なマージではありません。そのため、正しい結果がすべて左端または右端にあるとは限らず、結果が表示される可能性のある領域は次のとおりです。
これはグラフで表すことができます: そのため、具体的に考えると、再帰的に求めることができない真ん中の最大値の文字列の結果を計算し、それを左右と比較する必要があります。 53. 最大部分列の合計は次のコードで実装されています。
最も近い点 最も近いペアは、分割統治の最も成功した応用例の 1 つです。 2 次元の座標軸上には複数の点座標があり、最も近い 2 点間の距離を求める必要があります。直接求める場合、列挙型ブルート フォース法では非常に多くの計算が必要になります。通常、この問題を最適化するために分割統治法を使用します。 計算を直接 2 つの部分に分割すると、最も短い部分が左側にあり、もう 1 つが右側にある場合、問題が発生することが確実にわかります。最適化できます。 具体的な最適化計画では、x または y の次元を考慮し、データを 2 つの領域に分割し、最初に (同じ方法を使用して) 左側と右側の領域でそれぞれ最短のポイント ペアを計算します。次に、2 つの距離のうち短い方に基づいて、左と右にカバーし、カバーした左と右のポイント間の距離を計算し、最小の距離を見つけて、現在の最短距離と比較します。 このように、この 1 つの操作だけで (状況を考慮せずに)、左側の赤い点は右側のほとんどの赤い点との距離計算を回避できることがわかります (時間計算量は O(n2))。実際、左右の区間内で計算を行う際も、分割統治の計算を何度も再帰的に実行します。図に示すように: この方法により、多くの計算を節約できます。 ただし、この分割統治法には、2 次元座標がすべて特定の軸に沿って密集する可能性があるため、効果が明らかでない可能性がある (ポイントがすべて x=2 の近くにある場合、x 分割の効果は小さくなる) という問題があるため、この点に注意してください。 杭州Dianzi 1007はどなたにもお勧めです。エアコンのコードは次のとおりです。
結論 分割統治アルゴリズムについて私が言いたいことはこれだけです。分割統治アルゴリズムで重要なのは、そのアイデアを理解することだからです。また、大きな整数の乗算、シュトラッセン行列の乗算、チェス盤のカバー、線形時間選択、ラウンドロビンスケジュール、ハノイの塔など、分割統治アルゴリズムによって解決される典型的な問題もいくつかあります。分割統治アルゴリズムのアイデアと原理を自分で研究することができます。 オリジナルリンク: https://mp.weixin.qq.com/s/jHiBOjfyMvuvGzSecsdNPw |
翻訳者 |陳俊レビュー | Chonglou今日、人工知能ツール (AI) は非常に強力です。開発チ...
遅れて気づいて申し訳ありません。この記事を読んでいる友人の中には、すでにこのプラグインをインストール...
[[248597]]人工知能が注目されています。技術革新は経済成長の根本的な原動力です。これらの技術...
ビジネスにおいては、人工知能のリスクと限界を考慮する必要があります。 AI のリスクと限界には、プラ...
翻訳者 |ブガッティレビュー | Chonglou日常のオンラインのやり取りの中でチャットボットを目...
AIビデオトラックのPika 1.0は最近非常に人気があります。2人の中国人創業者のチームが半年で...
[51CTO.comよりオリジナル記事] 6月21日、WOT2019グローバル人工知能技術サミット...
物流と輸送は世界貿易とサプライチェーン管理にとって極めて重要であり、テクノロジーの急速な発展により、...
人類が人工知能の開発に熱心に取り組み始めて以来、著名な科学者ホーキング博士をはじめ、疑問や反対の声が...
1. データ構造の保存方法データ構造を保存する方法は、配列 (順次ストレージ) とリンク リスト (...