Prezentacja 3 - INF-WLF

Download Report

Transcript Prezentacja 3 - INF-WLF

Treści multimedialne - kodowanie,
przetwarzanie, prezentacja
Odtwarzanie treści multimedialnych
Andrzej Majkowski
informatyka +
1
Sortowanie przez zliczanie
Iwona i Ireneusz Bujnowscy
2
Sortowanie przez zliczanie
Przedstawione dotychczas algorytmy sortowania działały
stosunkowo wolno. Zarówno sortowanie bąbelkowe jak i
sortowanie przez wybieranie były klasy O(n2),
to znaczy, że aby wykonać sortowanie n elementów należy
wykonać około n2 operacji dominujących.
 Okazuje się, że możliwe jest znacznie szybsze
uporządkowanie elementów: klasy O(n), .
 Jedną z takich metod sortowania jest sortowanie przez
zliczanie
Jak działa sortowanie przez zliczanie
0
1
2
3
4
5
2
0
3
3
0
3
Najłatwiej będzie to prześledzić na bardzo prostym przykładzie
• mamy dana tablicę T do posortowania (dana powyżej)
• tworzymy pomocniczą tabele Pom wypełnioną zerami
• (rozmiar tablicy Pom jest uzależniony od zakresu danych w tablicy T)
• w naszym przypadku zakres od 0 do 3 czyli tablica Pom[4]
0
1
2
3
0
0
0
0
• indeksy Pom[4]
• wartości Pom[4]
Jak działa sortowanie przez zliczanie cd
0
1
2
3
4
5
2
0
3
3
0
3
• Realizujemy pętle: ( n –wymiar tablicy T)
for (int k=0; k<n; k++)
Pom[T[k]]++;
• obok przedstawiona jest wizualizacja jak zmienia się tablica
pomocnicza Pom w trakcie działania powyższej pętli:
• dla k=0 T[0]=2 czyli Pom[T[0]]=Pom[2]=1
0
1
2
3
0
0
1
0
0
1
2
3
1
0
1
0
0
1
2
3
1
0
1
1
• dla k=1 T[1]=0 czyli Pom[T[1]]=Pom[0]=1
• dla k=2 T[2]=3 czyli Pom[T[2]]=Pom[3]=1
Jak działa sortowanie przez zliczanie cd
0
1
2
3
4
5
2
0
3
3
0
3
• Realizujemy pętle cd:
for (int k=0; k<n; k++)
Pom[T[k]]++;
• dla k=3 T[3]=3 czyli Pom[T[3]]=Pom[3]=2
• dla k=4 T[4]=0 czyli Pom[T[4]]=Pom[0]=2
0
1
2
3
0
0
1
2
0
1
2
3
2
0
1
2
0
1
2
3
2
0
1
3
• dla k=5 T[5]=3 czyli Pom[T[5]]=Pom[3]=3
Jak działa sortowanie przez zliczanie cd
• Tablica T:
0
1
2
3
5
5
2
0
3
3
0
3
• Tablica Pom wygląda następująco:
•
0
1
2
3
2
0
1
3
następnie realizujemy pętle, która z tablicy Pom wypisuje indeksy tyle
razy ile wynosi wartość poszczególnych elementów tablicy Pom
– (z- zakres, wymiar tablicy pom)
for (int j=0; j<z; j++)
for (int l=0; l<Pom[j]; l++)
cout<<j<<” ”;
Po zrealizowaniu powyższych pętli otrzymamy : 0 0 2 3 3 3
sortowanie przez zliczanie
• Wady i zalety sortowania
przez zliczanie
– główną zaletą tej metody jest liniowa
złożoność obliczeniowa algorytmu – O(n+k)
(n – oznacza liczebność zbioru, k – rozpiętość
danych, czyli w przypadku liczb całkowitych:
powiększoną o 1 różnicę między
maksymalną, a minimalną wartością,
– największymi ograniczeniami algorytmu są
konieczność uprzedniej znajomości zakresu
danych i złożoność pamięciowa