Могут быть случаи, когда вы сталкиваетесь с странным повторением, подобным этому:
Если вы похожи на меня, вы поймете, что не можете использовать основную теорему, и тогда вы можете подумать: " хммм ... может быть, анализ дерева повторений может сработать ". Тогда вы поймете, что дерево начинает расти очень быстро. После некоторых поисков в интернете вы увидите, что метод Акра-Бацци сработает! Тогда вы на самом деле начинаете изучать это и понимаете, что на самом деле не хотите заниматься всей математикой. Если вы были похожи на меня до этого момента, вы будете рады узнать, что есть более простой способ.T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Теорема о неравномерности расщепления, часть 1
Пусть и положительные постоянные.ck
Тогда пусть будут такими положительными постоянными, что .{a1,a2,…,ak}∑k1ai<1
У нас также должно быть повторение формы (как наш пример выше):
T(n)T(n)≤c≤cn+T(a1n)+T(a2n)+…T(akn)0<n<max{a−11,a−12,…,a−1k}n≥max{a−11,a−12,…,a−1k}
Запрос
Тогда я утверждаю где - постоянная (например, асимптотически линейная) и:T(n)≤bnb
b=c1−(∑k1ai)
Доказательство по индукции
Основа :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
Индукция : предположим, что истина для любого , тогда мы имеемn′<n
T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+b⌊a1n⌋+b⌊a2n⌋+⋯+b⌊akn⌋≤cn+ba1n+ba2n+⋯+bakn=cn+bn∑1kai=cn−cn∑k1ai1−(∑k1ai)+cn∑k1ai1−(∑k1ai)=cn1−(∑k1ai)=bn□
Тогда .T(n)≤bn⟹T(n)=O(n)
пример
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Сначала мы проверяем коэффициенты внутри суммы рекурсивных вызовов на единицу:
1>∑1kai=15+15+17+17+17+17=25+47=3435
Далее мы проверяем, что базовый случай меньше, чем максимум из обратных коэффициентов:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
При соблюдении этих условий мы знаем где - постоянная, равная:
Поэтому имеем:
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
Теорема о неравномерности расщепления, часть 2
Точно так же мы можем доказать оценку, когда . Доказательство будет следовать большей части того же формата:∑k1=1
Пусть и положительные постоянные такие, что .ckk>1
Тогда пусть будут такими положительными постоянными, что .{a1,a2,…,ak}∑k1ai=1
У нас также должно быть повторение формы (как наш пример выше):
T(n)T(n)≤c≤cn+T(a1n)+T(a2n)+…T(akn)0<n<max{a−11,a−12,…,a−1k}n≥max{a−11,a−12,…,a−1k}
Запрос
Затем я утверждаю, что (мы выбираем base потому что будет фактором ветвления дерева рекурсии), где и - константы (например, асимптотически линейные ) такой что:T(n)≤αnlogkn+βnlogkkαβ
β=c
и
α=c∑k1ailogka−1i
Доказательство по индукции
Основа :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
Индукция : предположим, что истина для любого , тогда мы имеемn′<n
T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+∑1k(αainlogkain+βain)=cn+αn∑1k(ailogkain)+βn∑1kai=cn+αn∑1k(ailogkna−1i)+βn=cn+αn∑1k(ai(logkn−logka−1i))+βn=cn+αn∑1kailogkn−αn∑1kailogka−1i+βn=αn∑1kailogkn+βn=αnlogkn+βn□
Тогда .T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
пример
Давайте изменим предыдущий пример, который мы использовали чуть-чуть:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
Сначала мы проверяем коэффициенты внутри суммы рекурсивных вызовов на единицу:
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
Далее мы проверяем, что базовый случай меньше, чем максимум из обратных коэффициентов:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
При соблюдении этих условий мы знаем где и - постоянная, равная:
Поэтому имеем:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)