そのため、次のループの数式が必要ですが、理解できないようです。単純なものが欠けているだけだと思います。
while a <= b
a = a + a
end
分析を使用すると、この関数の実行時間はどのくらいになりますか?
そのため、次のループの数式が必要ですが、理解できないようです。単純なものが欠けているだけだと思います。
while a <= b
a = a + a
end
分析を使用すると、この関数の実行時間はどのくらいになりますか?
実行時間は、の対数に依存しb
ます。言い換えれば、時間計算量はO(log N)
です。
a
これは、1と256から開始するとわかりますb
。ループを通過するたびに、a
反復が9回になるように2倍になります(条件がだった場合は8回になります< b
)。
値を2倍にするたびb
に、1回の追加の反復が発生します。
もちろん、これは複雑さの分析であり、実行時間は次のような他の多くの要因に依存します(ほぼ確実に網羅的なリストではありません)。
a
:の初期値a == 0
は無限の実行時間をa == b + 1
与え、一定の実行時間を与えます。ループの各反復が2倍になることに同意しますa
か?その場合a
、初期値を1にします。1回の反復の後、a == 2
。2回の反復後a == 4
。3の後、a == 8
。4の後、a == 16
; 等々。
それを仮定しb == 64
ます。この場合、ループは7回の反復を実行します。それを観察してlog_2(64) == 6
ください。
それを仮定しb == 128
ます。この場合、ループは8回の反復を実行します。それを観察してlog_2(128) == 7
ください。
それを仮定しb == 256
ます。この場合、ループは9回の反復を実行します。それを観察してlog_2(256) == 8
ください。
したがって、実行時間はの対数に依存しb
ます。
a
毎回倍増しているのでlog(b/a)
、ループが終了する前に倍増する必要があります。したがって、実行時間はTheta(log(b/a))
です。