2017-11-15 4 views
-3

私はアルゴリズムの分析のための2つの質問があり、次の2つの複雑さを決定する方法を知っているしたいと思います:どのようにアルゴリズムの複雑さを解決するには?

まず:

For(int i=2; i<n; i=i*i*i) 
{ 
    //something O(1) 
} 

第二:

n/1 + n/2 + n/3 +...+ n/n 
+1

であるあなたは、複雑になりますどのような自分 – Egl

答えて

1

最初に:

1*1*1 = 1だから私は常に1であり、決して>= nではないので、無限になります。

2番目のアルゴリズムは実際にはアルゴリズムではありませんが、加算はO(n)で実行されます。最初のアルゴリズムの

+0

であなたの試験の質問に答える必要があります'i'が2で始まったら最初の? – AhmadWabbi

+0

intが1から始まっていないのはどうですか?私は2で始まると言うか? – spider15

+0

私は完全にはわかりませんが、 'n ^(1/3)'が間違っていると誰かを訂正してください。 – tschaefermedia

1

iの初期値(@tschaefemediaに述べたように無限ループにつながるのではなく1)2であるとするが。第1の反復において

、私第3の反復で2回目の反復では== 2

、I == 2 * 2 * 2 == 23

、I ==(23 * 23 * (3 * 3)* 2(3 * 3)== 2(3 * 3 * 3)== 2(3 * 3)

第4反復では、 3)反復k + 1での

...

、I == 2(3 * 3 * 3 * ... * 3)== 2(3K)

簡略化のために、反復k-1でiがnに等しくなり、ループが停止すると仮定します。その後:

N == 2(3K)

LOG2(N)== 3^K

LOG3(LOG2(N))== K

したがって、複雑性はOであります(log3(log2(n)))

2番目の質問は複雑な式を与えていると思います。だから、

N/1 + N/2 + N/3 + ... + N/N = N(1 + 1/2 + 1/3 + ... + 1/N)

これは、ハーモニックシリーズであり、それはO()N(ログ)

そうで、全体の複雑さはO(N *ログ(n))を

+0

こんにちは、ありがとう、あなたの答えを..それは非常に有用です..の説明にもう一度お手伝いできますか?(int i = 0、j = 1; i spider15

+0

最初の質問と同じように進めてください。反復k + 1で、iの値は1 + 2 + 3 + ... + kであり、k *(k + 1)/ 2であることが分かります。この繰り返しで停止すると、n == k *(k + 1)/ 2となり、これはおよそk2です。したがって、k == sqrt(n)。複雑さは、O(sqrt(n))である。 – AhmadWabbi

関連する問題