PODSTAWY INFORMATYKI wykład 5.

Podobne dokumenty
PODSTAWY INFORMATYKI wykład 10.

Algorytmy i struktury danych

PODSTAWY INFORMATYKI wykład 6.

WSTĘP DO INFORMATYKI WPROWADZENIE DO ALGORYTMIKI

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

Algorytmy sortujące i wyszukujące

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 )

Laboratorium nr 7 Sortowanie

Sortowanie przez wstawianie Insertion Sort

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

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

PODSTAWY INFORMATYKI wykład 1.

INFORMATYKA SORTOWANIE DANYCH.

Programowanie w VB Proste algorytmy sortowania

WSTĘP DO INFORMATYKI. Struktury liniowe

Sortowanie - wybrane algorytmy

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

Jeszcze o algorytmach

Algorytmy sortujące. Sortowanie bąbelkowe

Algorytmy i Struktury Danych.

Zaawansowane algorytmy i struktury danych

Wstęp do programowania

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Informatyka 1. Złożoność obliczeniowa

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

METODY INŻYNIERII WIEDZY

Sortowanie. Bartman Jacek Algorytmy i struktury

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Sortowanie. LABORKA Piotr Ciskowski

Struktury Danych i Złożoność Obliczeniowa

Algorytmy i Struktury Danych, 2. ćwiczenia

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Algorytmy i struktury danych, C3

METODY INŻYNIERII WIEDZY

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

Sortowanie przez scalanie

METODY INŻYNIERII WIEDZY

Matematyczne Podstawy Informatyki

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

1. Znajdowanie miejsca zerowego funkcji metodą bisekcji.

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

Sortowanie bąbelkowe

Strategia "dziel i zwyciężaj"

Wprowadzenie do złożoności obliczeniowej

Podstawy Programowania. Złożoność obliczeniowa

Wykład 4. Sortowanie

Algorytmy i struktury danych Sortowanie IS/IO, WIMiIP

Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010

PODSTAWY INFORMATYKI wykład 4.

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

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Teoretyczne podstawy informatyki

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

Zasady analizy algorytmów

Przykładowe sprawozdanie. Jan Pustelnik

Problemy porządkowe zadania

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

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

Algorytmy przeszukiwania

Podstawy Programowania. Złożoność obliczeniowa

KARTA PRZEDMIOTU. Algorytmy i struktury danych, C4

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Realizacja w roku akademickim 2016/17

Analiza algorytmów zadania podstawowe

Bazy danych. Plan wykładu. Model logiczny i fizyczny. Operacje na pliku. Dyski. Mechanizmy składowania

Kierunek: Informatyka. Przedmiot:

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

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy Programowania

Algorytmy i struktury danych

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

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

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Sortowanie zewnętrzne

Podstawy Informatyki. Sprawność algorytmów

Metodyki i Techniki Programowania 2

Podstawy Informatyki. Metody dostępu do danych

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

Elektrotechnika I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) Niestacjonarne (stacjonarne / niestacjonarne)

KARTA MODUŁU KSZTAŁCENIA

Sortowanie w czasie liniowym

Podstawy Programowania

PODSTAWY INFORMATYKI wykład 13.

Algorytmika i pseudoprogramowanie

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

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

Dynamiczne struktury danych

Tabela wewnętrzna - definicja

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Programowanie Proceduralne

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

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Sortowanie Shella Shell Sort

Algorytm selekcji Hoare a. Łukasz Miemus

TEORETYCZNE PODSTAWY INFORMATYKI

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

PRZEWODNIK PO PRZEDMIOCIE

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Transkrypt:

PODSTAWY INFORMATYKI wykład 5. Adrian Horzyk Web: http://home.agh.edu.pl/~horzyk/ E-mail: horzyk@agh.edu.pl Google: Adrian Horzyk Gabinet: paw. D13 p. 325 Akademia Górniczo-Hutnicza w Krakowie WEAIiE, Katedra Automatyki http://www.agh.edu.pl Mickiewicza Av. 30, 30-059059 Cracow, Poland

Porzą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 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} Wykład 5. Strona 2.

Porzą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. 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. Wykład 5. Strona 3.

Podział 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 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. Wykład 5. Strona 4.

Podział 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. 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. Wykład 5. Strona 5.

Ocena efektywności algorytmów sortowania iech sortowanie będzie działaniem na obiektach a 1, a 2,..., a n i polega na takim ponumerowaniu tych obiektów a k1, a k2,..., a kn, że dla dla zdanej funkcji porządkującej f spełniona jest: f(a k1 ) f(a k2 )... f(a kn ). Często obiekty rzeczywiste a i sortowane są według pewnego określonego klucza służącego identyfikacji obiektów, które zdefiniujemy sobie następująco: type obiekt = record klucz: integer; {deklaracje innych składowych} end gdzie inne składowe reprezentują właściwe dane dotyczące obiektu. Wykład 5. Strona 6.

Ocena efektywności algorytmów sortowania Do najważniejszych kryteriów oceny jakości metod sortowania należą: 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. Dobre algorytmy sortowania wymagają porównań rzędu: n log n. Metody proste wymagają zazwyczaj porównań rzędu: n 2. Do dużych zbiorów danych stosujemy metody skomplikowane o złożoności obliczeniowej O(n log n), jednak dla dostatecznie małych n metody proste są często bardziej efektywne ze względu na swoją prostotę. Istnieją też algorytmy o złożoności O(n) przy dodatkowych warunkach! Wykład 5. Strona 7.

Sortowanie bąbelkowe (Bubble 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. Złożoność obliczeniowa algorytmu sortowania bąbelkowego O(n 2 ): Po = (n 2 -n)/2 Pr min = 0 Pr śr = 3*(n 2 -n)/4 Pr max = 3*(n 2 -n)/2 Sortowanie stabilne, w miejscu, wewnętrzne. Wykład 5. Strona 8.

Sortowanie bąbelkowe (Bubble Sort) Wykład 5. Strona 9.

Sortowanie 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 10.

Sortowanie bąbelkowe z jednostronnym pominięciem pustych operacji Wykład 5. Strona 11.

Sortowanie 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 12.

Sortowanie bąbelkowe z dwustronnym pominięciem pustych operacji Wykład 5. Strona 13.

Sortowanie przez wstawianie (Insertion 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. Złożoność obliczeniowa algorytmu sortowania przez wstawianie O(n 2 ): Po min = n 1 Po śr = (n 2 + n 2)/4 Po max = (n 2 + n)/2 1 Pr min = 2(n-1) Pr śr = (n 2 + 9n 10)/4 Pr max = (n 2 + 3n - 4)/2 Sortowanie stabilne, w miejscu, wewnętrzne. Wykład 5. Strona 14.

Sortowanie przez wstawianie (Insertion Sort) Wykład 5. Strona 15.

Sortowanie przez wstawianie połówkowe (Binary Insertion 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. Złożoność obliczeniowa algorytmu sortowania przez wstawianie O(n 2 ): Po = log 2 1 + log 2 2 +... + log 2 n n(log n c) + c; gdzie c = 1/ln 2 = 1,44 Pr min = 2(n-1) Pr śr = (n 2 + 9n 10)/4 Pr max = (n 2 + 3n - 4)/2 Sortowanie stabilne, w miejscu, wewnętrzne. Wykład 5. Strona 16.

Sortowanie przez wstawianie połówkowe (Binary Insertion Sort) Wykład 5. Strona 17.

Sortowanie przez wybieranie (Selection 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. Złożoność obliczeniowa algorytmu sortowania przez wybieranie O(n 2 ): Po = (n 2 -n)/2 Pr min = 3(n-1) Pr śr = n(ln n+γ) gdzie γ=0,577216 jest stałą Eulera Pr max = trunc(n/4) 2 + 3(n-1) Sortowanie niestabilne, w miejscu, wewnętrzne. Wykład 5. Strona 18.

Sortowanie przez wybieranie (Selection Sort) Wykład 5. Strona 19.

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, 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. Wykład 5. Strona 20.