Скажімо, у вас є рецидив
що знаходиться в діапазоні від позитивних результатів.
T(n)={T(n−nc)+T(nc)+f(n)1n > 2otherwise
Що ми можемо зробити з цією функцією? Ну, не багато, якщо ми не накладемо на неї певні структури. Я прийшов із чисельного аналізу аналізу, який викладений числовими рецептами, який якимось чином працює, навіть коли основна проблема або недостатньо гладка (не має значення, давайте все-таки кинемо метод Ньютона при його розділених відмінностях) або занадто складна для аналізу (сортування як ця проблема). Моя реакція кишок на ці проблеми полягає в тому, щоб зробити певне рукоподібне припущення, схрестити пальці і сподіватися на краще. У цьому випадку це, здається, дає відносно хороші межі.
Зокрема, я хочу зробити два основні припущення. Одне з цих припущень є більш-менш необґрунтованим, але без нього ми не будемо дуже далеко. Інший має дещо приємну візуальну інтуїцію, яку можна, сподіваємось, рипнути, але вона все-таки більш ручна, ніж усе інше.
- Я буду вважати, що є "гладким". Досить легко побачити, що T ( n ) не скрізь диференційований. Насправді це навіть не безперервно, оскільки для f ( n ) = log ( n ) і c = 1T(n)T(n)f(n)=log(n) ,limn→2-T(n)=1іlimn→2+T(n)=2+ln2. Тому, з огляду на ітерованих картипородженіп↦√c=12limn→2−T(n)=1limn→2+T(n)=2+ln2 абоn↦n- √n↦n−−√ ,T(n)буде містити розрив уn,якщо його дерево ітерації містить2десь у своїй траєкторії. Це дуже багато розривів, це може навіть дати функцію Діріхле запустити гроші. Якщо ми доходимо до того, що ми порівнюємо поведінку функції з поведінкою прототипічного прикладу нікуди безперервної функції, чи не смішно намагатися стверджувати, що вона є "гладкою"? Що ж, виявляється, що на практиці наслідки цих розривів асимптотично зменшуються, до того, що ваш графік виглядає майже гладким, колиnn↦n−n−−√T(n)n2nпрагне до нескінченності! Тому я пропоную, щоб ми відклали свої вили і просто дивилися в іншому випадку. Зокрема, я припускаю, що у будь-якій точці інтересу яка знаходиться досить далеко від походження, T ( n ) є диференційованою або, принаймні, приблизно диференційованою навколо деякого сусідства.nT(n)
- Я також припускаю ще сильнішу позицію плавності, коли досить далеко. Припустимо, що α ( n ) є деякою підлінійною функцією, такою, що n > α ( n ) (наприклад, n c ), тоді похідна T ′ ( ξ ∈ ( n - α ( n ) , n ) не суттєво змінюється, коли α ( n ) досить повільний. Інтуїтивно зрозумілий, як nnα(n)n>α(n)ncT′(ξ∈(n−α(n),n)α(n)nзбільшується, відносний розмір сусідства зменшується (оскільки його розмір просто α ( n ) , який росте набагато повільніше, ніж n ). Врешті-решт розмір цього мікрорайону стає настільки незначним (відносно n ), що швидкість зміни T ( n ) у межах цього мікрорайону вже не змінюється все, що різко.(n−α(n),n)α(n)nnT(n)
Тепер обидва ці властивості передбачаються, і я не маю ідеї, як реально доводити будь-який жорсткий спосіб. Але, як я вже говорив раніше, давайте схрестимо пальці і сподіваємось на краще.
Почнемо із відношення рецидиву:
Тепер я припускаю, щоTдосить рівний на проміжку міжn-ncіn. Звертаючись до одного з наших класичних аналітичних інструментів, теореми середнього значення, дає нам
T(n)-T(n- n c )
T(n)T(n)−T(n−nc)ncT(n)−T(n−nc)nc=T(n−nc)+T(nc)+f(n)=T(nc)+f(n)=T(nc)+f(n)
Tn−ncn
Крім того, коли
nє достатньо великим, ми припускаємо, що
T′(ξ)приблизно однаковий протягом цього інтервалу, а значить, приймає значення будь-якої з кінцевих різниць і в цьому інтервалі. Це означає, що
T′(ξ)≈T(n)-T(n-ϵ)T(n)−T(n−nc)nc=T′(ξ∈(n−nc,n)).
nT′(ξ)
Зокрема, візьмемо
ϵ=1,щоб отримати однокрокове розділене наближення різниці
n c ( T ( n ) - T ( n - 1 ) )T′(ξ)≈T(n)−T(n−ϵ)ϵ ϵ<nc
ϵ=1
Ми можемо це зробити телескопом, щоб отримати
T(n)≈n∑kT(kc)nc(T(n)−T(n−1))T(n)−T(n−1)≈T(nc)+f(n)≈T(nc)+f(n)nc
T(n)≈∑knT(kc)kc+∑knf(k)kc
Збурення виявляє, що T ( n ) має дві асимптотичні фази, залежно від асимптотичної природи f ( z ) .T(n)T(n)f(z)
f(n)=o(nc)fncT(n)=Θ(∑knf(k)kc)∫nf(x)xcdx
f(n)=ω(nc)
(∑knT(kc)kc)+Fc(n)
Fc(n)=∫nf(x)xcdx
∫nT(xc)xcdx
∑kT(kc)kc≈∫nf(xc)xcdx=nT(ξ<nc)ξc
nT(nc)ncT(n)≤nMT(nc)nc+Fc(n)
M
(n,nc,nc2,nc3,…,nck)nck<2
T(n)≤n(∑ik−1MinciFc(nci)+Mknck)(*)
Fc(nci)T(n)=O(Fc(n)+nFc(nc)(Mn−c+M2n−c2+⋯+Mkn−ck))
k=logc(log(2)log(n))Mn−cn−ckT(n)=O(nkFc(n)Mk)
However, this bound is relatively loose, and you should refer to (*) whenever possible.
Be aware that in no way is this rigorous. I have not provided any support that this ought to work beyond some clumsy approximations. Nevertheless, if you just need a quick asymptotic guess for the sake of informal analysis, then you can actually see that this scheme works well (for large enough values of n, usually n>10 suffices) in practice.
Anyways, for all of the choices of c and f that I've tried, the following computation
T^(n)F(n)=n∑klogclogn2MknckF(nck)=∑knf(k)kc
where
M≈∑kT(kc)kcnT(nc)nc
seems to give good approximations. This technique also generalizes to recurrences of the form
T(n)=T(n−α(n))+T(β(n))+f(n)
which can be approximated with
T^(n)F(n)=n∑k#β(n)Mkαk(n)F(βk(n))=∑knf(k)α(k)
where
αk(n)=α(⋯k(α(n))) and
#β(n) denotes the number of elements of the sequence
n,β(n),β(β(n)),…,β#β(n)(n) such that the last term is between
1 and
2.