ブロックは次のとおりです。
i=2
while(i<n){
i=i*i;
x=x+1;
}
x=x+1 が実行される回数のシータ表記を見つける必要があります。いくつかのサンプル値を含むテーブルを作成しましたが、そこから先に進む方法がわかりません。ここに私のサンプル値があります:
(n) - (# times looped)
3 - 1
5 - 2
20 - 3
400 - 4
これについて考える1つの方法は、ループ内のiの値をトレースすることです。最初の反復の前の値は2= 21です。2回目の反復の後、4 =22になります。3回目の反復の後、16 = 24になります。4回目の反復の後、256 =28になります。5回目以降は、65,536 =216です。
ご覧のとおり、ループをk回繰り返した後、iの値は22kになります。これは、反復回数が(おおよそ)kの最小値に対応し、次のようになることを意味します。
22k≥n _ _ _
両側の対数を2回取ると、次のようになります。
22k≥n _ _ _
2k≥log2n _ _ _ _
k≥log2log2 n _ _ _
したがって、ループの反復回数はおおよそlog 2 log2nです。したがって、ループはO(log log n)回実行されます。より正確には、ループは、k回の反復が経過するまでループが停止しないため、Θ(log log n)回実行されます。
お役に立てれば!