Wirtualne laboratorium/Matematyka/Teoria grafów/Algorytmy sortowania — złożoność
Wielkie odkrycie 1945 — von Neumann

Algorytmy sortowania — złożoność

Rozszerzenie tematu złożoności obliczeniowej i funkcji (poza programem — informatyka). Proste sortowanie bąbelkowe wykonuje ~n² porównań, a sprytne (przez scalanie) ~n·log n — przy dużych n różnica jest ogromna (dla n=1000 to sto razy mniej operacji). Sortowanie przez scalanie opracował John von Neumann w 1945 r.

Algorytmy sortowania — złożoność
Matematyka · Teoria grafów · Algorytmy sortowania — złożoność (1945)
Liczba elementów do posortowania nn20 elem.
Efektywny algorytm sortuje n elementów w czasie rzędu…
elementów n
20
bąbelkowe ≈ n²
400
scalanie ≈ n·log n
86
ile razy mniej
×5
🎯 Wyzwanie: sklasyfikuj złożoność
seria: 0

Dam Ci algorytm sortowania — przypisz mu klasę złożoności. Proste algorytmy to O(n²), sprytne „dziel i zwyciężaj" to O(n·log n).

Co się właśnie stało?

Sortowanie — uporządkowanie danych rosnąco lub malejąco — to jedna z najczęstszych operacji w informatyce, a o wydajności decyduje wybór algorytmu. Zwiększyliśmy liczbę elementów do 1 000 i porównaliśmy dwie strategie: proste sortowanie bąbelkowe i sprytne sortowanie przez scalanie.

Złożoność obliczeniowa (notacja „duże O")

Złożoność opisuje, jak liczba operacji rośnie z rozmiarem danych nn. Proste algorytmy (bąbelkowe, przez wybieranie) porównują każdy element z każdym, więc wykonują ich rzędu:

O(n2)O(n^2)

Sprytne algorytmy — sortowanie przez scalanie (merge sort, opracowane przez Johna von Neumanna w 1945 r.) czy szybkie (quicksort) — dzięki strategii „dziel i zwyciężaj" (dziel dane na połowy, sortuj rekurencyjnie, scalaj posortowane części) osiągają:

O(nlog⁡n)O(n\log n)

Dlaczego to tak ogromna różnica?

Dla małych n różnica jest niewielka. Ale dla n = 1000 to ~1 000 000 operacji (n2n^2) kontra ~10 000 (nlog⁡nn\log n) — sto razy mniej. Posortowanie miliona elementów algorytmem O(n2)O(n^2) wymaga bilionów operacji (godziny, a nawet dni), a O(nlog⁡n)O(n\log n) — kilkudziesięciu milionów (ułamek sekundy). Wybór algorytmu decyduje o tym, czy program działa sekundy czy lata.

Fundament informatyki teoretycznej

Analiza złożoności pozwala przewidzieć, czy program da się w praktyce uruchomić, jeszcze zanim go napiszemy. To dlatego biblioteki standardowe (w Pythonie, Javie, C++) używają wewnątrz algorytmów rzędu nlog⁡nn\log n, a nie naiwnych pętli kwadratowych.

Po co Ci to na maturze:

Sam temat złożoności leży poza podstawą programową liceum (to pogranicze matematyki i informatyki), ale logarytmy i tempo wzrostu funkcji — owszem, są. Umiejętność porównania, jak n2n^2 rośnie szybciej niż nlog⁡nn\log n, to ta sama intuicja, której potrzebujesz przy zadaniach o funkcjach i ciągach.

Zapamiętaj: liczba operacji rośnie z n zgodnie ze złożonością algorytmu — bąbelkowe ∼n2\sim n^2, scalanie ∼nlog⁡n\sim n\log n — a różnica narasta gwałtownie wraz z rozmiarem danych. Dlatego dobór algorytmu, a nie szybszy komputer, decyduje o tym, co da się policzyć.

Model poglądowy · Wirtualne laboratorium NexTutor

Spodobał Ci się eksperyment? Udostępnij go.

Jest darmowy — podeślij znajomym ze szkoły.

Teoria i wzory

Złożoność czasowa

Liczbę operacji w zależności od rozmiaru danych nn opisuje notacja „duże O”:

  • sortowanie bąbelkowe: O(n2)O(n^2)
  • sortowanie przez scalanie: O(nlog⁡n)O(n\log n)

Dlaczego to ogromna różnica

Dla n=1000n=1000: n2=106n^2=10^6, a nlog⁡2n≈104n\log_2 n\approx 10^4 — około sto razy mniej operacji.

Dziel i zwyciężaj

Scalanie dzieli dane na pół, sortuje części i scala wyniki — stąd czynnik log⁡n\log n (liczba poziomów podziału).

Oznaczenia: nn liczba elementów, O(⋅)O(\cdot) rząd liczby operacji, log⁡\log logarytm.

Uczysz? Umieść ten eksperyment na swojej stronie.

Darmowy widget — wklej na stronę szkoły, bloga lub notatki. Linkuje do pełnej wersji.

Uczysz w klasie albo korepetujesz? Prowadź uczniów w NexTutor →

Najczęstsze pytania

›

W jakim czasie sortuje efektywny algorytm?

W czasie rzędu n·log n (np. sortowanie przez scalanie), znacznie szybciej niż n² (sortowanie bąbelkowe).

›

Co to złożoność obliczeniowa?

Opis, jak liczba operacji rośnie z rozmiarem danych n (notacja „duże O").

›

Kto opracował sortowanie przez scalanie?

John von Neumann, w 1945 r. — algorytm typu „dziel i zwyciężaj" o złożoności O(n·log n).