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:

Nazwa Szybkość Opis Formuła Przykład
factorial time najwolniejszy takes an amount of time proportional to N raised to the Nth power N! Brute force solution to Traveling Salesman Problem
czas wykładniczy wolny takes an amount of time proportional to a constant raised to the Nth power KNBrute force solution to Rubik's Cube
czas wielomianowy szybki takes an amount of time proportional to N raised to some constant power NKComparison sorts (bubble, insertion, selection sort)
czas liniowo-logarytmiczny szybszy takes an amount of time between linear and polynomial N * log(N) Liniowo-logarytmiczne sortowanie (quicksort, heapsort, mergesort)
czas liniowy jeszcze szybszy takes an amount of time directly proportional to N K * N Iterowanie po tablicy
czas logarytmiczny dużo szybszy takes an amount of time proportional to the logarithm of N K * log(N) Binary Search
czas stały najszybszy takes a fixed amount of time, no matter how large the input is K Array 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:

Nazwa Opis Przykład
optymistyczna Przypadek gdy operacja wykonuje się możliwie najszybciej Bubblesort (sortowanie bąbelkowe) ma optymistyczną złożoność czasową rzędu N
oczekiwana Przypadek gdy operacja wykonuje się w czasie charakteryzującym większość przypadków Quicksort ma oczekiwaną złożoność czasową rzędu N * log(N)
pesymistyczna Przypadek gdy operacja wykonuje się możliwie najwolniej Quicksort ma pesymistyczną złożoność czasową rzędu N2
pesymistyczna zamortyzowana Średnia z pesymistycznych czasów wykonania nieskończonej liczby operacji vector::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.

close