Professional Documents
Culture Documents
Edward Szczypka
04 listopada 2022
1 / 16
Najlepsze Algorytmy Sortowania przez Porównanie
Najlepszy pesymistyczny czas mo»liwy do uzyskania przy sortowaniu
przez prównanie to O(n log2 n), wykorzystuj¡cy co najmniej
n log2 n + O(n) porówna«.
4 / 16
Sortowanie sªabo wykorzystuj¡ce porównania
5 / 16
RadixSort
7 / 16
Sortowanie przez zliczanie
a 7 2 9 0 1 2 0 9 7 4 4 6 9 1 0 9 3 2 5 9
c 3 2 3 1 2 1 1 2 0 5
0 1 2 3 4 5 6 7 8 9
c0 3 5 8 9 11 12 13 15 15 20
b 0 0 0 1 1 2 2 2 3 4 4 5 6 7 7 9 9 9 9 9
0 1 2 3 4 5 6 8
7 9
c0 3 5 8 9 11 12 13 15 20
a 7 2 9 0 1 2 0 9 7 4 4 6 9 1 0 9 3 2 5 9
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
8 / 16
Sortowanie Przez Zliczanie
Twierdzenie
Sortowanie przez zliczanie elementów ze zbioru {0, . . . , k − 1} wykonywane jest
w czasie Θ(n + k).
9 / 16
Sortowanie Kubeªkowe
10 / 16
Sortowanie Interpolacyjne
// Uwaga to jest pseudo kod w C++
int minIdx=0;
int maxIdx=10000;
double data[];
double outData[];
int numBuckets=100;
int buckets[maxBuckets];
11 / 16
Sortowanie Interpolacyjne
Na wyszukiwanie minimalnej, maksymalnej warto±ci w tablicy oraz trzy
pierwsze p¦tle potrzeba co najwy»ej cn czasu dla pewnego c.
Je±li rozkªad danych jest jednostajny, to kubeªki s¡ podobnej wielko±ci
n/m, gdzie m oznacza ilo±¢ kubeªków.
Wykorzystane sortowanie przez wstawianie:
▶ Operacje porównania i przesuwania ogranicza jedynie do aktualnie
rozpatrywanego kubeªka.
▶ Wykorzystuje wartownika aby nie przej±¢ do poprzedniego kubeªka.
▶ Poniewa» przy równomiernym rozkªadzie danych kubeªki maja podobny
rozmiar, to przybli»ony czas dziaªania tej cz¦±ci wynosi:
n
m ∗ Tw
m
gdzie Tw (n/m) oznacza czas sortowania przez wstawianie dla n/m danych.
▶ Poniewa» sortowanie przez wstawianie wykorzystuje pesymisytcznie
1 2
2
n + O(n) porówna«, to cz¦±¢ z tym sortowaniem wykona:
2
1 n n 1 2
m∗ +O = n + O(n)
2 m m 2m
porówna«.
12 / 16
Sortowanie Interpolacyjne
dla pewnego c.
Odpowiednia budowa funkcji phi, przy innym rozkªadzie danych rownie»
mo»e zapewni¢ przybli»on¡ wielko±¢ wszystkich kubeªków.
Z twierdzenia o rekurencji uniwersalnej mo»na wyliczy¢ T (n).
Uwaga: Prosz¦ samodzielnie wykona¢ odpowiednie obliczenia.
13 / 16
Twierdzenie o rekurencji uniwersalnej
Je±li funkcja T (n) dla a 1, b > 1, n > 0 zdeniowanej jako
(
Θ(1) dla 1 ¬ n ¬ b,
T (n) =
aT ( nb ) + f (n) dla n b
14 / 16
Sortowanie Interpolacyjne
Dokªadniejsza analiza ±redniego czasu sortowania interploacyjnego.
m kubeªków,
element x do dowolnego pudeªka traa z równym prawdopodobie«stwem,
czyli p = m1 ,
w danym pudeªku, b¦dziemy mieli ±rednio
Pn
i ni pi (1 − p)n−i
i=0
elementów. U»ywaj¡c to»samo±ci: ni = ni n−1i−1 .
n n
X n i X n i
i p (1 − p)n−i = i p (1 − p)n−i
i=0
i i=1
i
n n
X n−1 i n−i
X n−1 i n−i
= n p (1 − p) = n p (1 − p)
i=1
i − 1 i=1
i − 1
n−1
X n−1
(n−1)−i
= np pi (1 − p) = np(p + 1 − p)n−1 = np
i=0
i
16 / 16