Wykład 4. Sortowanie

Podobne dokumenty
Sortowanie w czasie liniowym

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Syllabus Wprowadzenie Poprawno

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

Laboratorium nr 7 Sortowanie

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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 )

Algorytmy i struktury danych

Programowanie Proceduralne

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

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Programowanie w VB Proste algorytmy sortowania

Algorytmy i Struktury Danych.

Analiza algorytmów zadania podstawowe

Algorytm selekcji Hoare a. Łukasz Miemus

Wykład 2. Poprawność algorytmów

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy sortujące 1

Podstawy Informatyki

Sortowanie bąbelkowe

PODSTAWY INFORMATYKI wykład 5.

Algorytmy i Struktury Danych, 2. ćwiczenia

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Algorytmy i Struktury Danych.

Analiza algorytmów zadania podstawowe

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

Laboratoria nr 1. Sortowanie

Sortowanie - wybrane algorytmy

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

Informatyka A. Algorytmy

Algorytmy sortujące i wyszukujące

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

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

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

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

Sortowanie przez wstawianie

Laboratoria nr 1. Sortowanie

Zasady analizy algorytmów

Sortowanie zewnętrzne

. Podstawy Programowania 1. Sortowanie tablic jednowymiarowych. Arkadiusz Chrobot. 16 listopada 2016

Zaawansowane algorytmy. Wojciech Horzelski

Wybrane algorytmy tablicowe

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4

Algorytmy i Struktury Danych.

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

Algorytmy. 1. Sortowanie 2. Statki i okręty. programowanie cz.7. poniedziałek, 2 marca 2009

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.

Struktury Danych i Złożoność Obliczeniowa

Sortowanie przez scalanie

ALGORYTMY I STRUKTURY DANYCH

Sortowanie Shella Shell Sort

Sortowanie. LABORKA Piotr Ciskowski

INFORMATYKA SORTOWANIE DANYCH.

Sortowanie. Bartman Jacek Algorytmy i struktury

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

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Algorytmy i Struktury Danych.

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima Uwagi przed sprawdzianem nr 1.

Algorytmy i Struktury Danych

Strategia "dziel i zwyciężaj"

Matematyczne Podstawy Informatyki

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy sortujące. Sortowanie bąbelkowe

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Przy pomocy indukcji udowodnimy, że nastąpi koniec świata, a warto byłoby wiedzieć kiedy, czy przed czy po egzaminie.

Przykładowe sprawozdanie. Jan Pustelnik

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Zapis algorytmów: schematy blokowe i pseudokod 1

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

Jeszcze o algorytmach

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

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

Temat 7. Najlżejsze i najcięższe algorytmy sortowania

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

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

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

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Algorytmy sortowania w języku C. Autor: mgr inż. Sławomir Samolej. Zagadnienie 1. (Sortowanie)

Podstawy Informatyki. Sprawność algorytmów

Wstęp do programowania

Metodyki i Techniki Programowania 2

Algorytmy i struktury danych

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

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

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

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Wstęp do programowania

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

EGZAMIN MATURALNY Z INFORMATYKI

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

Złożoność obliczeniowa i pamięciowa. Spis treści. Złożoność obliczeniowa -- założenia

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

Podstawy Informatyki. Metalurgia, I rok. Rekurencja. skomplikowane zadanie. Rekurencja

Podstawy Informatyki. Metalurgia, I rok. Wykład 5 Rekurencja

Wskaźniki. Programowanie Proceduralne 1

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Transkrypt:

Wykład 4 Sortowanie 1

Sortowanie - zadanie Definicja (dla liczb): wejście: ciąg n liczb A = (a 1, a 2,, a n ) wyjście: permutacja (a 1,, a n ) taka, że a 1 a n Po co sortować? Podstawowy problem dla algorytmiki Wiele algorytmów wykorzystuje sortowanie jako procedurę pomocniczą Pozwala pokazać wiele technik Dobrze zbadane (czas) 2

Sortowanie taksonomia Ø Wewnętrzne i zewnętrzne Zależnie od miejsca przechowywania zbioru: (RAM czy dysk) Ø Sortowanie tablic i sortowanie list łączonych zależnie od struktury danych (pliku); różny sposób dostępu (bezpośredni dla tablicy, sekwencyjny dla listy). Ø W miejscu lub nie Nie wymaga dodatkowej pamięci Ø Stabilne i niestabilne Kolejność elementów o tych samych wartościach klucza nie zmienia się. Inaczej kolejne sortowanie dla złożonych obiektów nie psuje efektów poprzedniego sortowania. Ø Bezpośrednie i pośrednie zależnie od tego przemieszczamy całe obiekty, czy tylko wskaźniki (indeksy) do nich 3

Zestawienie czasów działania Ø Przez wybór: O(N 2 ) zawsze Ø Bąbelkowe: O(N 2 ) najgorszy przypadek; O(N) najlepszy przyp. Ø Wstawianie: O(N 2 ) średnio; O(N) najlepszy przypadek Ø Shellsort: O(N 3/2 ) Ø Heapsort: O(NlogN) zawsze Ø Mergesort: O(NlogN) zawsze Ø Quicksort: O(NlogN) średnio; O(N 2 ) najgorszy przypadek Ø Zliczanie: O(N) zawsze Ø Radix sort: O(N) zawsze Ø zewnętrzne: O(b logb)) dla pliku o b stronach. 4

Sortowanie przez wybór pomysł Ø Znajdujemy najmniejszy element ciągu i zamieniamy go z pierwszym elementem. Powtarzamy to dla podciągu bez pierwszego elementu, itd. X X Znajdź minimum i zamień z pierwszym elementem 5

Sortowanie przez wybór pseudokod Selection_Sort(int A) 1 for i 1 to length[a] 2 do min i; 3 for j i+1 to length[a] 4 do if A[j] < A[min] then min j; 5 Exchange A[min] A[i] 6

Sortowanie przez wybór przykład iteracja 1 2 3 4 5 6 7 8 9 10 11 ciąg: EASYQUESTION - rozmiar 12 znaków #porównań #zamian EASYQUESTION AESYQUESTION 11 1 AESYQUESTION 10 1 AEEYQUSSTION 9 1 AEEIQUSSTYON 8 1 AEEINUSSTYOQ 7 1 AEEINOSSTYUQ 6 1 AEEINOQSTYUS 5 1 AEEINOQSTYUS 4 1 AEEINOQSSYUT 3 1 AEEINOQSSTUY 2 1 AEEINOQSSTUY 1 1 Razem 66 11 7

Sortowanie przez wybór czas działania Ø Zależność od danych wejściowych: Ilość przebiegów: nie (zawsze N-1) Ilość porównań: nie Ilość zamian: nie Ø O(N 2 ) zawsze (bez znaczenia jaki jest układ elementów w danych ważna tylko ilość) 8

Sortowanie bąbelkowe (przez zamianę) Ø Przechodzimy przez ciąg od jego końca, porównując sąsiadujące elementy i ewentualnie zamieniając je miejscami. Powtarzamy te procedurę aż do uporządkowania całego ciągu. Po pierwszym przejściu element minimalny znajduje się na początku a[0], po drugim na drugim miejscu znajduje się drugi co do wielkości a[1], po itd. Porównanie do wypływających bąbelków stąd nazwa. 9

Sortowanie bąbelkowe pseudokod BUBBLE_SORT(A) 1 for i 1 to length[a] 2 do for j length[a] downto i + 1 3 do if A[j] < A[j - 1] 4 then exchange A[j] A[j - 1] 10

Sortowanie bąbelkowe przykład iteracja 1 2 3 4 5 6 7 8 9 Ciąg: EASYQUESTION, (12 znaków) porównańzamian EASYQUESTION (najgorszy przyp) AEESYQUISTNO 11 (11) 8 (11) AEEISYQUNSTO 10 (10) 6 (10) AEEINSYQUOST 9 (9) 6 (9) AEEINOSYQUST 8 (8) 4 (8) AEEINOQSYSUT 7 (7) 3 (7) AEEINOQSSYTU 6 (6) 2 (6) AEEINOQSSTYU 5 (5) 1 (5) AEEINOQSSTUY 4 (4) 1 (4) AEEINOQSSTUY 3 (3) 0 (3) (2) (2) (1) (1) razem 63 (66) 31 (66) 11

Sortowanie bąbelkowe czas wykonania Ø Zależność od danych wejściowych: Ilość potrzebnych przejść: tak Ilość porównań w jednym przejściu: nie Ilość zamian: tak Ø Najlepszy przypadek: O(N) Jeśli elementy są już posortowane, np.: ABCDEFGHIJ. Tylko jedno przejście. Stąd mamy N-1 porównań i 0 zamian. Ø Najgorszy przypadek: O(N 2 ) Dane odwrotnie posortowane, np.: JIHGFEDCBA. N-1 przejść (N-1)N/2 porównań i (N-1)N/2 zamian 12

Sortowanie przez wstawianie pomysł Ø Dla każdego elementu ciągu (od lewej do prawej), wstawiamy go we właściwe miejsce ciągu elementów poprzedzających go (już posortowanych). 13

Sortowanie przez wstawianie pseudokod INSERTION_SORT(A) 1 for j 2 to length[a] 2 do key A[j] 3 i j-1 4 while i>0 and A[i]>key 5 do A[i+1] A[i] 6 i i-1 7 A[i+1] key 14

Sortowanie przez wstawianie przykład iteracja 1 2 3 4 5 6 7 8 9 10 11 Ciąg: EASYQUESTION, (12 znaków) porównań zamian (najgorszy przyp.) EASYQUESTION AESYQUESTION 1 (1) 1 (1) AESYQUESTION 1 (2) 0 (2) AESYQUESTION 1 (3) 0 (3) AEQSYUESTION 3 (4) 2 (4) AEQSUYESTION 2 (5) 1 (5) AEEQSUYSTION 5 (6) 4 (6) AEEQSSUYTION 3 (7) 2 (7) AEEQSSTUYION 3 (8) 2 (8) AEEIQSSTUYON 7 (9) 6 (9) AEEIOQSSTUYN 7 (10) 6 (10) AEEINOQSSTUY 8 (11) 7 (11) razem 41 (66) 31 (66) 15

Sortowanie przez wstawianie czas działania Ø Zależność od danych wejściowych: Ilość iteracji: nie (zawsze N-1) Ilość porównań: tak Ilość zamian: tak Ø Najgorszy przypadek: O(N 2 ) Elementy odwrotnie posortowane np.: JIHGFEDCBA. (N-1)N/2 porównań i (N-1)N/2 zamian. Ø Najlepszy przypadek: O(N) Elementy już posortowane np.: ABCDEFGHIJ. Jedno porównanie i 0 zamian w każdej iteracji. Razem, N-1 porównań i brak zamian. 16

Shellsort pomysł Ø Modyfikacja (rozszerzona wersja) sortowania przez wstawianie Ø Dążymy do zmniejszenia ilości zamian albo ciągi krótkie, albo lepsze ( bliższe posortowania). Ø Shellsort wykonuje sortowanie podciągów: Wybieramy ciąg liczb (zwany ciągiem przyrostów) h t,, h 2, h 1 ; h 1 =1; h t > > h 2 >h 1 ; Sortujemy ciągi elementów odległych o h t, h t-1, h t-2,,h 1. 17

Shellsort kod w C shellsort(itemtype a[], int l, int r) { int i, j, k, h; itemtype v; } int incs[16] = { 1391376, 463792, 198768, 86961, 33936, 13776, 4592, 1968, 861, 336, 112, 48, 21, 7, 3, 1 }; for ( k = 0; k < 16; k++) for (h = incs[k], i = l+h; i <= r; i++) { } v = a[i]; j = i; while (j >= h && a[j-h] > v) { a[j] = a[j-h]; j -= h; } a[j] = v; 18

Shellsort przykład ciąg: EASYQUESTION (12 znaków) ciąg przyrostów 4, 1. faza 1: przyrost = 4 porównań zamian EASYQUESTION EASYQUESTION 2 0 EASYQIESTUON 3 1 EAEYQIOSTUSN 3 2 EAENQIOSTUSY 3 3 Razem w tej fazie 11 6 19

Shellsort przykład faza 2: przyrost= 1 porównań zamian EAENQIOSTUSY AEENQIOSTUSY 1 1 AEENQIOSTUSY 1 0 AEENQIOSTUSY 1 0 AEENQIOSTUSY 1 0 AEEINQOSTUSY 3 2 AEEINOQSTUSY 2 1 AEEINOQSTUSY 1 0 AEEINOQSTUSY 1 0 AEEINOQSTUSY 1 0 AEEINOQSSTUY 3 2 AEEINOQSSTUY 1 0 Razem w tej fazie 16 6 20

Shellsort przykład Ø Razem 27 porównań i 12 zamian. Ø Dla sortowania przez wstawiania odpowiednio 41 i 31!!! Polepszenie dostajemy przez wstępne posortowanie, krótkich podciągów Ø Zwykle stosuje się ciągi przyrostów o więcej niż 2 elementach. 21

Shellsort czas działania Ø Nie ma możliwości przeprowadzenie dokładnej analizy dla przypadki ogólnego (wyniki są oparte o badania empiryczne). Ø Wybór ciągu przyrostów ma zasadniczy wpływ na czas sortowania. Dla ciągu podanego przez Shell a: O(N 2 ) I max = Floor(N/2), I k = Floor(I k+1 /2). np N=64:1, 2, 4, 8, 16, 32 Dla ciągu podanego przez Knuth a: O(N 3/2 ) I 1 =1, I k+1 = 1+3*I k. 1, 4, 13, 40, 121, 364, 22