私のアルゴリズムとデータ構造クラスでは、最初のdivide-and-conquer algorithm
すなわちmerge sort
が導入されました。
課題のアルゴリズムを実装しているときに、いくつかの疑問が浮かびました。
分割統治パラダイムを使用して実装されたアルゴリズムには、O(nlogn)の時間の複雑さがありますか?
アプローチの再帰部分には、O(n ^ 2)で実行されるアルゴリズムをO(nlogn)に凝縮する力があるのでしょうか?
そもそもそのようなアルゴリズムをO(nlogn)で実行するのはなぜですか?
(3)については、これは再帰ツリーと再帰の可能な数に関係があると思います。誰かがおそらくO(nlogn)で実行される単純な分割統治アルゴリズムを使用して、複雑度が実際にどのように計算されるかを示すことができますか?
乾杯、アンドリュー
あなたの質問に対するすべての答えは マスター定理 から来るかもしれないと思いますほとんどすべての分割統治ソリューションの複雑さは何ですか持っている、そしてはい、それは再帰ツリーですべてを行わなければなりません、パラメーターで遊ぶことによって、いくつかの分割統治ソリューションはO(nlogn)実際にはそこにはないでしょう O(n)複雑性 を持つ分割統治アルゴリズムです)。
質問2に関しては、常に可能であるとは限りません。実際には、O(n ^ 2)より速く解決することが不可能であると考えられる問題がいくつかあります。問題の性質によって異なります。
O(nlogn)で実行されるアルゴリズムの例であり、非常にシンプルで明確で教育的なランタイム分析があると思います MergeSort 。次の図から把握できます。
したがって、再帰的な各ステップの入力は2つの部分に分割され、征服部分はO(n)をとるため、ツリーの各レベルのコストはO(n)であり、注意が必要な部分は、再帰レベルの数(ツリーの高さ)はlognです。それは多かれ少なかれ単純です。したがって、各ステップで、入力をそれぞれn/2要素の2つの部分に分割し、一定のサイズの入力が得られるまで再帰的に繰り返します。したがって、最初のレベルでは、n/2を除算し、次のn/4、次にn/8を除算して、ツリーのリーフとなる最後の再帰ステップである一定サイズの入力に到達します。
したがって、i番目の再帰ステップでn/2 ^ iを除算するので、最後のステップでiの値を見つけます。 n/2 ^ i = O(1)が必要です。これは、定数cに対して2 ^ i = cnのときに達成されるため、両側から2を底とする対数を取り、i = clognを取得します。したがって、最後の再帰ステップは最初のステップであり、したがって、ツリーの高さは最初のステップになります。
したがって、MergeSortの合計コストは、最終的な再帰(ツリー)レベルごとにcnとなり、O(nlogn)複雑さを与えます。
一般に、再帰ステップがO(nlogn)複雑であり、かつyoである限り、アルゴリズムはO(n)複雑になると確信できます。パーツがnの線形分数で合計がnである場合、サイズn/b、またはさらに一般的なbの問題に分割します。別の状況では、別のランタイムになる可能性が非常に高くなります。
質問2に戻ると、QuickSortの場合、平均ランダムケースがニースパーティションを実現するため、O(n ^ 2)から\ Theta(nlogn)に正確に到達する可能性がありますが、ランタイム分析はそれよりもさらに複雑です。
いいえ、分割統治はO(nlogn)パフォーマンスを保証するものではありません。すべての再帰で問題がどのように単純化されるかに依存します。
マージソートアルゴリズムでは、元の問題は2つの部分に分けられます。次に、O(n)演算が結果に対して実行されます。そこからO(n...)が取得されます。
2つのサブ操作のそれぞれに、元のサイズの半分である独自のn
があります。再帰するたびに、問題を再び半分に分割します。つまり、再帰の数はlog2(n)になります。これがO(...logn)の由来です。
分割統治パラダイムを使用して実装されたアルゴリズムには、O(nlogn)の時間の複雑さがありますか?
平均すると、QuicksortとMergesortの時間の複雑さはO(n log(n))ですが、必ずしもこのようになっているとは限りません。 Big Oチートシート
アプローチの再帰部分には、O(n ^ 2)からO(nlogn)のように実行されるアルゴリズムを凝縮する力があるのでしょうか?
目に見える以上のものがあります。それは、再帰呼び出しごとの入力に関連する操作の数など、他のものに依存します。
私はこれを強くお勧めします ビデオ MergeSortがO(n log(n))である理由を見ることができます。
そのようなアルゴリズムを最初にO(nlogn)で実行する理由は何ですか。
繰り返しますが、これは入力のサイズに関連してアルゴリズムが費やす時間の指標であり、アルゴリズムの時間の複雑度がO(n log(n))であると言っても、アルゴリズムが実装されている場合、入力が大幅に増加し始めると、使用される時間は直接比例して増加するのではなく、より多くの時間がかかります。
分割統治パラダイムを使用して実装されたアルゴリズムは、O(nlogn)の時間の複雑さを持っていますか?
いいえ、分割統治の一般的な式は次のとおりです。
2は、各再帰呼び出し内の操作の数です は、サブ問題で分割するための再帰呼び出しです は、征服のための線形操作数です
そのようなアルゴリズムを最初に実行するものO(nlogn)?
対数線形時間の良い例は、マージソートアルゴリズムですm:
それは、アプローチの再帰部分がO(n ^ 2)からO(nlogn)のように実行されるアルゴリズムを凝縮する力を持っていることですか?
マスター定理は、分割統治アルゴリズムの実行時間を決定するために使用されます
If繰り返しはこの形式です
次に
例
a = 2
b = 4
d = 1/2
2 = 4 ^ 1/2ケース2が適用されるため