Liczba operacji pętli
Ola: Witam, jaka jest liczba wykonań pętli w zależności od multiplier, jeżeli
for(int k=multiplier; k>multiplier/4;k−−). Wiem że w odpowiedzi będzie logarytm ale nie mam
pojęcia jak to zapisać i bardzo proszę o pomoc.
31 mar 21:19
Dziadek Mróz:
Szybki debug:
m = multiplier = 6;
for (int k = m, i = 1; k > m/4; k−−, i++)
k = 6 i=1 6 > 1 → T k−−, i++
k = 5 i=2 5 > 1 → T k−−, i++
k = 4 i=3 4 > 1 → T k−−, i++
k = 3 i=4 3 > 1 → T k−−, i++
k = 2 i=5 2 > 1 → T k−−, i++
k = 1 i=6 1 > 1 → N
5 wykonań pętli
31 mar 22:42
Pytający:
Żadnego logarytmu nie będzie, w kroku pętli nie dzielisz k.
f(x) − liczba wykonań
wnętrza pętli, x=multiplier
f(x)+1 − liczba wykonań pętli, x=multiplier (licząc tak jak Dziadek Mróz)
| ⎧ | 0 dla x<0 | |
f(x)= | ⎨ | |
|
| ⎩ | 3m+n dla x=4m+n, gdzie m całkowite nieujemne, n∊{0,1,2,3} | |
Stosując inny zapis:
f(x)= x−[x/4] dla x≥0, gdzie "[x/4]" to cecha (
979) x/4
31 mar 22:57
Dziadek Mróz:
Przykładowe wyniki dla 20 testów
5511/4134 = 1.33309
2251/1689 = 1.33274
7619/5715 = 1.33316
6522/4892 = 1.3332
8319/6240 = 1.33317
3936/2952 = 1.33333
1720/1290 = 1.33333
4843/3633 = 1.33306
4285/3214 = 1.33323
1055/792 = 1.33207
3308/2481 = 1.33333
4717/3538 = 1.33324
173/130 = 1.33077
2570/1928 = 1.33299
4659/3495 = 1.33305
5950/4463 = 1.33318
5621/4216 = 1.33325
4708/3531 = 1.33333
3697/2773 = 1.33321
5887/4416 = 1.33311
31 mar 22:57
Dziadek Mróz:
multiplier/ilosciteracji
31 mar 23:03