Я пытаюсь понять, что не так со следующим доказательством следующего повторения
Документация говорит, что это неправильно из-за индуктивной гипотезы, что Чего мне не хватает?
Я пытаюсь понять, что не так со следующим доказательством следующего повторения
Документация говорит, что это неправильно из-за индуктивной гипотезы, что Чего мне не хватает?
Ответы:
Допустим, конечная цель - доказать . Вы начинаете с гипотезы индукции:
i < n для всех .
И чтобы завершить доказательство, вы должны показать, что .
Однако, что вы можете сделать вывод, так это , что бесполезно для завершения доказательства; вам нужна одна константа для (почти) всех . Следовательно, мы не можем ничего сделать, и не доказано.c n T ( n ) = O ( n )
Обратите внимание, что вы запутались между результатом и процессом доказательства. И еще один момент, на самом деле в этом случае, поэтому вы можете рассмотреть соответствующую гипотезу индукции, чтобы иметь возможность доказать это.Θ ( n log n )
Вы пропустили несколько шагов. Похоже, вы пытаетесь по индукции доказать, что , и ваше доказательство выглядит так :
Предположим, что при k < n . Это означает, что T ( k ) ≤ c для некоторых с . Тогда T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n ≤ 2 c ⌊ n / 2 ⌋ + n ≤ ( c + 1 ) , поэтому T ( n ) = O ( n ) .
Это доказательство с самого начала неверно: « для k < n » не имеет смысла. Big oh является асимптотическим понятием: T ( k ) = O ( k ) означает, что существует некоторая постоянная c и порог N такой, что ∀ k ≥ N , T ( k ) ≤ c . И снова, в конце, вы не можете сделать вывод, что « T ( n ) = O ( n ) », потому что это что-то говорит о функции T в целом, и вы только что-то доказали о конкретном значении T ( n ) ,
Вы должны четко указать, что означает Так что, возможно, ваше доказательство идет:
Предположим, что для всех k < n . Тогда T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n ≤ 2 c ⌊ n / 2 ⌋ + n ≤ ( c + 1 ) .
Это не доказывает индуктивный шаг: вы начали с , и вы доказаличто для к = п , Т ( к ) ≤ ( с + 1 ) . Это более слабая оценка. Посмотрите, что это значит: T ( k ) ≤ c означаетчто с является оценка скорости роста Т . Но у вас есть скорость c, которая растет, когда k растет. Это не линейный рост!
Если вы внимательно посмотрите, вы заметите, что скорость увеличивается на 1, когда k удваивается. Итак, неофициально, если m = 2 p k, то c m = c k + p ; другими словами, c k = c 0 log 2 k .
Это может быть сделано точно. Докажите по индукции , что для , Т ( к ) ≤ Ĉ войти 2 ( K ) .
Рекуррентное соотношение типично для алгоритмов «разделяй и властвуй», которые разделяют данные на две равные части за линейное время. Такие алгоритмы работают в время (не O ( n ) ).
Чтобы увидеть ожидаемый результат, вы можете сравнить рекуррентное соотношение с основной теоремой . Деление а дополнительная работа - n ; log 2 ( 2 ) = 1, так что это второй случай, когда рост равен Θ ( n .
Я расширяю уже полученный ответ, возможно, только объясняя свой комментарий более подробно.
, Чтобы быть технически точным, наше повторение может быть не вполне определенным, потому что может не быть целым числом. Однако это разрешено, поскольку это не повлияет на асимптотическое поведение рецидива. Поэтому нам часто бывает удобно бросать полы и потолки. Формальное доказательство этого немного утомительно, но заинтересованный читатель может найти его, например, в Cormen et al. книга .