Przestrzenie nazw
Warianty
Działania

Złożoność czasowa

Z cppreference.com
< cpp


There are different measurements of the speed of any given algorithm. Dla podanej wielkości wejścia N, mogą być opisane następująco:

NazwaSzybkośćOpisFormułaPrzykład
factorial timenajwolniejszytakes an amount of time proportional to N raised to the Nth powerN!Brute force solution to Traveling Salesman Problem
czas wykładniczywolnytakes an amount of time proportional to a constant raised to the Nth powerKNBrute force solution to Rubik's Cube
czas wielomianowyszybkitakes an amount of time proportional to N raised to some constant powerNKComparison sorts (bubble, insertion, selection sort)
czas liniowo-logarytmicznyszybszytakes an amount of time between linear and polynomialN * log(N)Liniowo-logarytmiczne sortowanie (quicksort, heapsort, mergesort)
czas liniowyjeszcze szybszytakes an amount of time directly proportional to NK * NIterowanie po tablicy
czas logarytmicznydużo szybszytakes an amount of time proportional to the logarithm of NK * log(N)Binary Search
czas stałynajszybszytakes a fixed amount of time, no matter how large the input isKArray index lookup

[edytuj] Analiza złożoności

Operacje mogą mieć różną złożoność czasową zależną od rozmiaru/zbioru danych wejściowych. Wyróżniamy następujące rodzaje analizy złożoności czasowej:

NazwaOpisPrzykład
optymistycznaPrzypadek gdy operacja wykonuje się możliwie najszybciejBubblesort (sortowanie bąbelkowe) ma optymistyczną złożoność czasową rzędu N
oczekiwanaPrzypadek gdy operacja wykonuje się w czasie charakteryzującym większość przypadkówQuicksort ma oczekiwaną złożoność czasową rzędu N * log(N)
pesymistycznaPrzypadek gdy operacja wykonuje się możliwie najwolniejQuicksort ma pesymistyczną złożoność czasową rzędu N2
pesymistyczna zamortyzowanaŚrednia z pesymistycznych czasów wykonania nieskończonej liczby operacjivector::push_back() ma zamortyzowaną pesymistyczną złożoność czasową rzędu K (stałą)

Choosing the right algorithm depends upon which cases you expect your application to encounter. For example, an application that must protect itself from malicious input will avoid naive implementations of quicksort, which has a worst-case time complexity of N2 despite having one of the fastest average-case time complexities compared to all other sorts.