Я намагаюся зрозуміти, що не так, з наступним доказом наступних рецидивів
T(n)≤2(c⌊n
У документації сказано, що це неправильно через індуктивну гіпотезу, що Що я пропускаю?
Я намагаюся зрозуміти, що не так, з наступним доказом наступних рецидивів
T(n)≤2(c⌊n
У документації сказано, що це неправильно через індуктивну гіпотезу, що Що я пропускаю?
Відповіді:
Скажімо, кінцева мета - довести . Ви починаєте з гіпотези про індукцію:
i < n для всіх .
І щоб завершити доказ, ви повинні показати, що і .
Однак те, що ви можете зробити, це , що не корисно для завершення доказу; вам потрібна одна константа для (майже) всіх . Тому ми нічого не можемо зробити, і не доведено.c n T ( n ) = O ( n )
Зауважте, що ви заплутані між результатом та процесом доказування. І ще один момент, - це насправді у цьому випадку, тож ви можете розглянути відповідну індукційну гіпотезу, щоб мати змогу це довести.Θ ( n логін n )
Ви пропустили кілька кроків. Схоже, ви намагаєтесь індукцією довести, що , і ваш доказ іде:
Припустимо, для . Це означає для деяких . Тоді , тому .k < n T ( k ) ≤ cc T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n ≤ 2 c ⌊ n / 2 ⌋ + n ≤ ( c + 1 )T ( n ) = O ( n )
Цей доказ виходить неправильним з самого початку: " для " не має сенсу. Великий о - це асимптотичне поняття: означає, що існує деяка константа і поріг N такий, що . І знову в кінці, ви не можете зробити висновок, що " ", тому що це говорить щось про функцію в цілому, і ви лише довели щось про конкретне значення .k < n T ( k ) = O ( k ) c ∀ 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 )
Це не доводить індуктивний крок: ви почали з , і ви довели, що для , . Це слабша межа. Подивіться , що це означає: означає , що є оцінкою швидкості росту . Але у вас є швидкість яка зростає, коли зростає. Це не лінійне зростання!k = n T ( k ) ≤ ( c + 1 )T ( k ) ≤ cc T c k
Якщо ви придивитесь уважніше, то помітите, що швидкість зростає на раз, коли подвоюється. Отже, неофіційно, якщо то ; іншими словами, .
Це можна зробити точно. Доведіть за допомогою індукції, що для , .
Відношення рецидивів є типовим для алгоритмів ділення і підкорення, які розділяють дані на дві рівні частини за лінійним часом. Такі алгоритми працюють у час (не ).
Щоб побачити, який очікуваний результат, ви можете перевірити відношення рецидивів проти основної теореми . Поділ - і додаткова робота, що виконується, - ; тому це другий випадок, для якого зростання є .
Я вже продовжую відповідь, можливо, лише пояснивши свій коментар більш докладно.
Оскільки відгадування може бути важким і стомлюючим, іноді існують кращі методи. Одним із таких методів є теорема магістра . Наше повторення тепер має вигляд , де і - константи, а - функція. Зауважте, що в нашому випадку може бути інтерпретоване як значення . Якщо бути технічно точним, наше повторення може бути не чітко визначеним, оскількиможе бути не цілим числом. Однак це дозволено, оскільки це не вплине на асимптотичну поведінку рецидиву. Тому нам часто зручно скидати підлоги та стелі. Офіційне підтвердження цього є трохи стомлюючим, але зацікавлений читач може знайти його, наприклад, у 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 )