Mówiąc luźniej, złożoność czasu jest sposobem podsumowania wzrostu liczby operacji lub czasu działania algorytmu wraz ze wzrostem wielkości wejściowej.
Jak większość rzeczy w życiu, przyjęcie koktajlowe może pomóc nam zrozumieć.
NA)
Po przybyciu na przyjęcie musisz uścisnąć wszystkim rękę (wykonać operację na każdym elemencie). Wraz ze wzrostem liczby uczestników N
rośnie czas / praca, aby uścisnąć dłoń każdego O(N)
.
Dlaczego O(N)
nie cN
?
Istnieje różna ilość czasu, jaki zajmuje uścisk dłoni z ludźmi. Możesz to uśrednić i uchwycić w sposób ciągły c
. Ale podstawowa operacja tutaj - uścisk dłoni ze wszystkimi - zawsze byłaby proporcjonalna do O(N)
, bez względu na to, co c
było. Kiedy zastanawiamy się, czy powinniśmy pójść na przyjęcie koktajlowe, często bardziej interesuje nas fakt, że będziemy musieli poznać wszystkich, niż najdrobniejsze szczegóły tego, jak wyglądają te spotkania.
O (N ^ 2)
Gospodarz koktajlu chce, abyś zagrał w głupią grę, w której wszyscy spotykają wszystkich. Dlatego musicie poznać N-1
innych ludzi, a ponieważ kolejna osoba już cię spotkała, muszą poznać N-2
ludzi i tak dalej. Suma tej serii to x^2/2+x/2
. W miarę wzrostu liczby uczestników x^2
termin staje się bardzo szybki , więc porzucamy wszystko inne.
O (N ^ 3)
Musisz spotkać się ze wszystkimi i podczas każdego spotkania musisz porozmawiać o wszystkich innych w pokoju.
O (1)
Gospodarz chce coś ogłosić. Popijają kieliszek do wina i mówią głośno. Wszyscy je słyszą. Okazuje się, że nie ma znaczenia, ilu jest uczestników, ta operacja zawsze zajmuje tyle samo czasu.
O (log N)
Gospodarz ułożył wszystkich przy stole w kolejności alfabetycznej. Gdzie jest Dan? Rozumujesz, że musi być gdzieś pomiędzy Adamem a Mandy (na pewno nie między Mandy a Zachem!). Biorąc to pod uwagę, czy jest on między George'em a Mandy? Nie. Musi być pomiędzy Adamem i Fredem oraz między Cindy i Fredem. I tak dalej ... możemy skutecznie zlokalizować Dana, patrząc na połowę zestawu, a następnie na połowę tego zestawu. Ostatecznie patrzymy na osoby O (log_2 N) .
O (N log N)
Możesz znaleźć, gdzie usiąść przy stole, korzystając z powyższego algorytmu. Gdyby przy stole przyszła duża liczba osób, jedna po drugiej, i wszyscy to zrobili, zajęłoby to O (N log N) . Okazuje się, ile czasu zajmuje sortowanie dowolnej kolekcji przedmiotów, gdy trzeba je porównać.
Najlepszy / najgorszy przypadek
Przybywasz na przyjęcie i musisz znaleźć Inigo - ile to zajmie? To zależy od tego, kiedy przyjedziesz. Jeśli wszyscy się kręcą, trafiłeś w najgorszy przypadek: zajmie to trochę O(N)
czasu. Jeśli jednak wszyscy siadają przy stole, zajmie to tylko trochę O(log N)
czasu. A może uda Ci się wykorzystać siłę gospodarza do krzyczenia kieliszka wina i zajmie to tylko trochę O(1)
czasu.
Zakładając, że host jest niedostępny, możemy powiedzieć, że algorytm znajdujący Inigo ma dolną granicę O(log N)
i górną granicę O(N)
, w zależności od stanu drużyny po przyjeździe.
Przestrzeń kosmiczna i komunikacja
Te same pomysły można zastosować do zrozumienia, w jaki sposób algorytmy wykorzystują przestrzeń lub komunikację.
Knuth napisał miły artykuł na temat tego pierwszego zatytułowany „Złożoność pieśni” .
Twierdzenie 2: Istnieją arbitralnie długie piosenki o złożoności O (1).
DOWÓD: (dzięki Casey i Sunshine Band). Rozważmy piosenki Sk zdefiniowane przez (15), ale z
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
dla wszystkich k.