Розв’язування або наближення відношень повторення для послідовностей чисел


89

В інформатиці нам часто доводиться вирішувати рекурсивні відносини , тобто знаходити закриту форму для рекурсивно визначеної послідовності чисел. Розглядаючи час виконання, нас часто цікавлять переважно асимптотичні темпи зростання послідовності .

Приклади є

  1. Час виконання хвостово-рекурсивної функції, що відступає до від , тіло якого вимагає часу :0nf(n)

    T(0)=0T(n+1)=T(n)+f(n)

  2. Послідовність Фібоначчі :

    F0=0F1=1Fn+2=Fn+Fn+1

  3. Кількість слів Dyck з ятими дужками:n

    C0=1Cn+1=i=0nCiCni

  4. Повторення часу виконання об'єднань у списках довжини :n

    T(1)=T(0)=0T(n)=T(n/2)+T(n/2)+n1

Які методи вирішення рецидивних відносин? Ми шукаємо

  • загальні методи та
  • методи для значного підкласу

так добре як

  • методи, що дають точні рішення та
  • методи, що забезпечують (обмежує) асимптотичний ріст.

Це має стати еталонним питанням. Будь ласка, опублікуйте одну відповідь за методом та надайте загальний опис, а також ілюстративний приклад.


9
Ці замітки можуть бути корисними. (Але ні, я не переписую їх у відповіді.)
JeffE

Відповіді:


35

Перетворення повної історії в обмежену історію

Це перший крок у вирішенні рецидивів, коли значення в будь-якому цілому цілому залежить від значень для всіх менших цілих чисел. Розглянемо, наприклад, повторення , яка виникає при аналізі рандомізованого кваксорту . (Тут - ранг випадково вибраного зведення.) Для будь-якого цілого числа значення залежить від усіх з . Рецидиви цієї форми називаються повними рецидивами історії .knT(n)T(k)k<n

T(n)=n+1nk=1n(T(k1)+T(nk))
knT(n)T(k)k<n

Для вирішення цього рецидиву ми можемо перетворити його на обмежений повтор історії , де залежить лише від постійної кількості попередніх значень. Але по-перше, це допомагає трохи спростити рецидиви, зібрати загальні терміни та усунути досадні дроби. Тепер перейти до обмеженого повторення історії , записуємо повторення для , віднімання та регенерації: n T ( n )T(n) T(n-1) ( n - 1 ) T ( n - 1 )

nT(n)=n2+2k=1n1T(k)
T(n1)
(n1)T(n1)=(n1)2+2k=1n2T(k)nT(n)(n1)T(n1)=(2n1)+2T(n1)nT(n)=(2n1)+(n+1)T(n1)T(n)n+1=2n1n(n+1)+T(n1)n

Тепер, якщо визначимо і замінимо дріб на більш просту асимптотичну форму , ми отримуємо набагато простіший повтор Розширення цього повторення на підсумовування негайно дає нам , де - е гармонічне число . Робимо висновок, що .2 n - 1t(n)=T(n)/(n+1) Θ(1/n)t(n)=Θ(1/n)+t(n-1). t(n)=Θ(Hn)=Θ(logn)Hnn2n1n(n+1)Θ(1/n)

t(n)=Θ(1/n)+t(n1).
t(n)=Θ(Hn)=Θ(logn)HnnT(n)=Θ(nlogn)

1
Якщо ви хочете точного рішення для , це теж не важко (тут), якщо трохи нудно; отримаємо . Власне, мене бентежить, тому я віддаю перевагу точному варіанту. Пескі суми термінів Ландау . T ( n ) = 2 ( n + 1 ) H n + ( T ( 0 ) - 3 ) n + T ( 0 ) n i = 1 Θ ( 1 / i ) = Θ ( H n )TT(n)=2(n+1)Hn+(T(0)3)n+T(0)i=1nΘ(1/i)=Θ(Hn)
Рафаель

Власне, досить (індуктивно) спостерігати, що , де . Насправді я вже використовував цей трюк на самому старті, коли я замінив час для розподілу масиву на простіший . Це вкрай стандартне зловживання нотацією. t ( n ) = 1 / n + t ( n - 1 ) Θ ( n ) nT(n)/(n+1)=Θ(t(n))t(n)=1/n+t(n1)Θ(n)n
JeffE

28

Генерування функцій

Кожен ряд чисел відповідає функції, що генерує . Часто може бути зручно отримати рецидив, щоб його коефіцієнти - елементи серії - були вибиті.

Ця відповідь включає загальний анзац з повним прикладом, ярлик для окремого випадку та деякі зауваження щодо використання цього методу для отримання асимптотики (навіть якщо точного результату неможливо отримати).

Метод

Нехай ряд чисел. Потім, формальний силовий ряд(an)nN

A(z)=n=0anzn

є звичайною функцією генерування ¹ . Коефіцієнти розширення ряду рівні послідовності, тобто . Наприклад, звичайна функція генерування знаменитих каталонських чисел є A ( z ) [ z n ] A ( z ) = a n C n(an)nNA(z)[zn]A(z)=an Cn

C(z)=114z2z .

Визначення - це також наш ансац для вирішення рецидиву. Це найкраще працює для лінійних рецидивів, тому для простоти припустімо повторність формиA

a0=c0ak1=ck1an=f(n)+i=1kbiani,nk

для деяких фіксованих і функція, незалежна від усіх . Тепер ми просто вставляємо як анкери, так і рекурсивну частину в ансаж, тобто f ( n ) : NN a ib1,,bkRf(n):NNai

A(z)=n=0anzn=c0z0+c1z1++ck1zk1+n=k[f(n)+(i=1kbiani)]zn

Використовуючи механіку маніпулювання сумою, властивості формальних рядів потужності та відомі тотожності ², останню праву частину потрібно вивести у закриті форми, як правило, з точки зору . Отримане рівняння можна (часто) розв’язувати для . Послідовне розширення результату (яке може бути легко одержане, відоме чи доступне іншим чином) по суті є рішенням.A ( z )A(z)A(z)

Хороші вступи можна знайти в книзі Вільфа [3] та в GKP [4]. Передові матеріали зібрали Флайолет та Седжевік [5].

Приклад

Розглянемо

a0=1a1=2an=5n+3an12an2,n>1

Ми обчислюємо:

A(z)=n=0anzn=1+2z+n=2[3an12an2+5n]zn=1+2z+3n=2an1zn2n=2an2zn+5n=2nzn=1+2z+3zn=1anzn2z2n=0anzn+5n=2nzn=1+2z+3z(A(z)a0)2z2A(z)+5(z(1z)2z)=16z+(3z2z2)A(z)+5z(1z)2

Це вирішує питання

A(z)=13z+13z26z3(12z)(1z)3=1612z51z5(1z)25(1z)3=16n=02nzn5n=0zn5n=0(n+1)zn5n=0(n+1)(n+2)2zn

Тепер ми можемо нарешті зачитати

an=162n55(n+1)52(n+1)(n+2)=2n+452n2252n15

Як тільки ти звикнеш до цього , ти помічаєш, що це все досить механічно. Насправді комп'ютерна алгебра може зробити все це для вас у багатьох випадках. Добре в тому, що він залишається (більш-менш) тим механіком, навіть якщо повторність є більш складною. Дивіться тут для більш причетного, менш механічного прикладу.

Також зауважте, що загальні прийоми також працюють, якщо шукані об'єкти - це складні числа чи навіть многочлени.

Ярлик

Для лінійних та однорідних рецидивів, тобто такої форми

a0=c0ak1=ck1an=i=1kbiani,nk

вищезазначене проходить абсолютно однаково, кожен раз. Виконуючи вище обчислення символічно, ми знаходимо наступну лему . Дозволяє

zkb1zk1b2zk2bk

бути характерним многочленом (рецидиву). Нехай також (попарно виразні) нулі зазначеного многочлена з кратністю відповідно. Потім бажаний коефіцієнт задається числомr iλ1,,λlri

an=i=1lj=1ribi,jnj1λin

з невідомими . Оскільки характерний многочлен має ступінь , то рівно (складні) нулі, тобто сума до . Таким чином, відсутні коефіцієнти можуть бути визначені шляхом вирішення системи лінійних рівнянь з рівняннями , отриманих шляхом прирівнювання вище формул з будь-якими частини (наприклад , анкери). k k r i k k k a nbi,jkkrikkkan

Асимптотика

Як дістатися до закритої форми для як правило, легка частина. Виражаючи це в генерації функцій, ми знаємо, що коефіцієнти (як ми це робили в прикладі) швидко стає важким. Приклади - зверху та один для кількості слів Dyck, згаданих у питанні.C ( z )A(z)C(z)

Для отримання асимптотики для коефіцієнтів можна застосувати складний апарат аналізу, зокрема аналіз сингулярності; мовні слова включають метод Дарбу та метод сідла. Вони засновані на теоремі про залишки та інтегральній формулі Коші . Детальніше див. У розділі [6].


  1. Можна робити подібні речі за допомогою експоненціалів , Діріхле та деяких інших генеруючих функцій. Те, що найкраще працює, залежить від послідовності, зокрема, чи ви знайдете необхідні закриті форми.
  2. Наприклад, з TCS Cheat Sheet або [3].
  3. генеруюча функціоналогія Х. Вільфа (1994, 2-е видання) - доступна для вільного скачування
  4. Конкретна математика Р.Л. Грем, Д.Є. Кнут та О. Паташник (1994, 2-е видання)
  5. Вступ до аналізу алгоритмів Р. Седжевік та П. Флайолета (2-е видання, 2013 р.) - доступне для безкоштовного завантаження
  6. Аналітична комбінаторика П. Флайолета та Р. Седжевіка (2009) - доступна для вільного скачування

21

Теорема магістра

Теорема Master дає асимптотики рішень так званих розділяй і володарюй рецидиви, тобто таким чином, щоб розділити їх параметр в пропорційних шматки (замість зрізання констант). Вони зазвичай трапляються при аналізі (рекурсивних) алгоритмів ділення та підкорення, звідси і назва. Теорема популярна, оскільки її часто неймовірно просто застосувати. З іншого боку, він може застосовуватися лише до повторень такої форми:

T(n)=aT(nb)+f(n)

з . Є три випадкиa1,b>1

  1. fO(nlogb(a)ε)

    для деяких ;ε>0

  2. fΘ(nlogbalogkn) ,

    для деяких ;k0

  3. fΩ(nlogb(a)+ε)

    для деяких іε>0

    af(nb)cf(n)

    для деяких і .n c<1n

які мають на увазі асимптотику

  1. TΘ(nlogba) ,
  2. TΘ(nlogbalogk+1n) і
  3. TΘ(f) ,

відповідно. Зауважте, що базові випадки тут не вказані та не використовуються; це має сенс, враховуючи, що ми досліджуємо лише асимптотичну поведінку. Ми мовчки припускаємо, що вони є деякими константами (що ще вони можуть бути. Які константи ми не бачимо, не мають значення, всі вони зникають у .Θ

Приклади

  1. Розглянемо рецидив

    T(n)=4T(n3)+n .

    З і - зауважимо, що ми бачимо, що випадок застосовується з . Тому .b = 3 log b a 1,26 ε = 0,25 T Θ ( n log 3 4 ) = Θ ( n 1,226 )f(n)=n,a=4b=3logba1.26ε=0.25TΘ(nlog34)=Θ(n1.261)

  2. Розглянемо рецидив

    T(n)=2T(n/2)+n .

    З і - зауважимо, що ми бачимо, що два випадки застосовуються при . Тому .b = 2 log b a = 1 k = 0 T Θ ( n log n )f(n)=n,a=2b=2logba=1k=0TΘ(nlogn)

  3. Розглянемо рецидив

    T(n)=3T(n4)+n .

    З і - зауважимо, що ми бачимо, що у випадку 3 застосовується і . Тому .b = 4 log b a 0.79 ε = 0.2 c = 1 T Θ ( n )f(n)=n,a=3b=4logba0.79ε=0.2c=1TΘ(n)

  4. Розглянемо рецидив

    T(n)=16T(n4)+n!

    Тут маємо , і- у багатьох стандартних прикладах буде поліном , але це не правило. У нас , а третій випадок застосовується знову. Однак у цьому випадку ми можемо вибрати будь-який і як для всіх . Звідси .b = 4 f ( n ) = n ! f log b a = 2 ε c > 0 n ! Ω ( n k ) k T Θ ( n ! )a=16b=4f(n)=n!flogba=2εc>0n!Ω(nk)kTΘ(n!)

Подальше читання

  • Цілком можливо, що жоден із випадків теореми Майстра не застосовується. Наприклад, підпрограми можуть не мати однакового розміру або мати більш складну форму. Існують деякі розширення до теореми Майстра, наприклад, Акра-Бацци [1] або Рура [2]. Існує навіть версія, яка працює для дискретних повторень (тобто підлоги та стелі використовуються за рекурсивними параметрами) і дає більш чіткі результати [3].

  • Зазвичай вам доводиться масажувати фактичне співвідношення рецидивів, яке ви маєте у формі, перш ніж застосувати головну теорему. Загальні перетворення, що зберігають асимптотику, включають випадання підлоги та стелі, а також припущення . Слідкуйте, щоб тут не порушити речі; див. [4] розділ 4.6 та це питання для детальної інформації.n=bk


  1. Про рішення лінійних рівнянь рецидиву М. Акра та Л. Бацці (1998)
  2. Удосконалена головна теорема для повторень поділу і підкорення С. Рура (1997)
    Посилається на інші вдосконалені основні теореми.
  3. Основна теорема для дискретного поділу та підкорення повторень М. Дрмоти та В. Шпанковського (2011)
  4. Вступ до алгоритмів Cormen et al. (2009 р., 3-е видання)

Це може бути дурним питанням, але я часто не дотримуюся ментальної моделі, коли a не дорівнює b, я не знаю, чому, але за інтуїцією я завжди відчуваю, що обидва повинні бути однаковими завжди, як у злитті ми поділяємо проблему на дві рівні (майже) половинки і по n / 2 екземпляри кожна. Далі, якщо розділити алгоритм на три рівні частини, то вхідні дані також слід розділити на три рівні частини, що знову-таки робить a і b рівними. Як я можу порушити цю неправильну інтуїцію?
CodeYogi

17

Відгадай і доведіть

Або, як я люблю це називати, " техніка". Він може бути застосований до всіх видів посвідчень. Ідея проста:

Відгадайте рішення та доведіть його правильність.

Це популярний метод, мабуть, тому що він зазвичай вимагає певної творчості та / або досвіду (добре для демонстрації), але мало механіки (виглядає елегантно). Мистецтво тут - робити добрі, освічені здогадки; доказом є (у нашому випадку) зазвичай більш-менш проста індукція.

При застосуванні до рецидивів типово робиться "здогад"

  • розширення рецидиву в кілька разів,
  • з'ясування якоря і
  • відгадування шаблону для проміжного ( ).

Простий приклад

s0=s1=s2=1sn=5sn3+6n2

визначення кілька разів:sn

sn=5sn3+6=5(5sn6+6)+6=5(5(5sn9+6)+6)+6 =5(5(5(51n÷3 times+6)+6)+6)+6n÷3 times

Тут шаблон легко помітити, і це призводить нас до претензії:

sn=5n3+6i=0n315i=525n364

Тепер ми доводимо тотожність за допомогою індукції. Для ми можемо встановити правильність, підключивши відповідне значення. Припускаючи, що тотожність має значення для всіх для довільного, але фіксованого , обчислюємоn n n 3n{0,1,2}nnn3

sn+3=5sn+6=5(525n364)+6=525n3+164=525n+3364

що доводить тотожність силою індукції.

Якщо ви спробуєте скористатися цим способом у більш задіяних рецидивах, ви швидко зіткнетесь з головним недоліком цього методу: це може бути важко бачити візерунок або конденсувати його до приємної закритої форми.

Асимптотика

Можна використовувати цей метод і для асимптотиків. Однак майте на увазі, що вам потрібно вгадати константи символів Ландау, оскільки повинна бути одна константа, яка встановлює межу для всіх , тобто постійний фактор не може змінюватися під час індукції.n

Розглянемо, наприклад, повторення періоду виконання Mergesort, спрощене для випадку ¹:n=2k

T(1)=T(0)=0T(n)=2T(n/2)+n1n1

Ми здогадуємось, що з постійною , тобто . Доводимо це індукцією над ; індуктивний крок виглядає приблизно так:T(n)O(nlogn)c=1T(n)nlognk

T(n)=2T(n/2)+n12n2logn2+n1=nlognnlog2+n1<nlogn


  1. Для не спадаючих послідовностей натуралів кожна нескінченна послідовність має такий самий асимптотичний ріст, що і вихідна послідовність.

15

Метод Акра-Бацці

Метод Акра-Бацци дає асимптотику для повторень вигляду: Це охоплює звичайні повтори та перемоги, але також випадки, коли поділ неоднаковий. "Умови " можуть забезпечити поділи, які не виходять, наприклад, точними. Умови застосування:

T(x)=1ikaiT(bix+hi(x))+g(x)for xx0
hi(x)
  • Існує достатньо базових випадків, щоб продовжити рецидив
  • і все константиaibi
  • Для всіх ,iai>0
  • Для всіх ,i0<bi<1
  • |g(x)|=O(xc) для деякої постійної якcx
  • Для всіх ,i|hi(x)|=O(x/(logx)2)
  • x0 - константа

Зауважте, що , і як функція пилообразования завжди між 0 і 1, замінюючи (або як відповідне) задовольняє умовам .bix=bix{bix}{u}=uubixbixhi

Знайдіть таким, що: Тоді асимптотична поведінка як задається через: з "досить великим", тобто є так що для всіх .p

1ikaibip=1
T(x)x
T(x)=Θ(xp(1+x1xg(u)up+1du))
x1k1>0
(2)g(x/2)k1g(x)
x>x1

Приклад А

Як приклад, візьміть рекурсію для , де : Умови задоволені, нам потрібно : Як пощастить, . Таким чином, у нас є: n5T(0)=T(1)=T(2)=T(3)=T(4)=17

T(n)=9T(n/5)+T(4n/5)+3nlogn
p
9(15)p+(45)p=1
p=2
T(n)=Θ(n2(1+3n3uloguu3du))=Θ(n2)

оскільки з ми виконуємо для всіх . Зауважте, що оскільки інтеграл сходиться, навіть якщо ми використовуємо інші константи, наприклад , як нижню межу, законно використовувати і ці; різниця зникає в .k112(1log2log3)(2)x31Θ

Приклад В

Іншим прикладом є такий для : Маємо , перевірити. Ми маємо, що є один , , який перевіряє. Якщо припустити, що є дійсно та / або , мається на увазі також перевірити. Тому нам потрібно: Таким чином, , і: n2

T(n)=4T(n/2)+n2/lgn
g(n)=n2/lnn=O(n2)a1=4b1=1/2n/2n/2n/2hi(n)
a1b1p=4(1/2)p=1
p=2
T(n)=Θ(n2(1+2nu2duu3lnu))=Θ(n2(1+2nduulnu))=Θ(n2lnlnn)
Ми застосовуємо аналогічний трюк, як вище нижня межа інтеграла, лише те, що ми використовуємо оскільки інтеграл не збігається за .21

( Вдячність визнана допомога максимумів з алгеброю)


1
Я перевірив оригінал паперу. Вони мають технічне обмеження на нижній межі інтеграла; Ваша версія (цитуючи опитування Мелхорна?) явно вимагає, щоб інтеграл сходився. Оскільки я думаю, що початковий стан простіше перевірити, я змінив твердження та приклади відповідно, будь ласка, перевірте.
Рафаель

1
Крім того, оригінальний папір не дає версії з ; це взято з рукопису Лейтона? Чи є у вас рецензовані посилання на це? Чи варто переходити до версії, поданої в документі Akra & Bazzi 1998 року? hi
Рафаель

1
Я натрапив на те, що здається невідповідністю теореми . Може, ви знаєте відповідь?
Рафаель

11

Підсумки

Часто стикається з повторенням форми де є монотонним. У цьому випадку ми можемо розширити і так задати вихідне значення , щоб оцінити нам потрібно оцінити суму .

T(n)=T(n1)+f(n),
f(n)
T(n)=T(c)+m=c+1nf(m),
T(c)T(n)f(c+1)++f(m)

Не зменшуєтьсяf(n)

Коли монотонно не спадає, ми маємо очевидні межі Ці межі найкраще можливі в тому сенсі, що вони щільні для деяких функцій: верхня межа для постійних функцій, а нижня межа для крокових функцій ( для і для ). Однак у багатьох випадках ці оцінки не дуже корисні. Наприклад, коли , нижня межа а верхня межа , тому вони досить далеко одна від одної.f(n)

f(n)m=c+1nf(m)(nc)f(n).
f(m)=1mnf(m)=0m<nf(m)=mn(nc)n

Інтеграція

оцінку дає інтеграція: Для це дає правильне значення суми до рівня нижчого порядку: Коли ми можемо обчислити суму чітко, але у багатьох випадках явне обчислення є важким. Наприклад, коли антидериват є , і так

cnf(x)dxm=c+1nf(m)c+1n+1f(x)dx.
f(m)=m
12n212c2m=c+1nm12(n+1)212(c+1)2.
f(m)=mf(m)=mlogmf(1/2)x2logx(1/4)x2
m=c+1nmlogm=12n2logn±Θ(n2).

Формула Ейлера-Маклорена дає кращі оцінки. Ця формула може бути використана, наприклад, для доведення сильних форм формули Стірлінга, шляхом оцінки суми .logn!=m=1nlogm

не збільшуєтьсяf(n)

У деяких випадках є монотонним, що не збільшується. Тривіальні оцінки стають а інтегральні оцінки Наприклад, для , використовуючи отримуємо f(n)

f(1)m=c+1nf(m)(nc)f(1),
c+1n+1f(x)dxm=c+1nf(m)cnf(x)dx.
f(m)=1/mf(m)=logm
m=c+1n1m=logn±Θ(1).

Ця відповідь стосується вирішення рецидивів, а не оцінки сум (що може бути корисним для вирішення повторень); техніка є дуалом сум Рімана . Він також повинен працювати з іншими формами, такими як для постійного ? T(nd)d
Рафаель

Право, також можна вирішити таким чином. T(n)=cT(nd)+f(n)
Yuval Filmus

9

Sedgewick і Flajolet провели велику роботу з аналітичної комбінаторики , що дозволяє вирішити рецидиви асимптотично за допомогою комбінації генеруючих функцій та складного аналізу. Їх робота дозволяє вирішити багато рецидивів автоматично, і це було реалізовано в деяких системах комп'ютерної алгебри.

Цей підручник з цього питання написали Флайолет та Седжевік і є чудовою довідкою. Дещо простіша експозиція, орієнтована на програми для аналізу алгоритму, - це текст Седжевіка та Флайолета.

Сподіваюся, це допомагає!


4
Це приємна довідка, але ми хочемо зібрати методи доступним способом. Чи можете ви детально представити один конкретний метод?
Рафаель

9

Можливо, трапляються випадки, коли виникає такий дивний рецидив: Якщо ти такий, як я, ти зрозумієш, що не можеш використовувати Теорему Магістра, і тоді ти можеш подумати, " хммм ... можливо, аналіз дерева рецидивів міг би спрацювати ". Тоді ти зрозумієш, що дерево починає швидко накопичуватися. Після деяких пошуків в Інтернеті ви побачите, що метод Акра-Бацци спрацює! Тоді ви насправді починаєте вивчати це і розумієте, що насправді не хочете займатися всією математикою. Якщо ви були подібними до мене до цього моменту, ви будете раді дізнатися, що існує простіший спосіб.

T(n)={cn<72T(n5)+4T(n7)+cnn7


Теорема нерівномірного розщеплення, частина 1

Нехай і - позитивні константи.ck

Тоді нехай такі позитивні константи, що .{a1,a2,,ak}1kai<1

Ми також повинні мати повторення форми (як наш приклад вище):

T(n)c0<n<max{a11,a21,,ak1}T(n)cn+T(a1n)+T(a2n)+T(akn)nmax{a11,a21,,ak1}

Претензія

Тоді я стверджую, що де - константа (наприклад, лінійна асимптотика) і:T(n)bnb

b=c1(1kai)

Доведення індукцією

Основи :n<max{a11,a21,,ak1}T(n)c<b<bn

Індукція : Припустимо, що істинно для будь-якого , ми маємо тодіn<n

T(n)cn+T(a1n)+T(a2n)++T(akn)cn+ba1n+ba2n++bakncn+ba1n+ba2n++bakn=cn+bn1kai=cncn1kai1(1kai)+cn1kai1(1kai)=cn1(1kai)=bn

Тоді маємо .T(n)bnT(n)=O(n)

Приклад

T(n)={cn<72T(n5)+4T(n7)+cnn7
Спочатку перевіряємо коефіцієнти всередині рекурсивної суми викликів до меншої одиниці:
1>1kai=15+15+17+17+17+17=25+47=3435

Далі перевіряємо, що базовий випадок менший, ніж макс зворотних коефіцієнтів:

n<max{a11,a21,,ak1}=max{5,5,7,7,7,7}=7

При виконанні цих умов ми знаємо, що де - константа, дорівнює: Тому у нас є: T(n)bnb

b=c1(1kai)=c13435=35c
T(n)35cnT(n)cnT(n)=Θ(n)


Теорема нерівномірного розщеплення, частина 2

Аналогічно ми можемо довести межу для, коли . Доказ буде випливати з того самого формату:1k=1

Нехай і - позитивні константи такі, що .ckk>1

Тоді нехай такі позитивні константи, що .{a1,a2,,ak}1kai=1

Ми також повинні мати повторення форми (як наш приклад вище):

T(n)c0<n<max{a11,a21,,ak1}T(n)cn+T(a1n)+T(a2n)+T(akn)nmax{a11,a21,,ak1}

Претензія

Тоді я стверджую, що (ми вибираємо base оскільки буде коефіцієнтом розгалуження дерева рекурсії), де і є константами (наприклад, асимптотично лінійна ) такий, що:T(n)αnlogkn+βnlogkkαβ

β=c
і
α=c1kailogkai1

Доведення індукцією

Основи :n<max{a11,a21,,ak1}T(n)c=β<αnlogkn+βn

Індукція : Припустимо, що істинно для будь-якого , ми маємо тодіn<n

T(n)cn+T(a1n)+T(a2n)++T(akn)cn+1k(αainlogkain+βain)=cn+αn1k(ailogkain)+βn1kai=cn+αn1k(ailogknai1)+βn=cn+αn1k(ai(logknlogkai1))+βn=cn+αn1kailogknαn1kailogkai1+βn=αn1kailogkn+βn=αnlogkn+βn

Тоді маємо .T(n)αnlogkn+βnT(n)=O(nlogn)

Приклад

Давайте змінимо цей попередній приклад, ми використовували лише крихітний біт:

T(n)={cn<352T(n5)+4T(n7)+T(n35)+cnn35

Спочатку перевіряємо коефіцієнти всередині рекурсивної суми викликів до однієї:

1=1kai=15+15+17+17+17+17+135=25+47+135=3535

Далі перевіряємо, що базовий випадок менший, ніж макс зворотних коефіцієнтів:

n<max{a11,a21,,ak1}=max{5,5,7,7,7,7,35}=35

З урахуванням цих умов ми знаємо, що де і - константа, що дорівнює: Тому у нас є: T(n)αnlogn+βnβ=cα

b=c1kailogkai1=c2log755+4log777+log735351.048c
T(n)1.048cnlog7n+cnT(n)=O(nlogn)


6

Перевіривши цю публікацію ще раз, я здивований, що тут ще немає.

Перетворення домену / зміна змінних

У роботі з рецидивами іноді корисно мати можливість змінити свій домен, якщо незрозуміло, наскільки глибоко буде проходити стек рекурсії.

Наприклад, візьміть такий повтор:

T(n)=T(22loglogn)+logloglogn

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

Спочатку у нас є:

  1. n , то
  2. 22loglogn , то
  3. 22loglog(22loglogn) тощо.

Завданням перетворення домену тепер буде змінити наше повторення на еквівалент таким, що замість перерахованих вище переходів у нас просто .S(k)k,k1,k2,

Наприклад, якщо дозволити , то це те, що ми отримаємо для нашого вище повторення: Тоді ми можемо просто переписати його як: Тоді все, що вам потрібно зробити, це перетворити назад в щоб отримати: n=2222k

T(2222k)=T(22loglog2222k)+logloglog(2222k)=T(2222k1)+2k
T(k)=T(k1)+2k=i=1k2k=2k+11
kn
T(n)=2(loglogloglogn)+11=O(logloglogn)


На цьому прикладі ми можемо бачити свою мету.

Припустимо, Для деякої постійної і функції і .

T(n)={h(1)n=1aT(f(n))+h(n)otherwise
af(n)h(n)

Зараз ми намагаємося знайти деяку функцію і такою, що g(k)=nf(g(k))=g(k1)

T(g(k))=aT(f(g(k)))+h(g(k))=aT(g(k1))+h(g(k))

Більш загально, ми хочемо, щоб де - це повторне застосування на , разів. (наприклад, ). Це дозволить виконувати функцію "ітерації". Там, де на глибині рекурсії виконана робота просто .f(i)(n)=g(ki)f(i)(n)fnif(2)(n)=f(f(n))g(k)ih(g(ki))

Тоді ми можемо легко перетворити це в так що Тоді нам залишається тільки турбуватися про підсумовування для всіх до заданого базового випадку. Тобто S(k)=T(g(k))

S(k)=aS(k1)+h(g(k))
h(g(k))k
S(k)=i=g1(1)kakih(g(i))

Якщо ми можемо визначити для деякої закритої форми функції, то можемо визначити як S(k)=γ(k)γT(n)

T(n)=γ(g1(n))

Тоді ми використовуємо це для отримання зв’язку на одним із інших вищевказаних методів. Ви, очевидно, можете трохи змінити цей метод відповідно до вашої специфікації, але в цілому ви намагаєтесь знайти ітераційну функцію щоб перетворити у просту рекурсію.T(n)g(k)T(n)

Я не знаю точного способу визначення на даний момент, але я продовжуватиму думати про це та оновлювати, якщо воно стане зрозумілішим (або якщо у когось із коментаторів є якісь поради!). Я в основному знаходив свої функції шляхом спроб і помилок у минулому (див. Сюди , тут , тут , і ось приклади).g(k)g(k)


1
Чи існують обмеження на , та / або ? Я запитую конкретно, тому що подібні трюки з заміною фольклору іноді не спрацьовують, коли йдеться про позначення Ландау, що викликає занепокоєння, якщо справді завжди правильна відповідь. fghγg1
Рафаель

@Raphael, це частина, в якій я не зовсім впевнений. Є кілька речей, які я думаю, що нам потрібно забезпечити рівнозначність. 1) Глибина рекурсії однакова, це можна забезпечити і . 2) робота, виконана на кожному рівні рекурсії, однакова, що, на мою думку, виконується а потім . Основна ідея цього - просто перетворити на суму, а саме . Перетворення з в Я також не впевнений на 100% (у мене немає доказів), але я не можу зрозуміти, чому це було б неправильно. Думки? f(g(k))=g(k1)g(k)=ng(k)=nh(g(k))=h(n)T(n)i=ckh(g(i))γ(k)γ(g1(n))
Райан

@Raphael ви також можете розглянути випадок, коли замість , то перетворення в повинно бути більш прямим вперед. Легко довести, я думаю, якщо ви просто проявите рівнозначність у підсумовуванні. Ви, мабуть, зіткнулися б із якимись смішними проблемами з позначенням Ландау тут, але якщо ви вийшли з нього Ландау і залишилися лише з точною рівністю, я думаю, це повинно бути добре. S(k)=γ(k)ΘT(n)=γ(g1(n))
ryan

@Raphael Я відредагував це лише для використання рівності, тому позначення ландау не повинні це псувати. Також узагальнено трохи більше. Який ви могли б навіть узагальнити трохи більше, щоб використовувати функцію замість константи . Тоді замість у сумі, просто додайте . a a k - i β ( g ( i ) )β(n)aakiβ(g(i))
ryan

5

Є ще один підхід, який працює для простих відносин рецидиву: попросіть Вольфрам Альфа вирішити повтор для вас.

Наприклад, спробуйте ввести f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2)Wolfram Alpha. Ви отримаєте рішення із посиланням на числа Фібоначчі. Або спробувати f(1)=1, f(n)=f(n-1)+nабо f(1)=1, f(n)=2*f(n-1)+3*nабо f(n)=f(n-1) + 2 f(n-2), f(1)=1, f(2)=3для інших прикладів. Однак будьте попереджені: Вольфрам Альфа може вирішити кілька дуже простих рецидивів, але він розпадається на більш складні.

Такий підхід дозволяє уникнути потреби у будь-якому мисленні, яке можна розглядати як помилку чи особливість.


3
Я дійсно думаю , що мета цього сайту була б пояснити , як комп'ютерна алгебра робить такі речі, щоб не виступати за його сліпе використання. Але інструменти є корисними, так корисні в тому , що один , ймовірно , слід завжди намагатися їх , перш ніж «витрачати» час (в «практиці»).
Рафаель

З мого власного досвіду спроба використовувати комп’ютерну алгебру без будь-якого відчуття того, що є "важким" чи "легким", не дає вам дуже далеко. Особливо в алгоритмовому аналізі може знадобитися деякий масаж. Я не знаю, як ви це зробите, не знаючи, як самостійно вирішити рецидиви. (Що стосується мети цього веб-сайту, існує декілька точок зору. Факт: поки що "це комусь корисно " було недостатньо для виправдання посади.)
Рафаель

5

Випадок 2 основної теореми, як зазвичай заявлено, обробляє лише повторення вигляду в якому для . Наступна теорема, взята з подачця Джефрі Леона, дає відповідь на негативний :T(n)=aT(n/b)+f(n)f(n)=Θ(nlogablogkn)k0k

Розглянемо повторність з відповідним базовим випадком.T(n)=aT(n/b)+f(n)

  1. Якщо для тоді .f(n)=O(nlogbalogc1n)c<0T(n)=Θ(nlogba)

  2. Якщо для тоді .f(n)=Θ(nlogbalogc1n)c=0T(n)=Θ(nlogbaloglogn)

  3. Якщо для то ).f(n)=Θ(nlogbalogc1n)c>0T(n)=Θ(nlogbalogcn

Доказ використовує метод повторної підстановки, як ми зараз ескізуємо. Припустимо, що і . Тоді для a сила , Тепер розглянемо справи окремо. Коли , ряд сходиться, і так . Коли , сума є гармонічною сумою , і такf(n)=nlogbalogbc1nT(1)=0nblogba)c=0

T(n)=i=0logbn1ai(nbi)logbalogbc1(nbi)=i=0logbn1nlogba(logbni)c1=nlogbaj=1logbnjc1.
c<0j=0jc1T(n)=Θ(nlogba)c=0Hlogbn=log(logbn)+O(1)T(n)=Θ(nlogbaloglogn) . Коли , ми можемо наблизити суму за допомогою інтеграла: і так .c>0T(n)=Θ(nlogbalogcn)
j=1logbn0logbnxc1dx=xcc|0logbn=logbcnc,
T(n)=Θ(nlogbalogcn)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.