Так что я почти уверен, что это O (n) (но может быть и нет?), Но как вы решаете это с заменой?
Если вы предполагаете, что T (n) ‹ = c * n, каковы шаги индукции?
Так что я почти уверен, что это O (n) (но может быть и нет?), Но как вы решаете это с заменой?
Если вы предполагаете, что T (n) ‹ = c * n, каковы шаги индукции?
Прежде всего, я хотел бы ясно предположить, что Θ(1)=k, некоторая константа.
Далее, действуя методом подстановки, получаем
T(n)=2T(n/2)+Θ(1)
=2T(n/2)+k
=2{2T(n/4)+k)+k
=4T(n/4)+3k
=...
=n.T(1)+(n-1)k
=n.k+(n-1)k
=2nk-k
=O(n).
Если вы предполагаете, что оно равно T(n) <= c * n
, вы должны начать с T(1) и предположить, что T(n) верно, а затем продолжить показывать, что оно верно для T(n+1), используя предположение для T(n ).
Кстати, ваше предположение было верным!
2^m T(n/2^m) + (2^m - 1)k
. Теперь, чтобы сделать T(1)
, мы задаем 2^m = n
, что дает нам 6-ю строку.
- person Muntashir Akon; 11.11.2018
Для простоты предположим, что член O(1) скрывает некоторую константу c, так что рекуррентность действительно
T(n) = 2T(n/2) + c
Предположим также для простоты, что T(1) = c.
Вы рискуете (правильно) предположить, что
T(n) <= an + b
Для некоторых констант a и b. Попробуем доказать это индуктивно.
Для n = 1 нам нужно, чтобы a и b были такими, что
c <= a + b
Для индукционного шага мы хотим
T(n) <= 2T(n/2) + c
Подстановка нашего предположения дает
T(n) <= 2(an / 2 + b) + c
= an + 2b + c
Обратите внимание, что если 2b + c = b, то левая часть этого выражения будет an + b — нужная нам верхняя граница. Таким образом, нам нужно выбрать a и b так, чтобы
c <= a + b
2b + c = c
Один из возможных вариантов, который работает здесь, - это a = 2c и b = -c, что дает T (n) ‹ = 2cn - c = O (n).
Надеюсь это поможет!
теорема Мастера хорошо подходит для этой задачи:
Сравнение данного уравнения
T(n) = 2T(n/2) + c
с формулами
T(n) = aT(n / b) + (nk logpn)
где a ›= 1, b › 1, k ›= 0 и p действительно
можно сказать, что он удовлетворяет условию a › bk, поскольку a = 2, b = 2 и k = 0,
итак, T(n) = θ(nlog б а) = θ(n)