Помилка використання асимптотичних позначень


10

Я намагаюся зрозуміти, що не так, з наступним доказом наступних рецидивів

T(n)2(cn

T(n)=2T(n2)+n
T(n)2(cn2)+ncn+n=n(c+1)=O(n)

У документації сказано, що це неправильно через індуктивну гіпотезу, що Що я пропускаю?

T(n)cn

2
Повтори цієї форми також можна вирішити, використовуючи теорему Майстра .
Juho

2
@Ran: Я не думаю, що майстер-теорема є відповідним тегом для цього питання. Питання полягає не в тому, як її вирішити, а в тому, щоб вказати на помилковість у конкретному аргументі. Крім того, магістерська теорема, мабуть, занадто конкретна і, мабуть, не заслуговує на те, щоб мати власний тег. Загалом, нам слід позначати теги на основі запитання, а не можливих відповідей. Наприклад, ви би позначили цей акра-баззі?
Ар'ябхата

"що не так із наступним доказом" - я не бачу доказів. Часто корисно записати повний доказ (тобто зробити індукцію явною), щоб виявити помилки.
Рафаель

Відповіді:


12

Скажімо, кінцева мета - довести . Ви починаєте з гіпотези про індукцію:T(n)=O(n)

i < nT(i)ci для всіх .i<n

І щоб завершити доказ, ви повинні показати, що і .T(n)cn

Однак те, що ви можете зробити, це , що не корисно для завершення доказу; вам потрібна одна константа для (майже) всіх . Тому ми нічого не можемо зробити, і не доведено.c n T ( n ) = O ( n )T(n)(c+1)ncnT(n)=O(n)

Зауважте, що ви заплутані між результатом та процесом доказування. І ще один момент, - це насправді у цьому випадку, тож ви можете розглянути відповідну індукційну гіпотезу, щоб мати змогу це довести.Θ ( n логін n )T(n)Θ(nlogn)


якщо ми замінимо c '= c + 1, чи зміниться це?
Ерб

@erb: Ні, не буде. Ви повинні довести для обраної константи. Якщо замінити , ви, зрештою, маєте (або ), то результат такий же. T ( n ) ( c + 1 ) n T ( n ) ( c + 2 ) nc=c+1T(n)(c+1)nT(n)(c+2)n
колодка

8

Ви пропустили кілька кроків. Схоже, ви намагаєтесь індукцією довести, що , і ваш доказ іде:T(n)=O(n)

Припустимо, для . Це означає для деяких . Тоді , тому .k < n T ( k ) cT(k)=O(k)k<nc T ( n ) = 2 T ( n / 2 ) + n 2 c n / 2 + n ( c + 1 )T(k)ckcT ( n ) = O ( n )T(n)=2T(n/2)+n2cn/2+n(c+1)nT(n)=O(n)

Цей доказ виходить неправильним з самого початку: " для " не має сенсу. Великий о - це асимптотичне поняття: означає, що існує деяка константа і поріг N такий, що . І знову в кінці, ви не можете зробити висновок, що " ", тому що це говорить щось про функцію в цілому, і ви лише довели щось про конкретне значення .k < n T ( k ) = O ( k ) c k N , T ( k ) cT(k)=O(k)k<nT(k)=O(k)c T ( n ) = O ( n ) T T ( n )kN,T(k)ckT(n)=O(n)TT(n)

Вам потрібно бути чітко про те, що означаєТож можливо ваш доказ іде:O

Припустимо, що для всіх . Тоді .k < n T ( n ) = 2 T ( n / 2 ) + n 2 c n / 2 + n ( c + 1 )T(k)ckk<nT(n)=2T(n/2)+n2cn/2+n(c+1)n

Це не доводить індуктивний крок: ви почали з , і ви довели, що для , . Це слабша межа. Подивіться , що це означає: означає , що є оцінкою швидкості росту . Але у вас є швидкість яка зростає, коли зростає. Це не лінійне зростання!k = n T ( k ) ( c + 1 )T(k)ckk=nT ( k ) cT(k)(c+1)kc T c kT(k)ckcTck

Якщо ви придивитесь уважніше, то помітите, що швидкість зростає на раз, коли подвоюється. Отже, неофіційно, якщо то ; іншими словами, .c1km=2pkcm=ck+pck=c0log2k

Це можна зробити точно. Доведіть за допомогою індукції, що для , .k1T(k)clog2(k)

Відношення рецидивів є типовим для алгоритмів ділення і підкорення, які розділяють дані на дві рівні частини за лінійним часом. Такі алгоритми працюють у час (не ).Θ(nlog(n))O(n)

Щоб побачити, який очікуваний результат, ви можете перевірити відношення рецидивів проти основної теореми . Поділ - і додаткова робота, що виконується, - ; тому це другий випадок, для якого зростання є .2T(n/2)nlog2(2)=1Θ(nlog(n))


7

Я вже продовжую відповідь, можливо, лише пояснивши свій коментар більш докладно.

Оскільки відгадування може бути важким і стомлюючим, іноді існують кращі методи. Одним із таких методів є теорема магістра . Наше повторення тепер має вигляд , де і - константи, а - функція. Зауважте, що в нашому випадку може бути інтерпретоване як значення . Якщо бути технічно точним, наше повторення може бути не чітко визначеним, оскількиT(n)=aT(n/b)+f(n)a1b>1f(n)n/2n/2n/2може бути не цілим числом. Однак це дозволено, оскільки це не вплине на асимптотичну поведінку рецидиву. Тому нам часто зручно скидати підлоги та стелі. Офіційне підтвердження цього є трохи стомлюючим, але зацікавлений читач може знайти його, наприклад, у Cormen et al. книга .

У нашому випадку маємо , , . Це означає, що у нас . Другий випадок Майстри теорема застосовна , так як , і ми маємо рішення .b = 2 f ( n ) = Θ ( n ) n log b a = n log 2 2 = n f ( n ) = Θ ( n ) T ( n ) = Θ ( n log n )a=2b=2f(n)=Θ(n)nlogba=nlog22=nf(n)=Θ(n)T(n)=Θ(nlogn)


Дякую! Можна зазначити, що "скидання підлоги та перекриттів" відповідає припущенню, що що зазвичай робиться. Основне спостереження полягає в тому, що для не спадаючих функцій асимптотичний ріст підрядів дорівнює асимптотичному зростанню всієї послідовності. n=2k
Рафаель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.