私はアルゴリズムの分析のための2つの質問があり、次の2つの複雑さを決定する方法を知っているしたいと思います:どのようにアルゴリズムの複雑さを解決するには?
まず:
For(int i=2; i<n; i=i*i*i)
{
//something O(1)
}
第二:
n/1 + n/2 + n/3 +...+ n/n
私はアルゴリズムの分析のための2つの質問があり、次の2つの複雑さを決定する方法を知っているしたいと思います:どのようにアルゴリズムの複雑さを解決するには?
まず:
For(int i=2; i<n; i=i*i*i)
{
//something O(1)
}
第二:
n/1 + n/2 + n/3 +...+ n/n
最初に:
1*1*1 = 1
だから私は常に1であり、決して>= n
ではないので、無限になります。
2番目のアルゴリズムは実際にはアルゴリズムではありませんが、加算はO(n)
で実行されます。最初のアルゴリズムの
であなたの試験の質問に答える必要があります'i'が2で始まったら最初の? – AhmadWabbi
intが1から始まっていないのはどうですか?私は2で始まると言うか? – spider15
私は完全にはわかりませんが、 'n ^(1/3)'が間違っていると誰かを訂正してください。 – tschaefermedia
:
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))を
こんにちは、ありがとう、あなたの答えを..それは非常に有用です..の説明にもう一度お手伝いできますか?(int i = 0、j = 1; i
最初の質問と同じように進めてください。反復k + 1で、iの値は1 + 2 + 3 + ... + kであり、k *(k + 1)/ 2であることが分かります。この繰り返しで停止すると、n == k *(k + 1)/ 2となり、これはおよそk2です。したがって、k == sqrt(n)。複雑さは、O(sqrt(n))である。 – AhmadWabbi
であるあなたは、複雑になりますどのような自分 – Egl