Notacja dużego O – wydajność algorytmu

Do określenia wydajności algorytmu wykorzystywana jest notacja dużego O. Przykładowo O(n!), O(n) czy O(n+1). Może ona określać zarówno ilość potrzebnych operacji (określana czasami złożonością czasową) lub też ilość potrzebnej pamięci do realizacji algorytmu.

Jak rozumieć taką notację?

OznaczenieInterpretacja
O(n2)Dla n elementowej kolekcji będzie potrzebne n2 operacji (lub też n2 jednostek pamięci)
O(n+1)Dla n elementowej kolekcji będzie potrzebne n+1 operacji (lub też n+1 jednostek pamięci)

Przykładowo jeśli algorytm wykonuje się z wydajnością O(n!) operacji. Oznaczać to będzie, że dla kolekcji składającej się z 4 elementów, będzie wykonanych 24 operacji (bo 4! to inaczej 4*3*2*1 a to się równa 24. A dla kolekcji składającej się już 5 elementów, będzie to 120.

Najlepszy, średni i najgorszy przypadek

Należy zaznaczyć, że ilość wykonanych operacji (lub też wykorzystanych jednostek pamięci) często jest różna w zależności od argumentów wejściowych. Przykładowo przy sortowaniu kolekcji liczb:

1,2,3

powiedzmy, że algorytm X wykona 2 operacje (bo elementy są już posortowane). Zaś dla kolekcji:

3,2,1

będzie to już 9 operacji.

Stąd rozróżnia się:
najlepszą złożoność – ile czasu (lub pamięci) zajmie wykonanie, przy idealnie (dla danego algorytmu) ułożonych argumentach wejściowych. Często zamiast O stosuje się Ω.
średnią złożoność – ile czasu (lub pamięci) średnio zajmie wykonanie. Często zamiast O stosuje się θ.
najgorszą złożoność – ile czasu (lub pamięci) zajmie wykonanie, przy najbardziej niekorzystnie ułożonych argumentach wejściowych.

Jak sobie radzą wybrane algorytmy sortowania

Nazwa algorytmuNajlepsza złożoność (Ω)Średnia złożoność (θ)Najgorsza złożoność (O)
Sortowanie bąbelkoweΩ(n)θ(n2)O(n2)
Sortowanie szybkieΩ(n log (n))θ(n log (n))O(n2)
Sortowanie ShellaΩ(n log (n))θ(n log (n))O(n2)
Binarne drzewo poszukiwańΩ(n)θ(n log (n))O(n2)

Kto to wymyślił?

Zapis dużego O przypisuje się głównie dwóm niemieckim matematykom Paul Gustav Heinrich Bachmann oraz Edmund Georg Hermann Landau. Chociaż pracowali nad nią także inni.

Warto zajrzeć

1. https://en.wikipedia.org/wiki/Big_O_notation
2. https://miroslawzelent.pl/kurs-python/algorytmy-sortowania/

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *