web-dev-qa-db-ja.com

マージソートの分割ステップはどのように一定の時間計算量を持っていますか?

マージソートアルゴリズムの時間の複雑さを計算している間、私は非常に混乱しています。特に分割ステップについて。除算ステップでは、「n」の中点、つまり「q = n/2」を計算する必要があります。

一定の時間がかかる方法。除算が初歩的な操作であり、時間が非常に短いと想定する場合は、除算にかかる時間も含める必要があります。

非常に長い時間を分割する必要がある場合は、時間の複雑さを計算する際に考慮する必要があります。私によると、除算の数は「n」に依存します。つまり、中点の計算は配列サイズ「n」に依存します。

例えば、

n = 2の場合

必要な除算の数= 1

n = 4の場合

必要な除算の数= 3

n = 8の場合

必要な分割数= 7

n = 16の場合

必要な除算の数= 15など...

私によると、

再帰的に定義する場合:-

「n」に必要な除算の数(入力配列の長さ= n)<= 1 +(n-1)に必要な除算の数。 {n = 0の場合除算の数= 0 n = 1の場合除算の数= 0}

または........。

「n」に必要な除算の数(入力配列の長さ= n)<=(0からn-1までの2 ^ iの合計)-(2 ^ n)

したがって、「n」に依存します。では、どうすればそれを一定の時間と見なすことができますか????

1
Bhaskar

この明らかな不一致を理解するために時間を割いていただき、ありがとうございます。分割を考慮する必要があること、そしてこのアルゴリズムでは_~n_分割があることは正しいです。一般に、適度に小さい数(長い数に収まる数)を除算する場合、その個々の除算演算は実質的にO(1)としてカウントされるため、O(n)除算があります。

あなたが欠けているのは、それが本当に重要ではないということです。なぜなら、私たちはすでにO(n)操作をミックスに持っているからです:マージ。この特定のケースでは、分割を追加しても全体的な複雑さがO(n log n)から変更されないのはそのためです。除算を考慮すると、それはO(2n log n)に変更され、定数が因数分解されます。

1
Karl Bielefeldt

除算が基本的な操作であり、時間が非常に短いと仮定する場合、除算にかかる時間も含める必要があります

Big Oは、実際には1回の操作にかかる時間を測定しません。むしろ、単一操作の数を増やすと、アルゴリズムがどれだけ適切にスケーリングするかを測定します。

このグラフを考えてみましょう:

enter image description here

水平軸はnを表します。縦軸は合計計算時間を表します。 nの値が小さい場合、O(n²)およびO(n³)アルゴリズムは実際にはO(1)対応物。これは、この架空の例では、O(1)アルゴリズムの単一操作は、O(n²)の単一操作よりもコストがかかるためです。 O(n³)アルゴリズム。

「分割ステップには一定の時間がかかる」というのは当たり前だと思いますが、一定の時間である理由は、1回の計算だからです。

2
Robert Harvey

この時点で、著者が言うのは、single分割ステップのコストはO(1)であるということだけです。著者は、3つの分割ステップまたは1000000の分割ステップを実行することについて主張していません。

0
Rufflewind

compareまでの回数は、ほとんどのソートアルゴリズムの時間計算量の理由です。どの 分割統治アルゴリズム でも、divideの最大回数はn-1です。 これはnlog(n)よりも小さいため、無視できます。

0
Leorge Takeuchi