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