Algorytmy i Struktury Danych.

Podobne dokumenty
Podstawowe algorytmy i ich implementacje w C. Wykład 9

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Sortowanie w czasie liniowym

Programowanie Proceduralne

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Podstawy Informatyki

Sortowanie przez scalanie

Algorytmy i Struktury Danych

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Analiza algorytmów zadania podstawowe

INFORMATYKA SORTOWANIE DANYCH.

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Sortowanie bąbelkowe

Programowanie w VB Proste algorytmy sortowania

Algorytmy i Struktury Danych, 2. ćwiczenia

Zasady analizy algorytmów

Sortowanie - wybrane algorytmy

PODSTAWY INFORMATYKI wykład 5.

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Sortowanie przez wstawianie Insertion Sort

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Podstawy Informatyki. Sprawność algorytmów

Algorytmy sortujące i wyszukujące

Wykład 4. Sortowanie

Wstęp do Programowania potok funkcyjny

Strategia "dziel i zwyciężaj"

Porównanie Heap Sort, Counting Sort, Shell Sort, Bubble Sort. Porównanie sortowao: HS, CS, Shs, BS

1. Analiza algorytmów przypomnienie

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Zaawansowane algorytmy i struktury danych

Podstawy programowania. Przykłady algorytmów Cz. 2 Sortowanie

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Wprowadzenie do złożoności obliczeniowej

Sortowanie przez wstawianie

Jednym z najprostszych sposobów porządkowania jest technika stosowana przy sortowaniu listów:

Informatyka A. Algorytmy

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

Sortowanie. Bartman Jacek Algorytmy i struktury

Laboratorium nr 7 Sortowanie

Efektywna metoda sortowania sortowanie przez scalanie

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Podstawy Informatyki dla Nauczyciela

Analiza algorytmów zadania podstawowe

Struktury Danych i Złożoność Obliczeniowa

Algorytmy i Struktury Danych

Laboratoria nr 1. Sortowanie

Problemy porządkowe zadania

Źródła. N.Wirth Algorithms and Data Structures, 1985 D.E.Knuth The Art of Computer Programming. Vol. 3, 1973

Złożoność algorytmów. Wstęp do Informatyki

Wstęp do programowania

Algorytm selekcji Hoare a. Łukasz Miemus

Wstęp do programowania

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

zajęcia 3. Marcin Andrychowicz, Tomasz Kulczyński,

Przykładowe sprawozdanie. Jan Pustelnik

WSTĘP DO INFORMATYKI. Złożoność obliczeniowa, efektywność i algorytmy sortowania

Algorytmy i Struktury Danych.

Algorytmy i struktury danych Matematyka III sem.

Teoretyczne podstawy informatyki

ALGORYTMY I STRUKTURY DANYCH

Algorytmy i Struktury Danych. (c) Marcin Sydow. Introduction. QuickSort. Sortowanie 2. Limit. CountSort. RadixSort. Summary

Algorytmy i Struktury Danych.

Wstęp do Informatyki

Algorytmy i Struktury Danych

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

Zaawansowane algorytmy i struktury danych

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

Wykład 2. Poprawność algorytmów

Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.)

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Algorytmy i struktury danych

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).

Wykład 3. Metoda dziel i zwyciężaj

TEORETYCZNE PODSTAWY INFORMATYKI

Temat: Algorytm kompresji plików metodą Huffmana

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy i struktury danych

Algorytmy sortujące 1

PODSTAWY INFORMATYKI wykład 6.

Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

Algorytmy i Struktury Danych

2:8,7 3:9,4 / \ / \ / \ / \ 4:7,3 5:8 6:9,2 7:4

Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa

Wstęp do Informatyki

PODSTAWY INFORMATYKI wykład 10.

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Transkrypt:

Algorytmy i Struktury Danych. Problem Sortowania, cd. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 pomiędzy elementami jest opercja porównywania pary elementów (mniejsze niż, większe niż, mniejsze lub równe, większe lub równe, równe). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 pomiędzy elementami jest opercja porównywania pary elementów (mniejsze niż, większe niż, mniejsze lub równe, większe 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 3 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 pomiędzy elementami jest opercja porównywania pary elementów (mniejsze niż, większe niż, mniejsze lub równe, większe 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 log 2 n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 pomiędzy elementami jest opercja porównywania pary elementów (mniejsze niż, większe niż, mniejsze lub równe, większe 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 log 2 n). Czy można mieć lepszy algorytm sortujacy? Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 pomiędzy elementami jest opercja porównywania pary elementów (mniejsze niż, większe niż, mniejsze lub równe, większe 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 log 2 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 3 2 / 49

Drzewo decyzyjne - przykład Każdy wierzchołek wewnętrzny etykietowany jest przez i : j, gdzie i, j {1,..., n}. Lewe podrzewo pokazuje kolejne porównywania w przypadku, gdy a i a j Prawe podrzewo pokazuje kolejne porównywania w przypadku, gdy a i a j 1 2 3 Sortowanie ciagu (a 1, a 2,..., a n ): 1:2 2:3 1:3 1:3 2 1 3 2:3 1 3 2 3 1 2 2 3 1 3 2 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 3 / 49

Drzewo decyzyjne - przykład Każdy wierzchołek wewnętrzny etykietowany jest przez i : j, gdzie i, j {1,..., n}. Lewe podrzewo pokazuje kolejne porównywania w przypadku, gdy a i a j Prawe podrzewo pokazuje kolejne porównywania w przypadku, gdy a i a j 1 2 3 Sortowanie ciagu (a 1, a 2,..., a n ) = (9, 4, 6): 1:2 2:3 1:3 1:3 2 1 3 2:3 1 3 2 3 1 2 9 4 2 3 1 3 2 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 4 / 49

Drzewo decyzyjne - przykład Każdy wierzchołek wewnętrzny etykietowany jest przez i : j, gdzie i, j {1,..., n}. Lewe podrzewo pokazuje kolejne porównywania w przypadku, gdy a i a j Prawe podrzewo pokazuje kolejne porównywania w przypadku, gdy a i a j 1 2 3 Sortowanie ciagu (a 1, a 2,..., a n ) = (9, 4, 6): 1:2 2:3 1:3 1:3 2 1 3 2:3 1 3 2 3 1 2 9 6 2 3 1 3 2 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 5 / 49

Drzewo decyzyjne - przykład Każdy wierzchołek wewnętrzny etykietowany jest przez i : j, gdzie i, j {1,..., n}. Lewe podrzewo pokazuje kolejne porównywania w przypadku, gdy a i a j Prawe podrzewo pokazuje kolejne porównywania w przypadku, gdy a i a j 1 2 3 Sortowanie ciagu (a 1, a 2,..., a n ) = (9, 4, 6): 1:2 2:3 1:3 1:3 2 1 3 2:3 1 3 2 3 1 2 4 6 2 3 1 3 2 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 6 / 49

Drzewo decyzyjne - przykład Każdy liść zawiera permutację π(1),π(2),...,π(n) wskazujac a ustanowiony porzadek a π(1) a π(2) a π(n). 1 2 3 Sortowanie ciagu (a 1, a 2,..., a n ) = (9, 4, 6): 1:2 2:3 1:3 1:3 2 1 3 2:3 1 3 2 3 1 2 2 3 1 3 2 1 4 6 9 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 7 / 49

Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna metodę sortujac a oparta na modelu porównywania elementów. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 8 / 49

Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna metodę 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 3 8 / 49

Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna metodę 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 3 8 / 49

Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna metodę 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 wględu na rozmiar danych wejściowych. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 8 / 49

Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna metodę 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 wględu 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 3 8 / 49

Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna metodę 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 wględu 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 3 8 / 49

Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna metodę 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 wględu 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 3 8 / 49

Drzewo decyzyjne Drzewo decyzyjne może modelować dowolna metodę 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 wględu 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 3 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 log 2 (n)). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 log 2 (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 3 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 log 2 (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 2 h liści. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 log 2 (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 2 h liści. Zatem mamy: n! 2 h h log 2 (n!) log 2 ((n/e) n ) = n log 2 (n) n log 2 (e) h Ω(n log 2 (n)) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 9 / 49

Sortowanie stabilne Dana metoda sortowania jest stabilna, jeśli zachowuje względna kolejność elementów ze zdublowanymi kluczami. Przykładowo, jeżeli ułożona alfabetycznie listę studentów posortujemy według roku studiów, to metoda stabilna zwróci w wyniku alfabetycznie ułożona listę osób podzielona ze wzgledu na rok studiów. Metoda niestabilna pozwala na sortowanie tylko względem jednego klucza. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 10 / 49

Sortowanie stabilne - przykład Dane Wejściowe Sortowanie niestabilne Sortowanie stabilne Adams 1 Adams 1 Adams 1 Black 2 Smith 1 Smith 1 Brown 4 Washington 2 Black 2 Jackson 2 Jackson 2 Jackson 2 Jones 4 Black 2 Washington 2 Smith 1 White 3 White 3 Thompson 4 Wilson 3 Wilson 3 Washington 2 Thompson 4 Brown 4 White 3 Brown 4 Jones 4 Wilson 3 Jones 4 Thompson 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 następnej części wykładu Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 3 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 3 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 3 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 występuje 2 razy Liczba 2 występuje 1 raz Liczba 3 występuje 2 razy Liczba 4 występuje 0 razy Liczba 5 występuje 0 razy Liczba 6 występuje 1 raz Liczba 7 występuje 2 razy Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 występuje 2 razy Liczba 2 występuje 1 raz Liczba 3 występuje 2 razy Liczba 4 występuje 0 razy Liczba 5 występuje 0 razy Liczba 6 występuje 1 raz Liczba 7 występuje 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 3 14 / 49

Sortowanie przez zliczanie - uwagi Proces zliczania odbywa się w jednym kroku Nie dochodzi do ani jednej zamiany elementów Proces tworzenia tablicy wynikowej odbywa się w jednym kroku Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 liczbę 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 3 16 / 49

Sortowanie przez zliczanie -przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 17 / 49

Sortowanie przez zliczanie - pętla nr. 1 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 18 / 49

Sortowanie przez zliczanie - pętla nr. 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 19 / 49

Sortowanie przez zliczanie - pętla nr. 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 20 / 49

Sortowanie przez zliczanie - pętla nr. 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 21 / 49

Sortowanie przez zliczanie - pętla nr. 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 22 / 49

Sortowanie przez zliczanie - pętla nr. 2 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 23 / 49

Sortowanie przez zliczanie - pętla nr. 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 24 / 49

Sortowanie przez zliczanie - pętla nr. 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 25 / 49

Sortowanie przez zliczanie - pętla nr. 3 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 26 / 49

Sortowanie przez zliczanie - pętla nr. 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 27 / 49

Sortowanie przez zliczanie - pętla nr. 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 28 / 49

Sortowanie przez zliczanie - pętla nr. 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 29 / 49

Sortowanie przez zliczanie - pętla nr. 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 30 / 49

Sortowanie przez zliczanie - pętla nr. 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 3 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 3 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 3 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 3 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 3 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 = 2 8 = 256 - pomocnicza tablica ma zatem rozmiar 256. Wówczas counting-sort działa naprawdę szybko, tj. w czasie (256+n) = Θ(n). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 = 2 8 = 256 - pomocnicza tablica ma zatem rozmiar 256. Wówczas counting-sort działa naprawdę 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 3 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 = 2 8 = 256 - pomocnicza tablica ma zatem rozmiar 256. Wówczas counting-sort działa naprawdę 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 = 2 32, 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 3 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 3 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ł firmę Tabulating Machine Company, z której w 1924 wyłoniła się firma IBM (International Business Machines). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 35 / 49

Karta dziurkowana Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 36 / 49

Herman Hollerith (1860-1929) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 37 / 49

Geneza sortowania pozycyjnego Oto cytat z roku 1889 opisujacy patent (maszynę 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 3 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 3 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) względem 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 3 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 3 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 3 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 3 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 3 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 3 41 / 49

Sortowanie pozycyjne - przykład Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 42 / 49

Sortowanie Pozycyjne -poprawność Indukcja ze względu na pozycje cyfry Załóżmy, że liczby sa posortowane niemalejaco względem t 1 cyfry. Sortujemy według cyfry t Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 43 / 49

Sortowanie Pozycyjne -poprawność Sortujemy według cyfry t Liczby różnia się na t-tej cyfrze: Ponieważ sortujemy względem 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 3 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 3 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 3 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 3 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 3 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 3 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 3 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 3 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 będzie wykonany w czsie Θ(n+2 r ). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 będzie wykonany w czsie Θ(n+2 r ). Ponieważ w sortowaniu pozycyjnym będziemy mieli b/r przebiegów, to czas wykonania sortowania będzie: T(n, b) = Θ( b r (n+2r )) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 47 / 49

Wybór r T(n, b) = Θ( b r (n+2r )) 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 będzie tylko kilka przebiegów. Należy jednka zwrócić uwagę, aby r nie było zbyć duże, gdyż jeśli r > log 2 (n), to czas sorowania pomocniczego (przez zliczanie) i potrzebna mu pamięć będzie zbyt duża!!! Aby zminimalizować T(n, b), należy wybrać r = log 2 (n), co implikuje T(n, b) = Θ(b n/log 2 (n))). Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 48 / 49

Wybór r T(n, b) = Θ( b r (n+2r )) 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 będzie tylko kilka przebiegów. Należy jednka zwrócić uwagę, aby r nie było zbyć duże, gdyż jeśli r > log 2 (n), to czas sorowania pomocniczego (przez zliczanie) i potrzebna mu pamięć będzie zbyt duża!!! Aby zminimalizować T(n, b), należy wybrać r = log 2 (n), co implikuje T(n, b) = Θ(b n/log 2 (n))). Powyższe r można uzyskać poprzez zróżniczkowanie fukcji T(n, b) względem zmiennej r i podstawieniu pod powstała funkcję wartości 0. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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 3 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/log 2 (n))) = 32 2000/log 2 (2000) 3 2000 operacji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 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/log 2 (n))) = 32 2000/log 2 (2000) 3 2000 operacji. Dla porównania, sortowanie szybkie wykona n log 2 (n) = 2000 log 2 (2000) 11 2000 operacji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 3 49 / 49