Я считаю, что вы правы, что это O (log n).
Здесь вы можете увидеть последовательные значения r
, когда x = 100000
:
1 50000
2 25001
3 12502
4 6255
5 3136
6 1584
7 823
8 472
9 342
10 317
11 316
12 316
(I округлили их, потому что дроби не интересны).
Что вы можете увидеть, если оно проходит через две фазы.
Фаза 1 - это когда r
велико. Во время этих первых нескольких итераций x/r
крошечный по сравнению с r
. В результате r + x/r
близко к r
, поэтому (r + x/r) / 2
примерно равно r/2
. Вы можете увидеть это на первых 8 итерациях.
Фаза 2 - это когда он приближается к окончательному результату. Во время последних нескольких итераций x/r
близко к r
, поэтому r + x/r
близко к 2 * r
, поэтому (r + x/r) / 2
близко к r
. На данный момент мы просто немного улучшаем приближение. Эти итерации на самом деле не очень сильно зависят от величины x
.
Вот последовательность для x = 1000000
(в 10 раз больше):
1 500000
2 250001
3 125002
4 62505
5 31261
6 15646
7 7855
8 3991
9 2121
10 1296
11 1034
12 1001
13 1000
14 1000
На этот раз в Фазе 1 10 итераций, затем мы снова имеем 4 итерации во Фазе 2.
В сложности алгоритма преобладает Фаза 1, которая является логарифмической c, потому что каждый раз она приблизительно делится на 2.