Зміна змінних у відношеннях повторення


20

В даний час я самостійно вивчаю «Вступ до алгоритмів» (CLRS), і є один конкретний метод, який вони окреслюють у книзі, щоб вирішити відносини рецидивів.

Наступний спосіб можна проілюструвати цим прикладом. Припустимо, у нас є рецидив

T(n)=2T(n)+logn

Спочатку вони роблять заміну m = lg (n), а потім підключають її до рецидиву і отримують:

T(2m)=2T(2m2)+m

До цього моменту я прекрасно розумію. Наступний крок - той, хто мене бентежить.

Тепер вони "перейменують" повтор і нехай , що, очевидно, створюєS(m)S(m)=T(2m)

S(m)=2S(m/2)+m

Чомусь мені не зрозуміло, чому це перейменування працює, і це просто здається обманом. Хтось може пояснити це краще?

Відповіді:


15

Це, звичайно, не обман. Подумайте в обчисленні, як заміщення може бути використане для вирішення складного інтеграла. Заміна робить рівняння більш керованим для маніпуляцій. Крім того, заміщення може перетворити дещо складні рецидиви на звичні.

Це саме те, що відбулося у вашому прикладі. Визначимо новий повтор . Пам'ятайте, що . Зауважте, . Якщо ця конкретна точка все ще незрозуміла, нехай і помітимо все, що ми робимо, це . Тепер ми можемо виразити , розклавши його до: Вирішуючи для ми бачимо, що він відповідає нашому знайомому другу . Тепер, коли ми вирішили ми хочемо висловити це через . Для цього просто підключіть до початкового значенняT ( 2 m ) = 2 T ( 2 m)S(m)=T(2m)S(m/2)=T(2мT(2m)=2T(2m2)+mk=m/2S(k)=T(2k)S(m)S(m)=2S(m/2)+m. SO(mlogm)ST(n)mTO(lognloglogn)S(m/2)=T(2m2)k=m/2S(k)=T(2k)S(m)

S(m)=2S(m/2)+m.
SO(mlogm)ST(n)mі у нас є .TO(lognloglogn)

Правильно, я повністю розумію, як підміна допомагає полегшити проблеми і як повернути значення назад, щоб отримати складність з точки зору n. Я думаю, що моє запитання полягає в тому, як випустити S (m) = T (2 ^ m), як ви отримуєте S (m / 2)? Для мене це чомусь просто не очевидно. Якщо бути більш конкретним, як ви робите висновок, що T (2 ^ (m / 2)) = S (m / 2). Схоже, що у повторенні T розмір

Єдина частина, яку я не розумію, - це коли ти кажеш "Зверніть увагу, S (m / 2) = T (2 ^ (m / 2))" Це єдина частина, яка мені не очевидна. Я звик до ідеї внесення змінних підстановок, але я не дуже звик до ідеї заміни цілого рецидиву.

Ну добре, що остання редакція зробила це для мене. Тепер зрозуміло, дякую!

1
Я трохи сумніваюся. Якщо я пишу функцію S () в термінах kя отримую нижче рівняння S (к) = 2S (к / 2) + м Як я можу отримати заміну mдляk
Atinesh

4

Що означає, що і це дві різні функції, які дають однаковий результат, приймаючи входи як і відповідно.S T m 2 mS(m)=T(2m)STm2m

Функція може розглядатися як оператор з двома внутрішніми кроками (інакше - склад функцій):S

  1. м 2 мS оператор: Вхід: , Вихід:m2m

  2. TОператор (оригінальна функція): Вхід: вихід першої частини, Вихід: Як визначено спочатку.

Тому переходи є:

m

m2mT(2m)=S(m)
m22m/2T(2m/2)=S(m2).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.