Второй будет O(log* n)
, где log *
- повторный логарифм .
Анализ первого выдает что-то вроде этого:
sqrt(n) = n ^ (1/2)
sqrt(sqrt(n)) = n ^ (1/4)
sqrt(sqrt(sqrt(n))) = n ^ (1/8)
...
sqrt applied k times = n ^ (1/2^k)
Учтите, что первый алгоритм выполняется k
раз (в основном, сколько раз мы должны применить sqrt
до n <= 2
).
Подумайте над этим рассуждением:
n ^ (1/2^k) = p (p <= 2) | ^ (2^k)
n = p ^ (2^k) | log
log n = (2^k) log p | log
log log n = log (2 ^ k) + log log p
log log n = klog2 + log log p
=> k ~= log log n
Итак, первый алгоритм - O(log log n)
.