Решение или аппроксимация рекуррентных отношений для последовательностей чисел


90

В информатике нам часто приходится решать рекуррентные соотношения , то есть находить замкнутую форму для рекурсивно определенной последовательности чисел. При рассмотрении времени выполнения нас часто интересует в основном асимптотический рост последовательности .

Примеры

  1. Время выполнения хвостовой рекурсивной функции, понижающейся до от чье тело занимает время :0nf(n)

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

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

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

  3. Количество слов Дика с парами скобок:n

    C0=1Cn+1=i=0nCiCni

  4. Периодичность выполнения слияния в списках длины :n

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

Каковы методы решения рецидивирующих отношений? Мы ищем

  • общие методы и
  • методы для значительного подкласса

также как и

  • методы, которые дают точные решения и
  • методы, которые обеспечивают (ограничивают) асимптотический рост.

Это должно стать справочным вопросом. Пожалуйста, оставьте один ответ для каждого метода и предоставьте общее описание, а также иллюстративный пример.


9
Эти заметки могут быть полезны. (Но нет, я не буду транскрибировать их в ответы.)
Джефф

Ответы:


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
Если вам нужно точное решение для , это тоже не сложно (здесь), если немного утомительно; получаем . На самом деле, смущает меня, поэтому я предпочитаю точный вариант. Пески суммы терминов Ландау . Т ( п ) = 2 ( п + 1 ) Н п + ( Т ( 0 ) - 3 ) п + Т ( 0 ) Σ п я = 1 Θ ( 1 / я ) = Θ ( Н п )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
Джефф

28

Генерация функций

Каждая серия чисел соответствует производящей функции . Часто из рекуррентности может быть удобно получено вытащить свои коэффициенты - элементы ряда.

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

Метод

Пусть серия чисел. Тогда формальные степенные ряды(an)nN

A(z)=n=0anzn

является обычной производящей функцией ¹ of . Коэффициенты в разложении в ряд равны последовательности, т.е. . Например, обычная производящая функция известных каталонских чисел имеет вид(an)nNA(z)[zn]A(z)=an Cn

C(z)=114z2z .

Определение также является нашим анзацем для решения рекуррентности. Это лучше всего работает для линейных повторений, поэтому для простоты предположим повторение видаA

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

для некоторых фиксированных и - функция, независимая от всех . Теперь мы просто вставляем в анзац и якоря, и рекурсивную часть, то естьb1,,bkRf(n):NNai

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

Используя механику манипулирования суммой, свойства формальных степенных рядов и известные тождества ², последняя правая часть должна быть приведена в замкнутые формы, обычно в терминах . Полученное уравнение (часто) может быть решено для . Последовательное расширение результата (который может быть легко получен, известен или иным образом доступен) по существу является решением.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

быть характеристическим полиномом (рецидива). Кроме того, пусть (попарно различающиеся) нули указанного многочлена с кратностью соответственно. Тогда желаемый коэффициент даетсяλ1,,λlri

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

с неизвестным . Поскольку характеристический многочлен имеет степень , существует ровно (комплексные) нули, то есть сумма к . Следовательно, недостающие коэффициенты могут быть определены путем решения системы линейных уравнений с уравнениями, полученными путем приравнивания приведенной выше формулы к любому из (например, якорям).bi,jkkrikkkan

асимптотике

Добраться до замкнутой формы для обычно легко. Выражая это в порождающих функциях, мы знаем, что коэффициенты (как мы это делали в примере) быстро становятся сложными. Примерами являются сверху и один для числа слов Дика, упомянутых в вопросе.A(z)C(z)

Можно использовать сложный механизм анализа, в частности, анализ сингулярностей, чтобы получить асимптотику для коэффициентов; Ключевые слова включают метод Дарбу и метод седловой точки. Они основаны на теореме вычетов и интегральной формуле Коши . Смотрите [6] для деталей.


  1. Вы можете делать подобные вещи с экспонентой , Дирихле и некоторыми другими производящими функциями. Что работает лучше всего, зависит от последовательности и, в частности, от того, найдете ли вы необходимые закрытые формы.
  2. Например, из Шпаргалки TCS или [3].
  3. Генерирующая функциональность Х. Уилфа (1994, 2-е изд.) - доступна для бесплатного скачивания
  4. Конкретная математика Р. Л. Грэма, Д. Е. Кнута и О. Паташника (1994, 2-е изд.)
  5. Введение в анализ алгоритмов Р. Седжвика и П. Флажолета (2-е издание, 2013) - доступно для бесплатной загрузки
  6. Аналитическая комбинаторика P. Flajolet и R. Sedgewick (2009) - доступна для бесплатного скачивания

21

Основная теорема

Основная теорема дает асимптотику для решений так называемых повторений « разделяй и властвуй» , то есть таких, которые делят их параметр на пропорциональные порции (вместо того, чтобы обрезать константы). Они обычно возникают при анализе (рекурсивных) алгоритмов «разделяй и властвуй», отсюда и название. Теорема популярна, потому что ее часто невероятно легко применять. С другой стороны, его можно применять только к повторениям следующей формы:

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)

    для некоторых и .c<1n

что подразумевает асимптотику

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

соответственно. Обратите внимание, что базовые случаи здесь не указаны или не используются; это имеет смысл, учитывая, что мы исследуем только асимптотическое поведение. Мы молча предполагаем, что они являются некоторыми константами (что еще они могут быть. Какие константы, которые мы не видим, не имеют значения, все они исчезают в .Θ

Примеры

  1. Рассмотрим повторение

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

    С и - обратите внимание, что мы видим, что первый случай применяется с . Следовательно, .f(n)=n,a=4b=3logba1.26ε=0.25TΘ(nlog34)=Θ(n1.261)

  2. Рассмотрим повторение

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

    При и - обратите внимание, что мы видим, что второй случай применяется с . Следовательно, .f(n)=n,a=2b=2logba=1k=0TΘ(nlogn)

  3. Рассмотрим повторение

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

    При и - обратите внимание, что мы видим, что третий случай применим при и . Следовательно, .f(n)=n,a=3b=4logba0.79ε=0.2c=1TΘ(n)

  4. Рассмотрим повторение

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

    Здесь мы имеем , и- во многих стандартных примерах будет многочлен , но это не правило. У нас есть , и третий случай применяется снова. В этом случае, тем не менее, мы можем выбрать любой и качестве для всех . Следовательно, .a=16b=4f(n)=n!flogba=2εc>0n!Ω(nk)kTΘ(n!)

дальнейшее чтение

  • Вполне возможно, что ни один из случаев основной теоремы не применим. Например, подзадачи могут не иметь одинаковый размер или иметь более сложную форму. Существуют некоторые расширения теоремы Мастера, например, Akra-Bazzi [1] или Roura [2]. Существует даже версия, которая работает для дискретных повторений (т. Е. Полы и потолки используются для рекурсивных параметров) и обеспечивает более четкие результаты [3].

  • Как правило, прежде чем вы сможете применить теорему Мастера, вы должны втиснуть реальное рекуррентное отношение, которое у вас есть, в форму. Общие преобразования, которые сохраняют асимптотику, включают в себя падение этажей и потолков, а также допущение . Будьте осторожны, чтобы не сломать вещи здесь; обратитесь к [4] раздел 4.6 и этот вопрос для деталей.n=bk


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

Это может быть глупый вопрос, но мне часто не удается удержать ментальную модель, когда а не равно 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{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)