Итак, я сейчас беру курс алгоритмов, и у меня возникают проблемы с рекуррентными случаями и получение времени выполнения. Мне было интересно, может ли кто-нибудь объяснить это мне в непрофессиональных терминах, как решить, используя метод замещения.Решая рецидивы с использованием метода замещения
Вопрос из книги: Алгоритм B решает проблемы размера n путем рекурсивного решения двух подзадач размера n - 1 и последующего объединения решений в постоянное время.
Который привел меня к следующему повторению: T(n)=2T(n-1)+O(1)
. Затем я придумал O(1)=1
. Который дал мне следующее: T(n)=2T(n-1)+1
Вот моя попытка решить его
T(n)=2T(n-1)+1
=2(2T(n-2)+1)+1=4T(n-2)+3
=4(2T(n-3)+1)+3=8T(n-3)+7
=8(2T(n-4)+1)+7=16T(n-4)+15
=16(2T(n-5)+1)+15=32T(n-5)+31
=32T(2T(n-6)+1)+31=64T(n-6)+63
Если я делаю это правильно, как я по-прежнему получить время работы? Может ли кто-нибудь объяснить в неспециалистских терминах, как использовать метод замещения?
Спасибо! Так что я был на правильном пути. Я заметил, что это удваивает каждый шаг, поэтому я думал, что Big-O был O (2^n). У меня есть другой вопрос, если вы не возражаете, чтобы я спросил, когда вы используете основную теорему и метод подстановки? – user3561871
Вы можете использовать только основную теорему для рекуррентных отношений конкретной формы, см. Https://en.wikipedia.org/wiki/Master_theorem. Лично я вижу, можно ли решить рекуррентное соотношение с помощью основной теоремы. Если это не правильная форма, я использую метод подстановки. – kevchoi