この関数はO(n)かO(log(n))時間の複雑さですか?このインプレース配列反転の時間複雑度はどのくらいですか?
function reverse(array) {
for (var i = 0, j = array.length - 1; i < j; i++, j--) {
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
一見して、入力に対してn/2回の反復を行っているようです。しかし、それについて考えると、実際の下位レベル操作の数は2nに近くなります。ですから、長さn
の文字列を持っている
を扱う場合は、操作(
i++
、j--
)を維持ループは些細であると仮定している一般的な方法であるどちらもありませんn/2も2nもO(log(n))です。 – user2357112まだO(n)です。 (それはnと線形に成長します) –
なぜ回答クレジット – Eric