Tidskompleksitet
Denne artikel omhandler svært stof. Der er endnu ikke taget hensyn til ikke-eksperter. |
Tidskompleksitet er inden for datalogien et udtryk for, hvordan tidsforbruget i en algoritme stiger, når størrelsen af input øges.
Tiden det tager at eksekvere et program afhænger både af programmet, input og computeren der bruges. For at undgå afhængigheden af computeren tæller man ofte antallet af simple operationer der udføres.[1] Eksempler på simple operationer kan være plus, gange eller sammenligning af tal.
Hvis der er flere input af samme størrelse, hvor algoritmen udfører et forskelligt antal operationer, angives det værste tilfælde ofte.[2] Antallet af operationer angives ofte som en funktion af størrelsen af inputtet. O-notation anvendes ofte ved angivelse af tidskompleksitet, da funktionerne man arbejder med ofte, er komplekse.
I en analyse af en algoritme bruges ofte pessimistiske antagelser om køretiden. En analyse af tidskompleksiteten af en printer kunne f.eks. bygge på, at printeren skal have nyt blæk før udskrivning af hver enkelt side. Dette kan give dårlige og misvisende resultater. For at imødegå dette problem kan en amortiseret analyse bruges.[3] I en amortiseret analyse, vil man udregne hvor ofte den dyre operation, her at skifte blæk, udføres og fordele omkostningen på de enkelte operationer. Hvis det at skifte blæk tager 20 operationer og gøres ved hver tiende udskrift vil det amortiseret koste to operationer per udskrift. Det er vigtigt at huske, at der stadig er tale om en analyse af det værste tilfælde.
O-notation
[redigér | rediger kildetekst]O-notation bruges til at beskrive, hvordan funktioner opfører sig, når input går mod uendeligt. Intuitivt kan det forstås som en form for afrunding, hvor man beskriver udviklingen af en funktion for tilstrækkeligt store input. O-notation bruges ofte i datalogi til at beskrive tidskompleksiteten af algoritmer.[4]
Som eksempel kan funktionen bruges. I O-notation vil man beskrive den som . Dette betyder at der findes en konstant således at vokser hurtigere end . Siden vi beskriver øvre grænser er også , og så videre. Den mindste funktion angives dog ofte, da dette er mere præcist. Funktionen er dog ikke , da altid blive større end , når bliver stor nok.
Udover store O-notation som beskrevet her findes også -notation.[5] Her er man interesseret i nedre grænser. Funktionen er således , , og så videre da udvikler sig hurtigere end dem. er dog ikke , da der ikke eksisterer et således at stiger langsommere end .
Endeligt findes der også o- og -notation.[6] Mens store O-notation og -notation kan ses som bløde uligheder er der her tale om skarpe uligheder. Funktionen er således , men ikke . Den er dog stadig . Formelt er kravet at for alle vil vokse hurtigere end , når , bliver stor nok. -notation er på samme måde en skarp ulighed for -notation.
Nogle eksempler for hvordan O-notationen, og de andre, skrives og hvordan algoritmens tidsforbrug øges:
| Tidskompleksitet | Beskrivelse |
|---|---|
| O(1) | Konstant tid. Operationens varighed er uafhængig af mængden af input. |
| O(N) | Tiden for operationen vokser lineært med mængden af input. |
| O(N2) | Kvadratisk tid. Tre gange så meget input giver ni gange så lang behandlingstid. |
| O(log2 N) | Logaritmisk tid. Tidsforbruget stiger logaritmisk med mængden af input. |
| O(2^N) | Eksponentiel tid. Tidforbruget stiger ekponentielt med mængden af input. |
Kompleksitetsklasserne
[redigér | rediger kildetekst]Der eksisterer forskellige klasser for algoritmers tidskompleksitet. Hovedeklasserne er:
- P: En beslutningsproblems-algoritme, som kan udførers på polynomisk tid med en Turing-maskine.
- NP: En beslutningsproblems-algoritme, som kan udførers på polynomisk tid med en nondeterministisk Turing-maskine.
- ZPP: En beslutningsproblems-algoritme, som kan udførers uden fejl på polynomisk tid med en probabilistisk Turing-maskine (f.eks. en kvantecomputer).
| Spire Denne artikel om datalogi eller et datalogi-relateret emne er en spire som bør udbygges. Du er velkommen til at hjælpe Wikipedia ved at udvide den. |
Referencer
[redigér | rediger kildetekst]- ↑ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009), "2", Introduction To Algorithms (3rd udgave), Cambridge, MA: The MIT Press, s. 25, ISBN 978-0-262-03384-8
- ↑ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009), "2", Introduction To Algorithms (3rd udgave), Cambridge, MA: The MIT Press, s. 27, ISBN 978-0-262-03384-8
- ↑ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009), "17", Introduction To Algorithms (3rd udgave), Cambridge, MA: The MIT Press, s. 451, ISBN 978-0-262-03384-8
- ↑ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009), "3", Introduction To Algorithms (3rd udgave), Cambridge, MA: The MIT Press, s. 43, ISBN 978-0-262-03384-8
- ↑ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009), "3", Introduction To Algorithms (3rd udgave), Cambridge, MA: The MIT Press, s. 48, ISBN 978-0-262-03384-8
- ↑ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009), "3", Introduction To Algorithms (3rd udgave), Cambridge, MA: The MIT Press, s. 50, ISBN 978-0-262-03384-8