Azt vizsgáljuk, hogy a bemenet növekedésével hogyan nő a számítási igény.
Jelölések:
A következő ábrán néhány lehetséges lefutást látunk.
A függőleges tengely egy algoritmus lehetséges a számításigényét jelképezi. A futási idő, vagy a processzoridő nincs az ábrán.
Az ábra jobb felső sarkában azt látjuk, hogyan állítottam elő a gnuplot programmal a függvényeket. A Θ jelölés [théta].
A log2 n kifejezést néha így rövidítik: log n.
A gnuplot parancs:
plot [1:40] [-10:40] gamma(x+1), x**2, x*log(x)/log(2),x,log(x)/log(2),1
A gamma() függvény a faktoriális általánosítása.
A gnuplot logaritmusfüggvényei:
n | n2 | n! |
---|---|---|
1 | 1 | 1 |
2 | 4 | 2 |
3 | 9 | 6 |
4 | 16 | 24 |
5 | 25 | 120 |
6 | 36 | 720 |
7 | 49 | 5040 |
8 | 64 | 40 320 |
9 | 81 | 362 880 |
10 | 100 | 3 628 800 |
A legrosszabb esetet nagy O-val jelöljük.
Néhány algoritmus legrosszabb esete:
A fenti függvényeken kívül szokás még a harmadik hatvány, az exponenciális függvény használata az algoritmusok jellemzésére. Hasonlítsuk össze ezeket a második hatvánnyal és a faktoriálissal.
A függőleges tengelyt megnöveltem 1000-re, vagyis nagy elem szám esetén a legrosszabb eset a faktoriális marad. Az eltérés azonban elég kicsi a faktoriális és az exponenciális között.
Adatstruktúra | Időigény | |||||||
---|---|---|---|---|---|---|---|---|
Átlag | Legrosszabb | |||||||
Elérés | Keresés | Beszúrás | Törlés | Elérés | Keresés | Beszúrás | Törlés | |
Tömb | Θ(1) | Θ(n) | Θ(n) | Θ(n) | O(1) | O(n) | O(n) | O(n) |
Verem | Θ(n) | Θ(n) | Θ(1) | Θ(1) | O(n) | O(n) | O(1) | O(1) |
Sor | Θ(n) | Θ(n) | Θ(1) | Θ(1) | O(n) | O(n) | O(1) | O(1) |
Egyszeresen linkelt lista | Θ(n) | Θ(n) | Θ(1) | Θ(1) | O(n) | O(n) | O(1) | O(1) |
Kétszeresen linkelt lista | Θ(n) | Θ(n) | Θ(1) | Θ(1) | O(n) | O(n) | O(1) | O(1) |
Bináris keresés | Θ(log(n)) | Θ(log(n)) | Θ(log(n)) | Θ(log(n)) | O(n) | O(n) | O(n) | O(n) |
B-Tree | Θ(log(n)) | Θ(log(n)) | Θ(log(n)) | Θ(log(n)) | O(log(n)) | O(log(n)) | O(log(n)) | O(log(n)) |
Hash tábla | n/a | Θ(1) | Θ(1) | Θ(1) | n/a | O(n) | O(n) | O(n) |
Rendező algoritmusok | |||
---|---|---|---|
Algoritmus | Időigény | ||
Legjobb | Átlagos | Legrosszabb | |
Gyors-rendezés | Ω(n log(n)) | Θ(n log(n)) | O(n^2) |
Buborék-rendezés | Ω(n)) | Θ(n^2) | O(n^2) |
Beszúrásos rendezés | Ω(n) | Θ(n^2) | O(n^2) |
Shell rendezés | Ω(n log(n)) | Θ(n(log(n))^2) | O(n(log(n))^2) |