PODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIPODSTAWY INFORMATYKIwykład 5.wykład 5.wykład 5.wykład 5.wykład 5.wykład 5.wykład 5.wykład 5.
Adrian Adrian HorzykHorzykWeb: Web: http://home.agh.edu.pl/~horzyk/http://home.agh.edu.pl/~horzyk/
EE--mail: mail: [email protected]@agh.edu.plEE--mail: mail: [email protected]@agh.edu.pl
Google: Adrian Google: Adrian HorzykHorzyk
Gabinet: paw. D13 p. 325Gabinet: paw. D13 p. 325
Akademia GórniczoAkademia Górniczo--Hutnicza w KrakowieHutnicza w Krakowie
WEAIiEWEAIiE, Katedra Automatyki, Katedra Automatyki
http://www.agh.edu.plhttp://www.agh.edu.pl
Mickiewicza Av. 30, 30Mickiewicza Av. 30, 30--059 059 CracowCracow, Poland, Poland
Porządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowanie
Efektywność różnych działań zwykle wzrasta, gdy dane,
na których pracujemy są w pewien sposób
uporządkowane (posortowane).
Zbiór posortowany to taki zbiór, w którym kolejne
elementy są poukładane w pewnym porządku
(kolejności), który określamy za pomocą pewnej relacji
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 2222....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
(kolejności), który określamy za pomocą pewnej relacji
porządkowej (np. <, <=, >, >=), która jednoznacznie
wyznacza kolejność elementów w zbiorze.
Możemy mówić o:
� porządku rosnącym: D = {1,2,2,4,4,5,6,8,8,9}
� porządku malejącym: D = {9,8,8,6,5,4,4,2,2,1}
Porządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowaniePorządek, uporządkowanie, kolejność i sortowanie
Sortowanie jest to proces układania elementów zbioru w
kolejności wg pewnego porządku, czyli ma zatem prowadzić do
znalezienia odpowiedniej permutacji elementów zbioru
nieuporządkowanego, aby w wyniku tego działania spełniały
założony porządek.
Sortować możemy cokolwiek (liczby, znaki, ciągi znaków, kolory,
obrazy…) jeśli tylko wyznaczona jest relacja porządkująca te
elementy.
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 3333....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
elementy.
Sortowanie stosuje się w celu ułatwienia późniejszego
wyszukiwania elementów sortowanego zbioru. Sortowanie jest
bardzo powszechnym działaniem w wielu różnych dziedzinach.
Sortowane są obiekty w listach płac, książka telefonicznych i
adresowych, w bibliotekach, słownikach, magazynach i wszędzie
tam, gdzie występuje potrzeba szybkiego przeszukiwania i
dostępu do składowanych obiektów.
Podział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowania
Wybór algorytmu sortowania zależny jest od wykorzystywanej struktury
danych, złożoności pamięciowej, zachowania kolejności elementów o tej
samej wartości:
Sortowanie wewnętrzne (tablic, które są przechowywane w szybkiej, o
dostępie swobodnym „wewnętrznej” pamięci komputerów – zwykle RAM)
Sortowanie zewnętrzne (plików sekwencyjnych, które są zazwyczaj
przechowywane w wolniejszej pamięci „zewnętrznej” z dostępem
bezpośrednim tylko do wierzchu każdej sterty danych).
Sortowanie stabilne - zachowują kolejność elementów o równych
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 4444....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Sortowanie stabilne - zachowują kolejność elementów o równych
wartościach. Oznacza to, że elementy o równych wartościach będą
występowały w tej samej kolejności w zbiorze posortowanym, w jakiej
występowały w zbiorze nieposortowanym. Jest to istotne w sytuacji, gdy
nie chcemy, żeby elementy o równych wartościach klucza zmieniały swoje
względne położenie, np. pracując na rekordach baz danych.
Sortowanie niestabilne - kolejność wynikowa elementów o równych
wartościach jest nieokreślona, czyli względne uporządkowanie elementów
o równych wartościach zwykle nie zostaje zachowane.
Podział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowaniaPodział algorytmów sortowania
Wybór algorytmu sortowania zależny jest od wykorzystywanej struktury
danych, złożoności pamięciowej, zachowania kolejności elementów o tej
samej wartości:
Sortowanie w miejscu (in place) - wymagają stałej liczby dodatkowych
struktur danych, która nie zależy od liczby elementów sortowanego zbioru
danych (ani od ich wartości). Dodatkowa złożoność pamięciowa jest zatem
klasy O(1). Sortowanie odbywa się wewnątrz zbioru. Ma to bardzo istotne
znaczenie w przypadku dużych zbiorów danych, gdyż mogłoby się okazać,
iż posortowanie ich nie jest możliwe z uwagi na brak pamięci w systemie.
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 5555....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
iż posortowanie ich nie jest możliwe z uwagi na brak pamięci w systemie.
Sortowanie nie w miejscu - wymagają zarezerwowania w pamięci
dodatkowych obszarów, których wielkość jest uzależniona od liczby
sortowanych elementów lub od ich wartości. Tego typu algorytmy są
zwykle bardzo szybkie w działaniu, jednakże okupione to jest
dodatkowymi wymaganiami na pamięć. Zatem w pewnych sytuacjach
może się okazać, iż taki algorytm nie będzie w stanie posortować dużego
zbioru danych, ponieważ system komputerowy nie posiada wystarczającej
ilości pamięci RAM.
Ocena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowania
Ciech sortowanie będzie działaniem na obiektach a1, a2, ..., an ipolega na takim ponumerowaniu tych obiektów ak1, ak2, ..., akn, żedla dla zdanej funkcji porządkującej f spełniona jest: f(ak1) ≤f(ak2) ≤ ... ≤ f(akn). Często obiekty rzeczywiste ai sortowane sąwedług pewnego określonego klucza służącego identyfikacjiobiektów, które zdefiniujemy sobie następująco:
type obiekt = recordklucz: integer;
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 6666....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
klucz: integer;{deklaracje innych składowych}
end
gdzie „inne składowe” reprezentują właściwe dane dotycząceobiektu.
Ocena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowaniaOcena efektywności algorytmów sortowania
Do najważniejszych kryteriów oceny jakości metod sortowanianależą:
� złożoność pamięciowa - ilość potrzebnej pamięci (oszczędnośćpamięci)
� złożoność czasowa – ilość potrzebnych operacji:� liczba koniecznych porównań kluczy� liczba koniecznych przesunięć/przestawień obiektów.
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 7777....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Dobre algorytmy sortowania wymagają porównań rzędu: n log n.Metody proste wymagają zazwyczaj porównań rzędu: n2. Dodużych zbiorów danych stosujemy metody skomplikowane ozłożoności obliczeniowej O(n log n), jednak dla dostateczniemałych n metody proste są często bardziej efektywne ze względuna swoją prostotę. Istnieją też algorytmy o złożoności O(n) przydodatkowych warunkach!
Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (BubbleBubbleBubbleBubbleBubbleBubbleBubbleBubble Sort)Sort)Sort)Sort)Sort)Sort)Sort)Sort)
Sortowanie bąbelkowe (przez zamianę) polega na cyklicznym
porównywaniu par sąsiadujących elementów (bąbelków) oraz
zmianie ich kolejności w przypadku niespełnienia relacji
porządkującej pomiędzy nimi. Operację tą powtarzamy,
dopóki cały zbiór nie zostanie posortowany.
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 8888....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Złożoność obliczeniowa algorytmu sortowania bąbelkowego O(n2):
Po = (n2-n)/2 Prmin = 0 Prśr = 3*(n2-n)/4 Prmax = 3*(n2-n)/2
Sortowanie stabilne, w miejscu, wewnętrzne.
Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (Sortowanie bąbelkowe (BubbleBubbleBubbleBubbleBubbleBubbleBubbleBubble Sort)Sort)Sort)Sort)Sort)Sort)Sort)Sort)
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 9999....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Sortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacji
Algorytm sortowania bąbelkowego w każdym obiegu przepycha element
maksymalny na koniec, wobec czego nie ma sensu sprawdzać takich
elementów. Ponadto wykonuje dwa rodzaje operacji: test bez i z zamianą
miejsc elementów. Można zatem wyeliminować te operacje, które nie dokonują
zamianę, a ponadto brak zamian w danym obiegu oznacza możliwość
zakończenia algorytmu sortowania.
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 10101010....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Sortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacjiSortowanie bąbelkowe z jednostronnym pominięciem pustych operacji
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 11111111....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Sortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacji
Ponadto algorytm sortowania bąbelkowego dokonuje niepotrzebnych
sprawdzeń już posortowanych elementów na początku tablicy, biorąc pod
uwagę, iż elementy mniejsze w porównywanym bąbelku mogą zostać
przepchnięte maksymalnie o 1 pozycję wstecz.
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 12121212....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Sortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacjiSortowanie bąbelkowe z dwustronnym pominięciem pustych operacji
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 13131313....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (InsertionInsertionInsertionInsertionInsertionInsertionInsertionInsertion Sort)Sort)Sort)Sort)Sort)Sort)Sort)Sort)
Algorytm ten można porównać do sposobu układania kart pobieranych z talii. Kolejne
brane karty porównujemy z kartami już ułożonymi, które trzymamy w ręce i szukamy
dla niej odpowiedniego miejsca, gdzie ją wkładamy rozsuwając pozostałe karty.
Sortując w tablicy na jednym końcu (zwykle z tyłu) jest posortowana część zbioru,
która sukcesywnie rozrasta się do całej tablicy.
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 14141414....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Złożoność obliczeniowa algorytmu sortowania przez wstawianie O(n2):
Pomin = n – 1 Pośr = (n2 + n – 2)/4 Pomax = (n2 + n)/2 – 1
Prmin = 2(n-1) Prśr = (n2 + 9n – 10)/4 Prmax = (n2 + 3n - 4)/2
Sortowanie stabilne, w miejscu, wewnętrzne.
Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (Sortowanie przez wstawianie (InsertionInsertionInsertionInsertionInsertionInsertionInsertionInsertion Sort)Sort)Sort)Sort)Sort)Sort)Sort)Sort)
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 15151515....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (BinaryBinaryBinaryBinaryBinaryBinaryBinaryBinary InsertionInsertionInsertionInsertionInsertionInsertionInsertionInsertion Sort)Sort)Sort)Sort)Sort)Sort)Sort)Sort)
W tej wersji algorytmu wykorzystano fakt, iż elementy są posortowane w przedziale,
gdzie wstawiany jest kolejny element, wobec czego można zastosować szybszy algorytm
„dziel i zwyciężaj” do odnalezienia miejsca wstawienia tego elementu.
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 16161616....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Złożoność obliczeniowa algorytmu sortowania przez wstawianie O(n2):
Po = log2 1 + log2 2 + ... + log2 n ≈ n(log n – c) + c; gdzie c = 1/ln 2 = 1,44
Prmin = 2(n-1) Prśr = (n2 + 9n – 10)/4 Prmax = (n2 + 3n - 4)/2
Sortowanie stabilne, w miejscu, wewnętrzne.
Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (Sortowanie przez wstawianie połówkowe (BinaryBinaryBinaryBinaryBinaryBinaryBinaryBinary InsertionInsertionInsertionInsertionInsertionInsertionInsertionInsertion Sort)Sort)Sort)Sort)Sort)Sort)Sort)Sort)
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 17171717....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (SelectionSelectionSelectionSelectionSelectionSelectionSelectionSelection Sort)Sort)Sort)Sort)Sort)Sort)Sort)Sort)
Jeśli zbiór sortujemy rosnąco, najmniejszy element powinien znaleźć się na pierwszej
pozycji, wobec czego szukamy najmniejszy element w ciągu jeszcze nieposortowanym i
zamieniamy go z elementem na pierwszej pozycji. W ten sposób element z pierwszej
pozycji znajdzie się na pozycji najmniejszego elementu. Z pozostałego przedziału
nieposortowanych elementów wybieramy następny najmniejszy element itd.
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 18181818....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Złożoność obliczeniowa algorytmu sortowania przez wybieranie O(n2):
Po = (n2-n)/2 Prmin = 3(n-1) Prśr = n(ln n+γ) gdzie γ=0,577216 jest stałą Eulera Prmax = trunc(n/4)2 + 3(n-1)
Sortowanie niestabilne, w miejscu, wewnętrzne.
Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (Sortowanie przez wybieranie (SelectionSelectionSelectionSelectionSelectionSelectionSelectionSelection Sort)Sort)Sort)Sort)Sort)Sort)Sort)Sort)
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 19191919....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:Literatura i bibliografia:
� Algorytmy sortujące: http://www.i-lo.tarnow.pl/edu/inf/alg/algsort/index.html
� Algorytmy sortujące: http://www.home.umk.pl/~abak/wdimat/s/Index.html
� L. Banachowski, K. Diks, W. Rytter: „Algorytmy i struktury danych”, WNT, Warszawa, 2001
� Z. Fortuna, B. Macukow, J. Wąsowski, „Metody numeryczne”, WNT, Warszawa, 1993.
� K. Jakubczyk, „Turbo Pascal i Borland C++”, Wydanie II, Helion, 2006.
� J. i M. Jankowscy, „Przegląd metod i algorytmów numerycznych”, WNT, Warszawa, 1988.
� A. Kiełbasiński, H. Schwetlick, „Numeryczna algebra liniowa”, WNT, Warszawa 1992.
� A. Kierzkowski, „Turbo Pascal. Ćwiczenia praktyczne.”, Helion 2006.
� K. Koleśnik, „Wstęp do programowania z przykładami w Turbo Pascalu”, Helion,
Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona Wykład 5. Strona 20202020....PODSTAWY INFORMATYKI, Adrian Horzyk, http://home.agh.edu.pl/~horzyk
� M. Sysło: „Elementy Informatyki”.
� A. Szepietowski: „Podstawy Informatyki”.
� R. Tadeusiewicz, P. Moszner, A. Szydełko: „Teoretyczne podstawy informatyki”.
� W. M. Turski: „Propedeutyka informatyki”.
� N. Wirth: „Wstęp do programowania systematycznego”.
� N. Wirth: „ALGORYTMY + STRUKTURY DANYCH = PROGRAMY”.
Top Related