public int Loop(int[] array1) {
int result = 0;
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1.length; j++) {
for (int k = 1; k < array1.length; k = k * 2) {
result += j * j * array1[k] + array1[i] + array1[j];
}
}
}
return result;
}
私はここで算術演算の数を数える複雑さ関数を見つけようとしています。私は複雑さのクラスがO(n^3)であることを知っていますが、私はステップを数えるのに苦労しています。forループをネストした3のBig O?
これまで私が推論してきたのは、算術演算の数を8と数えるため、複雑さ関数はちょうど8n^3になりますか?
正しい方向のガイダンスは大変ありがとうございます。ありがとうございます!
複雑さは 'O(n^3)'ですか?つまり、O(n^3)と同じように、O(n!)に入っていますが、それは厳密な境界ではありません。 –
Hm私がクラスで教えた方法は、ステップ数(算術演算)を数えて、各演算を何回実行する必要があるかを数えることでした。それでO(n^3)を思いついたのです。私は確かに間違っているかもしれません。私はまた、2つのネストされたループが、これまでにやったことから、通常はO(n^2)であったという論理に従っています。 – ellaaur
一番内側の 'ForUpdate'で' k = k * 2'について慎重に考えてください。 –