Algorytmy i struktury danych

Podobne dokumenty
Algorytmy i struktury danych

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 )

Sortowanie. Bartman Jacek Algorytmy i struktury

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

PODSTAWY INFORMATYKI wykład 5.

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

Sortowanie. LABORKA Piotr Ciskowski

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

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

Filtracja obrazów. w dziedzinie częstotliwości. w dziedzinie przestrzennej

Laboratorium nr 7 Sortowanie

Wykład 4. Sortowanie

Programowanie w VB Proste algorytmy sortowania

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Wstęp do programowania

Analiza algorytmów zadania podstawowe

Algorytmy sortujące i wyszukujące

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

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

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Algorytmy i struktury danych

Przykładowe B+ drzewo

Efektywna metoda sortowania sortowanie przez scalanie

INFORMATYKA SORTOWANIE DANYCH.

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

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

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Laboratoria nr 1. Sortowanie

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

Sortowanie - wybrane algorytmy

Złożoność obliczeniowa zadania, zestaw 2

Programowanie Proceduralne

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

Metodyka i Technika Programowania 1

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

Bazy danych. Andrzej Łachwa, UJ, /15

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.

Wstęp do programowania. Różne różności

Struktury Danych i Złożoność Obliczeniowa

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Algorytmy i Struktury Danych.

Wykład 2. Poprawność algorytmów

Podstawy Programowania C++

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Tadeusz Pankowski

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Plan wykładu. Klucz wyszukiwania. Pojęcie indeksu BAZY DANYCH. Pojęcie indeksu - rodzaje indeksów Metody implementacji indeksów.

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

KONSPEKT ZAJĘĆ KOŁA INFORMATYCZNEGO LUB MATEMATYCZNEGO W KLASIE III GIMNAZJUM LUB I LICEUM ( 2 GODZ.)

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Tabela wewnętrzna - definicja

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Porządek symetryczny: right(x)

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

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Sortowanie przez scalanie

Wprowadzenie do złożoności obliczeniowej

Algorytmy i struktury danych

Algorytm selekcji Hoare a. Łukasz Miemus

sprowadza się od razu kilka stron!

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Algorytmy i struktury danych

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

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

Strategia "dziel i zwyciężaj"

Dynamiczne struktury danych

Definicja: Algorytmami sortowania zewnętrznego nazywamy takie algorytmy, które sortują dane umieszczone w pamięci zewnętrznej.

Język programowania PASCAL

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

Wstęp do programowania

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

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

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

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

Drzewa poszukiwań binarnych

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

Sortowanie bąbelkowe

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Wstęp do metod numerycznych Eliminacja Gaussa Równania macierzowe. P. F. Góra

Drzewa poszukiwań binarnych

Metodyki i Techniki Programowania 2

Optymalizacja. Przeszukiwanie lokalne

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

Podstawowe zagadnienia z zakresu baz danych

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Technologia informacyjna

Informatyka A. Algorytmy

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Biuletyn techniczny. Funkcje dodatkowe dla Clarion Report Writer CDN OPT!MA Copyright 2006 COMARCH S.A.

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

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

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Transkrypt:

Algorytmy i struktury danych Proste algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Pojęcie sortowania Sortowaniem nazywa się proces ustawiania zbioru obiektów w określonym porządku Sortowanie stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru (np. słowniki, spisy treści, ksiąŝki telefoniczne, itp.) RóŜnice w budowie algorytmów pozwalają podzielić metody sortowania na dwie klasy: sortowanie tablic zwane sortowaniem wewnętrznym. Sortowanie wewnętrzne dotyczy sytuacji, gdy cały sortowany zbiór elementów (tablica) znajduje się w pamięci operacyjnej komputera i moŝliwy jest natychmiastowy dostęp do kaŝdego elementu sortowanego zbioru. sortowanie plików zwane sortowaniem zewnętrznym. Sortowanie zewnętrzne dotyczy sytuacji, gdy jedynie fragment sortowanego zbioru elementów (pliku) znajduje się w pamięci operacyjnej komputera i nie jest moŝliwy natychmiastowy dostęp do kaŝdego elementu sortowanego zbioru 2 1

Pojęcie sortowania Jeśli dany jest zbiór obiektów: a 1, a 2, a 3,... a 1n (gdzie indeksy 1..n oznaczają połoŝenie elementu w zbiorze) to sortowanie polega na permutowaniu (przestawianiu elementów w zbiorze), aŝ do momentu osiągnięcia uporządkowania: a 1(k), a 2(k), a 3(k),... a 1n(k) (gdzie indeksy k oznacza liczbę wykonanych permutacji) takiego, Ŝe dla zadanej funkcji porządkującej f mamy: f (a 1(k) ), f (a 2(k) ), f (a 3(k) ),... f (a 1n(k) ) Wartość funkcji porządkującej nazywa się kluczem sortowania. Wartości funkcji porządkującej (klucza) zwykle nie oblicza się, ale przechowuje w postaci jawnej jako składową kaŝdego elementu sortowanego zbioru. Z tego powodu, najbardziej odpowiednią strukturą dla elementów zbioru jest struktura rekordu. 3 Klucz sortowania W omawianych algorytmach sortowania uŝywane będą obiekty następującego typu: type obiekt = record klucz : integer; { pola danych obiektu } end Pole rekordu klucz jest cechą pozwalającą na sortowanie obiektów, których właściwe dane znajdują się w pozostałych polach rekordu. Przykłady obiektów do sortowania: nazwiska osób sortowane według (klucza) wzrostu: nazwiska osób sortowane według (klucza) numer telefonu: type obiekt = record wzrost : integer; nazwisko : array[1..20] of char; end type obiekt = record telefon : integer; nazwisko : array[1..20] of char; end 4 2

Efektywność metod sortowania Ze względu na oszczędność miejsca, elementy sortuje się w tablicy, w której się aktualnie znajdują tj. in situ. Sortowanie składa się zasadniczo z dwóch rodzajów operacji: porównań elementów przesunięć elementów Liczby porównań i przesunięć koniecznych do posortowania zbioru są dobrą miarą efektywności metod sortowania. Liczbę porównań koniecznych do posortowania zbioru oznacza się symbolem Po, a liczbę koniecznych przesunięć Pr. Dla zbioru zawierającego n-elementów: dobre metody sortowania mają efektywność, tj liczbę Po i Pr rzędu n*log(n), proste metody sortowania mają efektywność, tj liczbę Po i Pr rzędu n 2. 5 Proste metody sortowania Proste metody sortowania, choć mało efektywne mają kilka zalet: są krótkie i łatwe do zrozumienia i dobrze ilustrują główne zasady sortowania, są dostatecznie szybkie dla małych zbiorów elementów. We wszystkich omawianych metodach sortowana będzie tablica A, składająca się z n-elementów typu obiekt, zdefiniowanego wcześniej: var A: array[1..n] of obiekt; Zakłada się, Ŝe tablica A i stała n są dostępne (i nie są deklarowane) w procedurach realizujących sortowanie we wszystkich dalszych przykładach. 6 3

Sortowanie przez wstawianie Metoda powszechnie stosowana przez grających w karty... W kaŝdym kroku (iteracji) metody, poczynając od elementu 2 do elementu n, porównuje się i-ty element z elementami poprzednimi i jeśli mają one większe klucze, przesuwa się je w prawo, robiąc miejsce na bieŝący element. W kaŝdej iteracji, przesuwanie elementów kończy się z chwilą znalezienia elementu z kluczem mniejszym niŝ klucz danego elementu. Jeśli takiego elementu nie ma, to przesuwanie naleŝy zakończyć po osiągnięciu lewego brzegu zbioru. Efektywność metody: Po, Pr ~ n 2 7 Sortowanie przez wstawianie przykład 1/3 Krok 1 Krok 2 8 4

Sortowanie przez wstawianie przykład 2/3 Krok 3 Krok 4 9 Sortowanie przez wstawianie przykład 3/3 Krok 5 10 5

Sortowanie przez wstawianie przykładowy program PROCEDURE sort_wstawianie; VAR i,j : integer; x : obiekt; FOR i:=2 TO n DO x:=a[i]; j:=i-1; WHILE (j>0) AND (x.klucz<a[j].klucz) DO A[j+1]:=A[j]; j:=j-1; A[j+1]:=x; END 11 Sortowanie przez wstawianie (z wartownikiem) Aby uniknąć wielokrotnego sprawdzania warunku (j>0) w pętli while (sprawdzanie osiągnięcia lewego brzegu zbioru) moŝna umieścić kopię elementu x w tablicy A na pozycji 0, czyli tzw. wartownika.... PROCEDURE sort_wstawianie; VAR i,j : integer; x : obiekt; FOR i:=2 TO n DO x:=a[i]; A[0]:=x; j:=i-1; WHILE x.klucz<a[j].klucz DO A[j+1]:=A[j]; j:=j-1; A[j+1]:=x; END 6

Sortowanie przez wybieranie W kaŝdym kroku (iteracji) metody wyszukuje się najmniejszy element i zamienia go się z elementem na pierwszej pozycji. Operację tę powtarza się następnie dla n-1 elementów i zamienia się element na drugiej pozycji. Iteracje takie powtarza się, aŝ zostanie tylko jeden element o największym kluczu. Wykonuje się więc n-1 iteracji. Metoda sortowania przez wybieranie jest w pewnym sensie odwrotna do metody sortowania przez wstawianie: w metodzie wstawiania w kaŝdym kroku rozwaŝa się tylko jeden, kolejny element ciągu źródłowego i wszystkie elementy tablicy wynikowej aby znaleźć miejsce wstawienia nowego elementu, w metodzie wybierania rozwaŝa się wszystkie elementy tablicy źródłowej, aby znaleźć element z najmniejszym kluczem i ustawić go jako kolejny element ciągu wynikowego. Efektywność metody: Po ~ n 2, Pr ~ n*log(n) 13 Sortowanie przez wybieranie przykład 1/3 Krok 1...... krok 1 14 7

Sortowanie przez wybieranie przykład 2/3 Krok 2 krok 3 15 Sortowanie przez wybieranie przykład 3/3 Krok 4 krok 5 16 8

Sortowanie przez wybieranie przykładowy program PROCEDURE sort_wybieranie; VAR i, j, k: integer; x: obiekt; FOR i:=1 TO n-1 DO k:=i; x:=a[i]; FOR j:=i+1 TO n DO IF A[j].klucz<x.klucz THEN k:=j; x:=a[j]; A[k]:=A[i]; A[i]:=x; END 17 Sortowanie przez wybieranie Efektywność metody: Po ~ n 2, Pr ~ n*log(n) Metoda sortowania przez wybieranie jest zwykle nieco lepsza niŝ sortowanie przez wstawianie, ze względu na mniejszą liczbę przesunięć Pr. Jest to szczególnie istotne, gdyŝ zwykle operacja przesunięcia jest bardziej czasochłonna od operacji porównania, która dotyczy tylko kluczy, a nie wszystkich pól sortowanych elementów. JednakŜe w przypadkach, gdy kluczą są juz posortowane lub prawie posortowane, metoda sortowania przez wstawianie okazuje się szybsza. 18 9

Sortowanie przez zamianę (sortowanie bąbelkowe) W kaŝdym kroku (iteracji) metody porównuje się klucze wszystkich sąsiadujących elementów i jeśli trzeba zamienia się elementy miejscami (gdy ich kolejność nie jest zgodna z kluczem). W ten sposób po n-1 przejściach przez zbiór dochodzi się do stanu uporządkowania. Popularna nazwa metody sortowanie bąbelkowe wynika z podobieństwa przemieszczania się elementów w górę tabeli, jak bąbelków powietrza w wodzie (jeśli tabela jest ustawiona tak jak w przykładach, tj. kolejne permutacje zbioru są kolumnami. Efektywność metody: Po, Pr ~ n 2 Sortowanie bąbelkowe jest najmniej efektywne ze wszystkich omawianych metod, lecz ma bardzo prostą implementację. Jej stosowanie ma sens tylko gdy sortowany zbiór jest bardzo mały. 19 Sortowanie przez zamianę przykład 1/2 krok 1 krok 2 20 10

Sortowanie przez zamianę przykład 2/2 krok 3 krok 4 krok 5 21 Sortowanie przez zamianę przykładowy program PROCEDURE sort_zamiana; VAR i, j: integer; x: obiekt; FOR i:=2 TO n DO FOR j:=n DOWNTO i DO IF A[j-1].klucz>A[j].klucz THEN x:=a[j-1]; A[j-1]:=A[j]; A[j]:=x; END 22 11