Algorytmy i Struktury Danych.
Transkrypt
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Problem Sortowania, cd. dr hab. Bożena Woźna-Szcześniak [email protected] Jan Długosz University, Poland Wykład 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 1 / 49 Jak szybko można sortować ? Wszystkie do tej pory omówione algorytmy sortujace ˛ należa˛ do grupy sortowania przez porównywanie - czyli podstawowa˛ operacja˛ ustalajaca ˛ porzadek ˛ pomiedzy ˛ elementami jest opercja porównywania pary elementów (mniejsze niż, wieksze ˛ niż, mniejsze lub równe, wieksze ˛ lub równe, równe). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 2 / 49 Jak szybko można sortować ? Wszystkie do tej pory omówione algorytmy sortujace ˛ należa˛ do grupy sortowania przez porównywanie - czyli podstawowa˛ operacja˛ ustalajaca ˛ porzadek ˛ pomiedzy ˛ elementami jest opercja porównywania pary elementów (mniejsze niż, wieksze ˛ niż, mniejsze lub równe, wieksze ˛ lub równe, równe). Sortowanie babelkowe ˛ (ang. bubblesort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie przez scalanie (ang. merge sort) Sortowanie przez wybieranie (ang. selection sort)) Sortowanie szybkie (ang. quicksort) Sortowanie przez kopcowanie (ang. heapsort) - omówione na wykładach późniejszych Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 2 / 49 Jak szybko można sortować ? Wszystkie do tej pory omówione algorytmy sortujace ˛ należa˛ do grupy sortowania przez porównywanie - czyli podstawowa˛ operacja˛ ustalajaca ˛ porzadek ˛ pomiedzy ˛ elementami jest opercja porównywania pary elementów (mniejsze niż, wieksze ˛ niż, mniejsze lub równe, wieksze ˛ lub równe, równe). Sortowanie babelkowe ˛ (ang. bubblesort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie przez scalanie (ang. merge sort) Sortowanie przez wybieranie (ang. selection sort)) Sortowanie szybkie (ang. quicksort) Sortowanie przez kopcowanie (ang. heapsort) - omówione na wykładach późniejszych Najlepsza złożoność optymistyczna powyżej wymienionych algorytmów jest O(n · log2 n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 2 / 49 Jak szybko można sortować ? Wszystkie do tej pory omówione algorytmy sortujace ˛ należa˛ do grupy sortowania przez porównywanie - czyli podstawowa˛ operacja˛ ustalajaca ˛ porzadek ˛ pomiedzy ˛ elementami jest opercja porównywania pary elementów (mniejsze niż, wieksze ˛ niż, mniejsze lub równe, wieksze ˛ lub równe, równe). Sortowanie babelkowe ˛ (ang. bubblesort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie przez scalanie (ang. merge sort) Sortowanie przez wybieranie (ang. selection sort)) Sortowanie szybkie (ang. quicksort) Sortowanie przez kopcowanie (ang. heapsort) - omówione na wykładach późniejszych Najlepsza złożoność optymistyczna powyżej wymienionych algorytmów jest O(n · log2 n). Czy można mieć lepszy algorytm sortujacy ˛ ? Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 2 / 49 Jak szybko można sortować ? Wszystkie do tej pory omówione algorytmy sortujace ˛ należa˛ do grupy sortowania przez porównywanie - czyli podstawowa˛ operacja˛ ustalajaca ˛ porzadek ˛ pomiedzy ˛ elementami jest opercja porównywania pary elementów (mniejsze niż, wieksze ˛ niż, mniejsze lub równe, wieksze ˛ lub równe, równe). Sortowanie babelkowe ˛ (ang. bubblesort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie przez scalanie (ang. merge sort) Sortowanie przez wybieranie (ang. selection sort)) Sortowanie szybkie (ang. quicksort) Sortowanie przez kopcowanie (ang. heapsort) - omówione na wykładach późniejszych Najlepsza złożoność optymistyczna powyżej wymienionych algorytmów jest O(n · log2 n). Czy można mieć lepszy algorytm sortujacy ˛ ? W odpowiedzi na to pytanie pomoga˛ drzewa decyzyjne. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 2 / 49 Drzewo decyzyjne - przykład Każdy wierzchołek wewnetrzny ˛ etykietowany jest przez i : j, gdzie i, j ∈ {1, . . . , n}. Lewe podrzewo pokazuje kolejne porównywania w przypadku, gdy ai ≤ aj Prawe podrzewo pokazuje kolejne porównywania w przypadku, gdy ai ≥ aj Bożena Woźna-Szcześniak (AJD) Sortowanie ciagu ˛ (a1 , a2 , . . . , an ): 1:2 1:3 2:3 123 1:3 132 Algorytmy i Struktury Danych. 2:3 213 312 231 321 Wykład 4 3 / 49 Drzewo decyzyjne - przykład Każdy wierzchołek wewnetrzny ˛ etykietowany jest przez i : j, gdzie i, j ∈ {1, . . . , n}. Lewe podrzewo pokazuje kolejne porównywania w przypadku, gdy ai ≤ aj Prawe podrzewo pokazuje kolejne porównywania w przypadku, gdy ai ≥ aj Bożena Woźna-Szcześniak (AJD) Sortowanie ciagu ˛ (a1 , a2 , . . . , an ) = (9, 4, 6): 1:2 9≥4 1:3 2:3 123 1:3 132 Algorytmy i Struktury Danych. 2:3 213 312 231 321 Wykład 4 4 / 49 Drzewo decyzyjne - przykład Każdy wierzchołek wewnetrzny ˛ etykietowany jest przez i : j, gdzie i, j ∈ {1, . . . , n}. Lewe podrzewo pokazuje kolejne porównywania w przypadku, gdy ai ≤ aj Prawe podrzewo pokazuje kolejne porównywania w przypadku, gdy ai ≥ aj Bożena Woźna-Szcześniak (AJD) Sortowanie ciagu ˛ (a1 , a2 , . . . , an ) = (9, 4, 6): 1:2 1:3 2:3 9≥6 123 1:3 132 Algorytmy i Struktury Danych. 2:3 213 312 231 321 Wykład 4 5 / 49 Drzewo decyzyjne - przykład Każdy wierzchołek wewnetrzny ˛ etykietowany jest przez i : j, gdzie i, j ∈ {1, . . . , n}. Lewe podrzewo pokazuje kolejne porównywania w przypadku, gdy ai ≤ aj Prawe podrzewo pokazuje kolejne porównywania w przypadku, gdy ai ≥ aj Bożena Woźna-Szcześniak (AJD) Sortowanie ciagu ˛ (a1 , a2 , . . . , an ) = (9, 4, 6): 1:2 1:3 2:3 123 1:3 2:3 213 4≤6 132 Algorytmy i Struktury Danych. 312 231 321 Wykład 4 6 / 49 Drzewo decyzyjne - przykład Sortowanie ciagu ˛ (a1 , a2 , . . . , an ) = (9, 4, 6): 1:2 Każdy liść zawiera permutacje˛ π(1), π(2), . . . , π(n) wskazujac ˛ a˛ ustanowiony porzadek ˛ aπ(1) ≤ aπ(2) ≤ aπ(n) . 1:3 2:3 123 1:3 132 2:3 213 312 231 321 4≤6≤9 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 7 / 49 Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna˛ metode˛ sortujac ˛ a˛ oparta˛ na modelu porównywania elementów. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 8 / 49 Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna˛ metode˛ sortujac ˛ a˛ oparta˛ na modelu porównywania elementów. Drzewo decyzyjne zawiera wszystkie możliwe wykonania (porównywania) algorymu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 8 / 49 Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna˛ metode˛ sortujac ˛ a˛ oparta˛ na modelu porównywania elementów. Drzewo decyzyjne zawiera wszystkie możliwe wykonania (porównywania) algorymu. Jest dokładnie jedno drzewo decyzyjne dla wejścia o rozmiarze n drzewo decyzyjne jest zależne od rozmiaru wejścia, tj. od n. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 8 / 49 Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna˛ metode˛ sortujac ˛ a˛ oparta˛ na modelu porównywania elementów. Drzewo decyzyjne zawiera wszystkie możliwe wykonania (porównywania) algorymu. Jest dokładnie jedno drzewo decyzyjne dla wejścia o rozmiarze n drzewo decyzyjne jest zależne od rozmiaru wejścia, tj. od n. Rozmiar drzewa (ilość liści) jest wykładniczy ze wgledu ˛ na rozmiar danych wejściowych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 8 / 49 Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna˛ metode˛ sortujac ˛ a˛ oparta˛ na modelu porównywania elementów. Drzewo decyzyjne zawiera wszystkie możliwe wykonania (porównywania) algorymu. Jest dokładnie jedno drzewo decyzyjne dla wejścia o rozmiarze n drzewo decyzyjne jest zależne od rozmiaru wejścia, tj. od n. Rozmiar drzewa (ilość liści) jest wykładniczy ze wgledu ˛ na rozmiar danych wejściowych. Z uwagi na powższe drzewa decyzyjne nie sa˛ dogodna˛ metoda˛ reprezentacji algorymów. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 8 / 49 Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna˛ metode˛ sortujac ˛ a˛ oparta˛ na modelu porównywania elementów. Drzewo decyzyjne zawiera wszystkie możliwe wykonania (porównywania) algorymu. Jest dokładnie jedno drzewo decyzyjne dla wejścia o rozmiarze n drzewo decyzyjne jest zależne od rozmiaru wejścia, tj. od n. Rozmiar drzewa (ilość liści) jest wykładniczy ze wgledu ˛ na rozmiar danych wejściowych. Z uwagi na powższe drzewa decyzyjne nie sa˛ dogodna˛ metoda˛ reprezentacji algorymów. Drzewo decyzjyne nie jest jednak zupełnie bezużyteczne - pozwala na określenie dolnego ograniczenia dla optymistycznego czasu działania algorymu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 8 / 49 Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna˛ metode˛ sortujac ˛ a˛ oparta˛ na modelu porównywania elementów. Drzewo decyzyjne zawiera wszystkie możliwe wykonania (porównywania) algorymu. Jest dokładnie jedno drzewo decyzyjne dla wejścia o rozmiarze n drzewo decyzyjne jest zależne od rozmiaru wejścia, tj. od n. Rozmiar drzewa (ilość liści) jest wykładniczy ze wgledu ˛ na rozmiar danych wejściowych. Z uwagi na powższe drzewa decyzyjne nie sa˛ dogodna˛ metoda˛ reprezentacji algorymów. Drzewo decyzjyne nie jest jednak zupełnie bezużyteczne - pozwala na określenie dolnego ograniczenia dla optymistycznego czasu działania algorymu. Czas działania algorytmu dla danego wejścia jest równy długości ścieżki w drzewie decyzyjnym dla tego wejścia. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 8 / 49 Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna˛ metode˛ sortujac ˛ a˛ oparta˛ na modelu porównywania elementów. Drzewo decyzyjne zawiera wszystkie możliwe wykonania (porównywania) algorymu. Jest dokładnie jedno drzewo decyzyjne dla wejścia o rozmiarze n drzewo decyzyjne jest zależne od rozmiaru wejścia, tj. od n. Rozmiar drzewa (ilość liści) jest wykładniczy ze wgledu ˛ na rozmiar danych wejściowych. Z uwagi na powższe drzewa decyzyjne nie sa˛ dogodna˛ metoda˛ reprezentacji algorymów. Drzewo decyzjyne nie jest jednak zupełnie bezużyteczne - pozwala na określenie dolnego ograniczenia dla optymistycznego czasu działania algorymu. Czas działania algorytmu dla danego wejścia jest równy długości ścieżki w drzewie decyzyjnym dla tego wejścia. Czas pesymistyczny algorymu jest równy wysokości drzewa. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 8 / 49 Ograniczenie dolne dla sortowania opartego o drzewo decyzyjne Twierdzenie Każde drzewo decyzyjne, które może posortować n elementów ma wysokość Ω(n · log2 (n)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 9 / 49 Ograniczenie dolne dla sortowania opartego o drzewo decyzyjne Twierdzenie Każde drzewo decyzyjne, które może posortować n elementów ma wysokość Ω(n · log2 (n)). Dowód Ponieważ mamy n! permutacji dla danego ciagu ˛ wejściowego o rozmiarze n, to drzewo powinno zawierać conajmniej n! liści. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 9 / 49 Ograniczenie dolne dla sortowania opartego o drzewo decyzyjne Twierdzenie Każde drzewo decyzyjne, które może posortować n elementów ma wysokość Ω(n · log2 (n)). Dowód Ponieważ mamy n! permutacji dla danego ciagu ˛ wejściowego o rozmiarze n, to drzewo powinno zawierać conajmniej n! liści. Drzewo binarne o wysokości h ma ≤ 2h liści. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 9 / 49 Ograniczenie dolne dla sortowania opartego o drzewo decyzyjne Twierdzenie Każde drzewo decyzyjne, które może posortować n elementów ma wysokość Ω(n · log2 (n)). Dowód Ponieważ mamy n! permutacji dla danego ciagu ˛ wejściowego o rozmiarze n, to drzewo powinno zawierać conajmniej n! liści. Drzewo binarne o wysokości h ma ≤ 2h liści. Zatem mamy: n! ≤ 2h h ≤ log2 (n!) ≤ log2 ((n/e)n ) = n · log2 (n) − n · log2 (e) h ≤ Ω(n · log2 (n)) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 9 / 49 Sortowanie stabilne Dana metoda sortowania jest stabilna, jeśli zachowuje wzgledn ˛ a˛ kolejność elementów ze zdublowanymi kluczami. Przykładowo, jeżeli ułożona˛ alfabetycznie liste˛ studentów posortujemy według roku studiów, to metoda stabilna zwróci w wyniku alfabetycznie ułożona˛ liste˛ osób podzielona˛ ze wzgledu na rok studiów. Metoda niestabilna pozwala na sortowanie tylko wzgledem ˛ jednego klucza. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 10 / 49 Sortowanie stabilne - przykład Dane Wejściowe Adams 1 Black 2 Brown 4 Jackson 2 Jones 4 Smith 1 Thompson 4 Washington 2 White 3 Wilson 3 Bożena Woźna-Szcześniak (AJD) Sortowanie niestabilne Adams 1 Smith 1 Washington 2 Jackson 2 Black 2 White 3 Wilson 3 Thompson 4 Brown 4 Jones 4 Algorytmy i Struktury Danych. Sortowanie stabilne Adams 1 Smith 1 Black 2 Jackson 2 Washington 2 White 3 Wilson 3 Brown 4 Jones 4 Thompson 4 Wykład 4 11 / 49 Sortowanie stabilne - algorytmy Sortowanie babelkowe ˛ (ang. bubblesort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie przez scalanie (ang. merge sort) Sortowanie przez zliczanie (ang. counting sort) Sortowanie pozycyjne (ang. radix sort) - omówione w nastepnej ˛ cz˛eści wykładu Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 12 / 49 Sortowanie niestabilne - algorytmy Sortowanie przez wybieranie(ang. selection sort)) Sortowanie szybkie (ang. quicksort) Sortowanie przez kopcowanie (ang. heapsort) - omówione na wykładach późniejszych Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 13 / 49 Sortowanie przez zliczanie -idea Zadanie: Posortujmy ciag: ˛ 3,6,3,2,7,1,7,1. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 14 / 49 Sortowanie przez zliczanie -idea Zadanie: Posortujmy ciag: ˛ 3,6,3,2,7,1,7,1. Po zliczeniu (w jednym korku) operujemy danymi na temat liczności poszczególnych liczb: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 14 / 49 Sortowanie przez zliczanie -idea Zadanie: Posortujmy ciag: ˛ 3,6,3,2,7,1,7,1. Po zliczeniu (w jednym korku) operujemy danymi na temat liczności poszczególnych liczb: Liczba 1 wystepuje ˛ 2 razy Liczba 2 wystepuje ˛ 1 raz Liczba 3 wystepuje ˛ 2 razy Liczba 4 wystepuje ˛ 0 razy Liczba 5 wystepuje ˛ 0 razy Liczba 6 wystepuje ˛ 1 raz Liczba 7 wystepuje ˛ 2 razy Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 14 / 49 Sortowanie przez zliczanie -idea Zadanie: Posortujmy ciag: ˛ 3,6,3,2,7,1,7,1. Po zliczeniu (w jednym korku) operujemy danymi na temat liczności poszczególnych liczb: Liczba 1 wystepuje ˛ 2 razy Liczba 2 wystepuje ˛ 1 raz Liczba 3 wystepuje ˛ 2 razy Liczba 4 wystepuje ˛ 0 razy Liczba 5 wystepuje ˛ 0 razy Liczba 6 wystepuje ˛ 1 raz Liczba 7 wystepuje ˛ 2 razy Na podstawie tych danych tworzymy posortowany ciag: ˛ 1,1,2,3,3,6,7,7. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 14 / 49 Sortowanie przez zliczanie - uwagi Proces zliczania odbywa sie˛ w jednym kroku Nie dochodzi do ani jednej zamiany elementów Proces tworzenia tablicy wynikowej odbywa sie˛ w jednym kroku Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 15 / 49 Sortowanie przez zliczanie - algorytm Wejście: A[1..n], gdzie A[j] ∈ {1, 2, ..., k }. Wyjście: B[1..n], posortowana. Tablica Pomocnicza: C[1..k ]. {A=[0,. . . ,n-1]} Algorytm: Counting-sort(A,B,k) 1: for all i = 1 to k do 2: C[i] := 0; 3: end for 4: for all j = 1 to n do 5: C[A[j]] := C[A[j]] + 1; 6: end for{//C[i] zawiera teraz liczbe elementów równych i} 7: for all i = 2 to k do 8: C[i] := C[i] + C[i − 1]; 9: end for{//C[i] zawiera teraz liczbe˛ elementów mniejszych badź ˛ równych i} 10: for all j = n downto 1 do 11: B[C[A[j]]] := A[j]; 12: C[A[j]] := C[A[j]] − 1; 13: end for Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 16 / 49 Sortowanie przez zliczanie -przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 17 / 49 Sortowanie przez zliczanie - petla ˛ nr. 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 18 / 49 Sortowanie przez zliczanie - petla ˛ nr. 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 19 / 49 Sortowanie przez zliczanie - petla ˛ nr. 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 20 / 49 Sortowanie przez zliczanie - petla ˛ nr. 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 21 / 49 Sortowanie przez zliczanie - petla ˛ nr. 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 22 / 49 Sortowanie przez zliczanie - petla ˛ nr. 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 23 / 49 Sortowanie przez zliczanie - petla ˛ nr. 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 24 / 49 Sortowanie przez zliczanie - petla ˛ nr. 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 25 / 49 Sortowanie przez zliczanie - petla ˛ nr. 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 26 / 49 Sortowanie przez zliczanie - petla ˛ nr. 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 27 / 49 Sortowanie przez zliczanie - petla ˛ nr. 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 28 / 49 Sortowanie przez zliczanie - petla ˛ nr. 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 29 / 49 Sortowanie przez zliczanie - petla ˛ nr. 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 30 / 49 Sortowanie przez zliczanie - petla ˛ nr. 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 31 / 49 Sortowanie przez zliczanie - Złożoność obliczeniowa Algorytm: Counting-sort(A,B,k) 1: for all i = 1 to k do 2: C[i] := 0; 3: end for{Θ(k)} 4: for all j = 1 to n do 5: C[A[j]] := C[A[j]] + 1; 6: end for{Θ(n)} 7: for all i = 2 to k do 8: C[i] := C[i] + C[i − 1]; 9: end for{Θ(k)} 10: for all j = n downto 1 do 11: B[C[A[j]]] := A[j]; 12: C[A[j]] := C[A[j]] − 1; 13: end for{Θ(n)} Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 32 / 49 Sortowanie przez zliczanie - Złożoność obliczeniowa Algorytm: Counting-sort(A,B,k) 1: for all i = 1 to k do 2: C[i] := 0; 3: end for{Θ(k)} 4: for all j = 1 to n do 5: C[A[j]] := C[A[j]] + 1; 6: end for{Θ(n)} 7: for all i = 2 to k do 8: C[i] := C[i] + C[i − 1]; 9: end for{Θ(k)} 10: for all j = n downto 1 do 11: B[C[A[j]]] := A[j]; 12: C[A[j]] := C[A[j]] − 1; 13: end for{Θ(n)} Złożoność obliczeniowa “Counting-sort” = Θ(n + k) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 32 / 49 Sortowanie przez zliczanie - Złożoność obliczeniowa Można sortować tylko wartości całkowite. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 33 / 49 Sortowanie przez zliczanie - Złożoność obliczeniowa Można sortować tylko wartości całkowite. Efektywnośc sortowania silnie zależy od zakresu k. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 33 / 49 Sortowanie przez zliczanie - Złożoność obliczeniowa Można sortować tylko wartości całkowite. Efektywnośc sortowania silnie zależy od zakresu k. Jeżeli k jest małe, np. k = O(n), to czas sortowania jest bardzo dobry, tzn. Θ(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 33 / 49 Sortowanie przez zliczanie - Złożoność obliczeniowa Można sortować tylko wartości całkowite. Efektywnośc sortowania silnie zależy od zakresu k. Jeżeli k jest małe, np. k = O(n), to czas sortowania jest bardzo dobry, tzn. Θ(n). Przykładowo, dla danych kodowalnych na 1 bajcie, k = 28 = 256 pomocnicza tablica ma zatem rozmiar 256. Wówczas counting-sort działa naprawde˛ szybko, tj. w czasie (256 + n) = Θ(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 33 / 49 Sortowanie przez zliczanie - Złożoność obliczeniowa Można sortować tylko wartości całkowite. Efektywnośc sortowania silnie zależy od zakresu k. Jeżeli k jest małe, np. k = O(n), to czas sortowania jest bardzo dobry, tzn. Θ(n). Przykładowo, dla danych kodowalnych na 1 bajcie, k = 28 = 256 pomocnicza tablica ma zatem rozmiar 256. Wówczas counting-sort działa naprawde˛ szybko, tj. w czasie (256 + n) = Θ(n). Jeżeli k jest duże, to algorym już nie jest taki dobry !!!. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 33 / 49 Sortowanie przez zliczanie - Złożoność obliczeniowa Można sortować tylko wartości całkowite. Efektywnośc sortowania silnie zależy od zakresu k. Jeżeli k jest małe, np. k = O(n), to czas sortowania jest bardzo dobry, tzn. Θ(n). Przykładowo, dla danych kodowalnych na 1 bajcie, k = 28 = 256 pomocnicza tablica ma zatem rozmiar 256. Wówczas counting-sort działa naprawde˛ szybko, tj. w czasie (256 + n) = Θ(n). Jeżeli k jest duże, to algorym już nie jest taki dobry !!!. Przykładowo, dla danych kodowalnych na 4 bajtach, k = 232 , czyli okolo 4.2 biliona. Zatem k jest całkiem duże. Wymagana pomocnicza tablica ma rozmiar 4.2 biliona, czyli zajmie około 16 giga-bajtów. Czyli na samym starcie już nie jest dobrze ..... potrzebny jest super komputer z conajmniej 16 gigabajtami RAM-u. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 33 / 49 Sortowanie przez zliczanie jest stabilne Sortowanie przez zliczanie jest stabilne: zachowuje wejściowy porzadek ˛ wśród równych elementów. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 34 / 49 Herman Hollerith (1860-1929) Wynalazca kart perforowanych. Ustalił standardowy format karty perforowanej o rozmiarze banknotu jednodolarowego. W 1890 zbudował pierwszy tabulator -sorter kart dziurkowanych - urzadzenie ˛ oparte na idei Jacquarda, służace ˛ do mechanicznego sporzadzania ˛ zestawień danych, ich klasyfikowania, przetwarzania i powielania. Pozwoliło ono przeprowadzić w USA (wtedy 60 milionów ludzi) spis powszechny w dwa i pół roku. Hollerith w 1911 założył firme˛ Tabulating Machine Company, z której w 1924 wyłoniła sie˛ firma IBM (International Business Machines). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 35 / 49 Karta dziurkowana Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 36 / 49 Herman Hollerith (1860-1929) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 37 / 49 Geneza sortowania pozycyjnego Oto cytat z roku 1889 opisujacy ˛ patent (maszyne˛ tabulacyjna) ˛ Hollerith’a The most complicated combinations can readily be counted with comparatively few counters or relays by first assorting the cards according to the first items entering into the combinations, then reassorting each group according to the second item entering into the combination, and so on, and finally counting on a few counters the last item of the combination for each group of cards. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 38 / 49 Sortowanie pozycyjne Pochodzenie: sorter kart dziurkowanych Herman Hollerith’a. Sortowanie cyfra po cyfrze. Niepoprawna idea Hollerith’a: sortowanie wzgledem najbardziej znaczacej ˛ cyfry. Właściwa idea: sortowanie stabilne – przy użyciu pomocniczego algorytmy sortujacego ˛ – wzgledem najmniej znaczacej ˛ cyfry. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 39 / 49 Sortowanie pozycyjne Pochodzenie: sorter kart dziurkowanych Herman Hollerith’a. Sortowanie cyfra po cyfrze. Niepoprawna idea Hollerith’a: sortowanie wzgledem najbardziej znaczacej ˛ cyfry. Właściwa idea: sortowanie stabilne – przy użyciu pomocniczego algorytmy sortujacego ˛ – wzgledem najmniej znaczacej ˛ cyfry. Idea Sortowanie pozycyjne (ang. radix sort) porzadkuje ˛ stabilnie ciagi ˛ wartości (liczb, słów) wzgledem ˛ konkretnych cyfr, znaków itp., kolejno od najmniej znaczacych ˛ do najbardziej znaczacych ˛ pozycji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 39 / 49 Sortowanie pozycyjne - algorytm Require: Zbiór n-elementowych ciagów ˛ A Algorytm: RadixSort 1: for all i = n downto 1 do 2: sortuj stabilnie ciagi ˛ według i-tej pozycji; 3: end for Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 40 / 49 Sortowanie pozycyjne - przykład Wejście: 523 456 673 666 567 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 41 / 49 Sortowanie pozycyjne - przykład Wejście: 523 456 673 666 567 I przebieg: 523 673 456 666 567 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 41 / 49 Sortowanie pozycyjne - przykład Wejście: 523 456 673 666 567 I przebieg: 523 673 456 666 567 II przebieg: 523 456 666 567 673 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 41 / 49 Sortowanie pozycyjne - przykład Wejście: 523 456 673 666 567 I przebieg: 523 673 456 666 567 II przebieg: 523 456 666 567 673 III przebieg: 456 523 567 666 673 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 41 / 49 Sortowanie pozycyjne - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 42 / 49 Sortowanie Pozycyjne -poprawność Indukcja ze wzgledu ˛ na pozycje cyfry Załóżmy, że liczby sa˛ posortowane niemalejaco ˛ wzgledem ˛ t − 1 cyfry. Sortujemy według cyfry t Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 43 / 49 Sortowanie Pozycyjne -poprawność Sortujemy według cyfry t Liczby różnia˛ sie˛ na t-tej cyfrze: Ponieważ sortujemy wzgledem ˛ najbardziej znaczacej ˛ cyfry (w tym przypadku jest to t−ta cyfra), to wybrana przez nas metoda sortowania (dowolna stabilna) ustawi liczby o długości t we właściwym porzadku. ˛ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 44 / 49 Sortowanie Pozycyjne -poprawność Sortujemy według cyfry t Liczby sa˛ równe na t-tej cyfrze: Ponieważ z założenia wykonujemy sortowanie stabilne na cyfrach, dwie liczby równe na t-tej cyfrze pozostaja˛ w tym samym porzadku. ˛ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 45 / 49 Sortowanie pozycyjne - analiza Złożoność algorymu zależy od wybranego pomocniczego stabilnego algorytmu sortujacego. ˛ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 46 / 49 Sortowanie pozycyjne - analiza Złożoność algorymu zależy od wybranego pomocniczego stabilnego algorytmu sortujacego. ˛ Zatem nie powinniśmy wybrać żadnego z poniższych, jeśli zależy nam na sortowaniu w czasie liniowym: Sortowanie babelkowe ˛ (ang. bubblesort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie przez scalanie (ang. merge sort) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 46 / 49 Sortowanie pozycyjne - analiza Złożoność algorymu zależy od wybranego pomocniczego stabilnego algorytmu sortujacego. ˛ Zatem nie powinniśmy wybrać żadnego z poniższych, jeśli zależy nam na sortowaniu w czasie liniowym: Sortowanie babelkowe ˛ (ang. bubblesort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie przez scalanie (ang. merge sort) Właściwy wybór to: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 46 / 49 Sortowanie pozycyjne - analiza Złożoność algorymu zależy od wybranego pomocniczego stabilnego algorytmu sortujacego. ˛ Zatem nie powinniśmy wybrać żadnego z poniższych, jeśli zależy nam na sortowaniu w czasie liniowym: Sortowanie babelkowe ˛ (ang. bubblesort) Sortowanie przez wstawianie (ang. insertion sort) Sortowanie przez scalanie (ang. merge sort) Właściwy wybór to: sortowanie przez zliczanie Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 46 / 49 Sortowanie pozycyjne - analiza Załóżmy, że wybranym sortowaniem pomocniczym jest sortowanie przez zliczanie. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 47 / 49 Sortowanie pozycyjne - analiza Załóżmy, że wybranym sortowaniem pomocniczym jest sortowanie przez zliczanie. Wiemy, że sortowanie przez zliczanie pracuje w czasie Θ(n + k), aby posortować n liczb z zakresu od 0 do k − 1. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 47 / 49 Sortowanie pozycyjne - analiza Załóżmy, że wybranym sortowaniem pomocniczym jest sortowanie przez zliczanie. Wiemy, że sortowanie przez zliczanie pracuje w czasie Θ(n + k), aby posortować n liczb z zakresu od 0 do k − 1. Zatem, jeśli b-bitowe słowo (b-bitowa liczba) zostanie podzielone na r -bitowe kawałki, to każdy przebieg sortowania przez zlicznie bedzie ˛ wykonany w czsie Θ(n + 2r ). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 47 / 49 Sortowanie pozycyjne - analiza Załóżmy, że wybranym sortowaniem pomocniczym jest sortowanie przez zliczanie. Wiemy, że sortowanie przez zliczanie pracuje w czasie Θ(n + k), aby posortować n liczb z zakresu od 0 do k − 1. Zatem, jeśli b-bitowe słowo (b-bitowa liczba) zostanie podzielone na r -bitowe kawałki, to każdy przebieg sortowania przez zlicznie bedzie ˛ wykonany w czsie Θ(n + 2r ). Ponieważ w sortowaniu pozycyjnym bedziemy ˛ mieli b/r przebiegów, to czas wykonania sortowania bedzie: ˛ b T (n, b) = Θ( (n + 2r )) r Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 47 / 49 Wybór r b T (n, b) = Θ( (n + 2r )) r Aby algorym sortowania pozycyjnego pracował szybko (tzn. w czasie liniowym ), należy odpowiednio dobrze dobrać r . W szczególności duże r oznacza, że bedzie ˛ tylko kilka przebiegów. Należy jednka zwrócić uwage, ˛ aby r nie było zbyć duże, gdyż jeśli r > log2 (n), to czas sorowania pomocniczego (przez zliczanie) i potrzebna mu pamieć ˛ bedzie ˛ zbyt duża !!! Aby zminimalizować T (n, b), należy wybrać r = log2 (n), co implikuje T (n, b) = Θ(b · n/log2 (n))). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 48 / 49 Wybór r b T (n, b) = Θ( (n + 2r )) r Aby algorym sortowania pozycyjnego pracował szybko (tzn. w czasie liniowym ), należy odpowiednio dobrze dobrać r . W szczególności duże r oznacza, że bedzie ˛ tylko kilka przebiegów. Należy jednka zwrócić uwage, ˛ aby r nie było zbyć duże, gdyż jeśli r > log2 (n), to czas sorowania pomocniczego (przez zliczanie) i potrzebna mu pamieć ˛ bedzie ˛ zbyt duża !!! Aby zminimalizować T (n, b), należy wybrać r = log2 (n), co implikuje T (n, b) = Θ(b · n/log2 (n))). Powyższe r można uzyskać poprzez zróżniczkowanie fukcji T (n, b) wzgledem ˛ zmiennej r i podstawieniu pod powstała˛ funkcje˛ wartości 0. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 48 / 49 Uwagi końcowe W praktyce sortowanie pozycyjne jest bardzo dobre dla dużych danych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 49 / 49 Uwagi końcowe W praktyce sortowanie pozycyjne jest bardzo dobre dla dużych danych. Przykładowo dla liczb 32-bitowych przy sortowaniu 2000 danych sortowanie pozycyjne wykona (b · n/log2 (n))) = 32 · 2000/log2(2000) ≈ 3 ∗ 2000 operacji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 49 / 49 Uwagi końcowe W praktyce sortowanie pozycyjne jest bardzo dobre dla dużych danych. Przykładowo dla liczb 32-bitowych przy sortowaniu 2000 danych sortowanie pozycyjne wykona (b · n/log2 (n))) = 32 · 2000/log2(2000) ≈ 3 ∗ 2000 operacji. Dla porównania, sortowanie szybkie wykona n · log2 (n) = 2000 · log2 (2000) ≈ 11 ∗ 2000 operacji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 4 49 / 49
Podobne dokumenty
Wstep do Informatyki - Dr hab. Bożena Woźna
˛ rejestracja za opłata˛ jeśli sie˛ je dłużej używa. Freeware - programy darmowe. Adware - programy darmowe, ale pokazujace ˛ reklamy. Middleware - oprogramowanie pośredniczace ˛ (np. spyware).
Bardziej szczegółowo