Algoritmų sudėtingumą galima tirti šiais būdais:
- Invariantų tyrimas;
- Asimptotinės išraiškos;
Algoritmų laiko sudėtingumas
Laiko sudėtingumo skaičiavimas vertina kiek laiko reiktų tam tikrai problemai su tam tikru duomenų dydžiu spręsti efektyviausiu algoritmu. Tarkime, kad turint
n bitų duomenų kiekį, problema išsprendžiama per
n² žingsnių; tokia problema yra
n² sudėtingumo. Iš tiesų, kiekvienas algoritmo įgyvendinimas spręstų problemą skirtingu žingsnių skaičiumi, todėl sąlyginis žingsnių skaičius (eilė) žymima
O(n²).
Asimptotinis žymėjimas
- žymėjimas: Asimptotiškai "viršutinė" riba.
- Apibrėžtis: jei egzistuoja konstantos ir tokios kad visiems .
dažniausia naudojamas algoritmo blogiausiam atvejui apibūdinti.
Big_oh2.png
- žymėjimas: Asimptotiškai "apatinė" riba.
- Apibrėžtis: jei egzistuoja konstantos ir tokios kad visiems .
dažniausia apibūdina algoritmo geriausią atvejį arba apatinę ribą.
Big_omega2.png
- žymėjimas: Asimptotiškai "ankšta" riba.
- Apibrėžtis: jei egzistuoja konstantos ir , tokios kad visiems .
Big_theta2.png
Asimptotiškai "ankštai" ribai taip pat galioja savybė, . Asimtotiškai "viršutinė" riba dažnai yra neteisingai naudojama ankštai ribai apibrėžti, kuri nepadengia atvejo.
- žymėjimas: Asimptotiškai "negriežta viršutinė" riba.
- Apibrėžtis: jei egzistuoja konstantos ir , tokios kad visiems .
- žymėjimas: Asimptotiškai "negriežta apatinė" riba.
- Apibrėžtis: jei egzistuoja konstantos ir , tokios kad visiems .
Žymėjimo ypatumai
Žymėjimas
, kai vietoj
gali būti
yra konceptualiai klaidingas, tačiau yra plačiai naudojamas analizuojant algorithmų sudėtingumą. Korektiškumo dėlei reikėtų vartoti
O žymėjimai
Dažniausi algoritmų sudėtingumo žymėjimai ir jų pavadinimai:
| Žymėjimas
| Sudėtingumas
| Klasė
|
| O(1)
| konstantinis
| Polinominė (P)
|
| O(log n)
| logaritminis
|
| O(nc)
| polilogaritminis
|
| O(n)
| tiesinis
|
| O(n · log n)
| supratiesinis
|
| O(n²)
| kvadratinis
|
| O(nc)
| polinominis, kartais geometrinis
|
| O(cn)
| eksponentinis
| Eksponentinė (NP)
|
| O(n!)
| faktorialas
|
| O(nn)
| ?
|
Pavyzdžiai
Paprasčiausių algoritmų sudėtingumo pavyzdžiai:
Matematika |
Algoritmai
Komplexitätstheorie | Θεωρία Πολυπλοκότητας | Computational complexity theory | Complejidad computacional | Complexité algorithmique | סיבוכיות | 計算複雑性理論 | Złożoność obliczeniowa | Komplexitetsteori | ทฤษฎีความซับซ้อนในการคำนวณ | 計算複雜性理論