私の教授は、入力の長さを半分にする操作にはO(log(n))の複雑さが経験則だと教えてくれました。なぜO(sqrt(n))ではないのですか、両方とも同等ではありませんか?
それらは同等ではありません:sqrt(N)はlog2(N)。定数はありませんCなので、Nのすべての値に対してsqrt(N)<C.log(N)になります。 =ある最小値より大きい。
これを取得する簡単な方法は、log2(N)はNの(2進)桁数に近い値になりますが、sqrt(N)はそれ自身の数になりますNの桁数の半分。または、平等でそれを述べるには:
- ログ2(N 2log2(sqrt(N)))==
したがって、sqrt(N)の対数(!)を取得して、log2(N)。
たとえば、11桁の2進数の場合、0b10000000000(= 210)、平方根は0b100000ですが、対数は10のみです。
natural logarithm
(そうでなければ定数を掛けるだけ)と仮定すると、
lim {n->inf} log n / sqrt(n) = (inf / inf)
= lim {n->inf} 1/n / 1/(2*sqrt(n)) (by L'Hospital)
= lim {n->inf} 2*sqrt(n)/n
= lim {n->inf} 2/sqrt(n)
= 0 < inf
O(.)
の代替定義については https://en.wikipedia.org/wiki/Big_O_notation を参照してください。これにより、上記からlog n = O(sqrt(n))
と言うことができます。
また、以下の関数の成長を比較してください。log n
は、_n
が大きい場合、常にsqrt(n)
によって上限が設定されます。
いいえ、同等ではありません。
@trincotは、彼の答えに例を使って1つの優れた説明をしました。もう1つポイントを追加します。あなたの教授が教えてくれました
any operation that halves the length of the input has an O(log(n)) complexity
それも真実です
any operation that reduces the length of the input by 2/3rd, has a O(log3(n)) complexity
any operation that reduces the length of the input by 3/4th, has a O(log4(n)) complexity
any operation that reduces the length of the input by 4/5th, has a O(log5(n)) complexity
So on ...
(B-1)/Bth.
による入力の長さのすべての短縮にも当てはまります。その場合、O(logB(n))
の複雑さを持ちます。
N:B:
O(logB(n))
はB
ベースのn
の対数を意味します
いいえ、それらはnotと同等です。あなたもそれを証明することができます
O(n**k) > O(log(n, base))
k > 0
およびbase > 1
(sqrt
の場合はk = 1/2
)に対して。
O(f(n))
で話すとき、largen
、limitsの動作を調査したいはそのための良い手段です。両方の大きなO
が同等であるとします:
O(n**k) = O(log(n, base))
つまり、いくつかの有限定数C
があり、
O(n**k) <= C * O(log(n, base))
十分な大きさのn
;言い換えると(log(n, base)
は0
ではなくn
から始まり、両方の関数は継続的に微分可能です):
lim(n**k/log(n, base)) = C
n->+inf
制限の値を見つけるには、 L'Hospital's Rule を使用します。つまり、分子と分母の微分を取り、それらを除算します。
lim(n**k/log(n)) =
lim([k*n**(k-1)]/[ln(base)/n]) =
ln(base) * k * lim(n**k) = +infinity
そのため、O(n**k) < C*log(n, base)
などの定数C
は存在しないと結論付けることができます。
O(n**k) > O(log(n, base))
いいえ、そうではありません。時間の複雑さを扱うとき、入力を非常に大きな数と考えます。それで、n = 2 ^ 18を取りましょう。 sqrt(n)の操作数は2 ^ 9になり、log(n)の場合は18になります(ここでは2を底とするログを考えます)。明らかに2 ^ 9は18よりはるかに大きいので、O(log n)はO(sqrt n)よりも小さいと言えます。