次の問題があります。
次のコードでは、理由とともに、関数の時間計算量を示します。
同じタスクを実行するが、時間の複雑さが桁違いに改善される関数を作成します。(時間または空間の) 複雑さが大きい関数は評価されません。
コード:
int something(int[] a) {
for (int i = 0; i < n; i++)
if (a[i] % 2 == 0) {
temp = a[i];
for(int j = i; j > 0; j--)
a[j] = a[j-1];
a[0] = temp;
}
}
私はtemp = a[i]、最悪の場合の代入は の時間で行わnれるため、 の時間複雑度nがそれに割り当てられ、a[j] = a[j-1]実行n(n+1)/2時間であるため、 の時間複雑度の値がそれに割り当てられ、それらを合計すると の時間複雑度が返され、を削除すると考えています定数はと の複雑さにつながります。(n2+n)/2n+0.5n2+0.5n2n+n2n2
桁違いの改善の場合:
int something(int[] a) {
String answer = "";
for (int i = 0; i < n; i++) {
if (a[i] % 2 == 0) answer = a[i] + answer;
else answer = answer + a[i];
}
for (int i = 0; i < n; i++)
a[i] = answer.charAt(i);
}
最初の for ループ内のコードはn回実行され、2 番目の for ループn時間では、合計すると の時間複雑度の数値が得られ2nます。
これは正しいです?それとも私は何か間違ったことをしていますか?