Итак, T (n) = 2T (n / 2) + c. Фактически это само по себе O (n).
Вот формальное доказательство этому.T (n) = 2T (n / 2 ^ 1) + c (2 ^ 0)
Разбить его дальше
T (n) = 2 (2T (n / 2 ^ 2)+ c) + c (2 ^ 0)
Упрощение этого:
T (n) = 2 ^ 2 T (n / 2 ^ 2) + c (2 ^ 0) + c(2 ^ 1)
Если разбить его дальше, что вы можете попробовать, вы получите выражение, подобное этому
T (n) = 2 ^ 3 T (n / 2 ^ 3) +c (2 ^ 0) + c (2 ^ 1) + c (2 ^ 2)
Теперь ключ в том, как далеко вы можете сломать его, это должно быть до такой степени, что 2 ^ что-то становится равнымn, так что n / n = 1 и T (1) является постоянным.
Это что-то легко может быть вычислено как log (n) base (2).
Таким образом, с помощью проверки вы можете предсказатьчто ваше окончательное выражение будет выглядеть так:
T (n) = 2 ^ log (n) T (n / 2 ^ log (n)) + c (2 ^ 0) + c (2 ^ 1) + ........ + 2 ^ (log (n) -1)
=n T(1)+c(2^0+2^1+2^2+.......2^(log(n)-1))
=n T(1)+c(n-1)
Таким образом,
T (n) = (T (1) + c) nc, который является o (n).