Короче говоря : цикл while
будет каждый запускаться не более двух итераций.Это делает алгоритм O (n) .
Цикл while
будет повторяться максимум два раза.Действительно, давайте посмотрим на цикл while:
while i < j do
if j mod 2 = 0 then
j=j-1
else
j=i
Ясно, что мы будем выполнять цикл while
только если i < j
.Кроме того, если j mod 2 == 1
(то есть j
равно нечетное ), тогда оно установит j = i
, и, следовательно, цикл while больше не будет выполняться.
Если с другой стороны j mod 2 == 0
(то есть j
равно даже ), тогда мы уменьшаем j
.Теперь есть две вещи, которые могут произойти, либо i == j
, и в этом случае мы не выполняем дополнительную итерацию.Однако, если мы выполним дополнительную итерацию, условие if
не будет выполнено, поскольку уменьшение числа четного приводит к получению числа нечетного .Поскольку мы каждый раз устанавливаем j = n
, это также означает, что число шагов, которые выполняет цикл while, определяется самим n
.
Это, таким образом, означает, что независимо от значений i
и j
, тело цикла while
будет выполнено не более двух раз.
Поскольку мы выполняем цикл while
явно n
раз, это означает, что алгоритм все еще O (п) .Здесь мы делаем предположение, что мы можем проверить четность числа и уменьшить число в постоянное время.