Laskennallinen kompleksisuusteoria on osa tietojenkäsittelytieteen alaa. Siinä tarkastellaan algoritmeja ja pyritään arvioimaan, kuinka monta askelta tai kuinka paljon muistia tietty algoritmi vaatii tietokoneelta. Usein havaitaan, että algoritmit, jotka käyttävät vähemmän vaiheita, saattavat vaatia enemmän muistia (tai päinvastoin: jos muistia on niukasti, laskenta voi vaatia enemmän vaiheita). Monien kiinnostavien ongelmien ratkaisemiseen tarvittavien askeleiden määrä kasvaa ongelman koon funktiona, ja kompleksisuusteoria luokittelee ja vertaa tätä kasvua.

Mitä mitataan?

Kompleksisuusteoriassa mitataan pääasiassa kahta resurssia:

  • Aikavaativuus — kuinka monta perusaskelta algoritmi tarvitsee syötteen koon n funktiona. Tavallisimmat mittarit ovat suurin mahdollinen aika (worst-case), keskiarvoaika (average-case) ja paras mahdollinen (best-case).
  • Muistivaatimukset (space complexity) — kuinka paljon työmuistia algoritmi tarvitsee samalla tavalla syötteen koon funktiona.

Näitä kuvataan usein asymptoottisesti käyttäen merkintöjä kuten Big O (O), Theta (Θ) ja Omega (Ω), esimerkiksi O(n), O(n log n), O(2^n) jne.

Aikavaativuuden luokat ja keskeiset käsitteet

  • P — luokka päätöskysymyksiä, jotka voi ratkaista deterministisellä Turingin koneella polynomisessa ajassa. Käytännössä tarkoittaa "tehokkaasti laskettavissa".
  • NP — luokka päätöskysymyksiä, joiden myönteiset vastaukset voi todistaa polynomisessa ajassa (tai joita nondeterministinen kone voi ratkaista polynomisessa ajassa). Tunnetuin avoin ongelma tässä yhteydessä on P vs NP.
  • NP-komplettiset ongelmat — vaikeimpia NP-luokan ongelmia siten, että mikä tahansa NP-ongelma voidaan muuntaa niihin polynomisessa ajassa (reduktiot). Jos yksi NP-komplettinen ongelma ratkaistaan polynomiajassa, niin kaikki NP-ongelmat ovat P:ssä.
  • PSPACE — ongelmat, jotka voi ratkaista polynomisella muistilla; sisältää P:n ja NP:n ja voi olla suurempi.
  • EXP — ongelmat, jotka voi ratkaista eksponentiaalisessa ajassa. Monet käytännössä kovimmat ongelmat kuuluvat tähän tai sen ympärille.
  • Satunnainen laskenta ja luokat kuten BPP, RP — luokat, joissa algoritmi saa käyttää satunnaisuutta; niillä on omat kiinnostavat suhteensa deterministisiin luokkiin.

Reduktiot ja täydellisyys

Reduktio tarkoittaa tapaa muuntaa yksi ongelma toiseen niin, että ratkaisun löytäminen toisesta antaa ratkaisun ensimmäiseen. Tämä mahdollistaa vaikeuksien vertaamisen: jos ongelma A voidaan polynomisesti reduktoida ongelmaan B ja B:lle on tehokas ratkaisu, myös A on tehokkaasti ratkaistavissa. Cook–Levin -lauseessa todettiin, että SAT on NP-kompletti — tämänkaltaiset tulokset ovat kompleksisuusteorian peruskiviä.

Esimerkkejä aikavaativuuksista

  • Lineaarinen haku: O(n)
  • Binäärihaku järjestetyssä taulukossa: O(log n)
  • Useimmat vertailupohjaiset lajittelualgoritmit (merge sort, heapsort): O(n log n)
  • Bruteforce-ratkaisut tietylle kombinatoriselle ongelmalle: usein O(2^n) tai jopa suurempaa

Muistivaatimukset ja trade‑offit

Monissa algoritmisissa ongelmissa on olemassa aika–muisti -tradeoff: esimerkiksi esilaskettuja taulukoita (memoization) käyttämällä voi säästää aikaa mutta kuluttaa muistia. Toisaalta memory-constrained -algoritmit pyrkivät pienentämään muistinkäyttöä, joskus kustannuksella suuremmasta ajankulutuksesta. Kompleksisuusteoria tutkii myös, mitä ongelmia voi ratkaista annetulla muistirajalla (esim. logaritmisella muistilla — L-luokka).

Laskennallinen malli

Arvioitaessa algoritmien kompleksisuutta täytyy valita laskennallinen malli. Yleisimpiä ovat Turingin koneet ja RAM-malli. Vaikka mallit eroavat teknisellä tasolla, monet kompleksisuusluokat ovat malliriippumattomia polynomisessa mittakaavassa.

Käytännön näkökulma

Vaikka teoreettiset luokat auttavat ymmärtämään ongelmien perustason vaikeutta, käytännön ohjelmistokehityksessä huomioidaan myös vakioiden merkitys, todelliset syötteen koot ja arkkitehtuurin yksityiskohdat. Heuristiikat, approksimaatioalgoritmit ja satunnaistetut menetelmät tarjoavat usein hyviä käytännön ratkaisuja NP-vaikeisiin ongelmiin.

Laajempia aiheita ja avoimia ongelmia

  • Parametrisointi ja FPT (fixed-parameter tractability) — analyysi, joka tarkastelee suorituskykyä tietyn parametrin funktiona.
  • Piirretehoisuus (circuit complexity) ja kommunikaatiokompleksisuus — vaihtoehtoisia laskentamalleja, jotka antavat lisätietoa ongelmien rakenteesta.
  • Avoimet kysymykset kuten P vs NP, suhteet satunnaistettujen ja determinististen luokkien välillä sekä kysymykset derandomisaatiosta.

Yhteenvetona: laskennallinen kompleksisuusteoria tarjoaa formalismin ja työkalut arvioida, luokitella ja vertailla ongelmien ja algoritmien resurssitarpeita. Se yhdistää teoreettisia tuloksia ja käytännön näkökulmia, ja sen tutkimus vaikuttaa sekä tietojenkäsittelytieteen peruskysymyksiin että sovellusten tehokkuuteen.