Jeśli T(n)=a⋅T(⌈bn⌉)+O(nd) ale pewnych stałych a>0, b>1, d≥0 wówczas:
T(n)=⎩⎪⎪⎨⎪⎪⎧O(nd)O(ndlogn)O(nlogba):d>logba:d=logba:d<logba
<insert graph>
problem dzielimy na a podproblemów, które się dzielą też na a pod-podproblemów itd.
1 |
n |
a |
bn |
a2 |
b2n |
… |
… |
ak |
bkn |
… |
… |
alog2n |
1 |
alog2n = nlogba
koszt k-tego wiersza rekursji: O((bkn)d)⋅ak=O(nd)⋅(bda)ks koszt całego drzewa: k=0∑logbnO(nd)⋅(bda)k=O(nd)⋅k=0∑logbn(bda)k mamy ∑k=0xqk=1−q1−qx+1 dla q=1 za to dla q=1 mamy ∑k=0x1=x+1
- jest q=bda<1 wtedy T(n)=O(nd)
tylko kiedy bda<1?
na a<bd robimy logb
logba<d
- jeśli q=bda=1→T(n)=O(ndlogn)
bda=logba=d
- jeśli q=bda>1→T(n)=O(nd⋅bdalogbn)=
O(nd⋅(blogbn)dalogbn)=O(nlogba)