Sortowanie przez scalanie

Slides:



Advertisements
Podobne prezentacje
STRUKTURY DANYCH.
Advertisements

Algorytmy sortowania i porządkowania
Algorytmy sortowania i przeszukiwania
Schemat blokowy M START KONIEC
Grażyna Mirkowska PJWSTK 15 listopad 2000
Wykład 06 Metody Analizy Programów System Hoare
Programowanie I Rekurencja.
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
ALGORYTMY I STRUKTURY DANYCH
Iteracja, indukcja i rekurencja
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Elementarne struktury danych Piotr Prokopowicz
Materiały pochodzą z Platformy Edukacyjnej Portalu
Materiały pochodzą z Platformy Edukacyjnej Portalu
Współprogramy II W tym wykładzie pogłębimy naszą znajomość z współprogramami. Omówimy współpracę procedur rekurencyjnych i współprogramów, wprowadzimy.
ZŁOŻONOŚĆ OBLICZENIOWA
ALGORYTMY GEOMETRYCZNE.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Rekurencja Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Rekurencja Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Imperatywne modele obliczeń Copyright, 2003 © Jerzy R. Nawrocki Teoretyczne podstawy.
Programowanie imperatywne i granice obliczalności Copyright, 2004 © Jerzy R. Nawrocki
Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.
Programowanie imperatywne i język C
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Kurs Pascala – spis treści
Sortowanie przez scalanie Merge Sort
Rzędy wielkości funkcji
22 listopada 2000Regula konkatenacji II1 Dziedziczenie (cd.) Reguła konkatenacji II przykład - heapsort Reguła konkatenacji III.
Algorytmika w drugim arkuszu maturalnym. Standardy wymagań I. WIADOMOŚCI I ROZUMIENIE I. WIADOMOŚCI I ROZUMIENIE II.KORZYSTANIE Z INFORMACJI II.KORZYSTANIE.
Podprogramy.
Algorytmy i struktury danych
Algorytmy i Struktury Danych Sortowanie
Język PASCAL – podstawy Turbo Pascal: procedury, funkcje
Programowanie strukturalne i obiektowe
Andrzej Jędryczkowski Nie da się napisać większego programu bez podziału go na części zwane podprogramami. Podprogram to wyróżniona część programu.
Sortowanie przez kopcowanie
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
20 września 2003r. Centrum Kształcenia Ustawicznego im. St. Staszica w Koszalinie Wstęp do algorytmiki Autor: Marek Magiera.
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Przegląd podstawowych algorytmów
Wyrażenia w Turbo Pascalu.
Algorytmy i struktury danych
Procedury i funkcje.
Algorytmy i struktury danych
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Zbiory i rekordy mgr inż. Agata Pacek. Deklaracja typu zbiorowego (określa ilość elementów w zbiorze) type biegi=set of 0..6; Definiowanie zmiennej typu.
Tablice w Turbo Pascalu.
Programowanie baz danych
Wykład 10 typ zbiorowy rekurencja.
Ogólna struktura programu w TP
opracowała: Anna Mikuć
Języki formalne i gramatyki Copyright, 2005 © Jerzy R. Nawrocki Teoretyczne podstawy.
WYKŁAD 06 Programowanie dynamiczne Grażyna Mirkowska.
Rekurencje Rekurencja jest równaniem lub nierównością, opisującą funkcję w zależności od jej wartości dla danych wejściowych o mniejszych rozmiarach. Na.
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
METODY REPREZENTOWANIA IFORMACJI
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
ALGORYTMY I STRUKTURY DANYCH
Wykład 1 Informatyka II MPZI2 sem.letni. Tablice Tablice deklarujemy array [ lista typów indeksów ] of typ bazowy (składowych) np. var t1,t2:array [1..5,
Algorytmy. Co to jest algorytm? Przepis prowadzący do rozwiązania zadania.
Algorytmy, sposoby ich zapisu.1 Algorytm to uporządkowany opis postępowania przy rozwiązywaniu problemu z uwzględnieniem opisu danych oraz opisu kolejnych.
Rozdział 5 REKURENCJA.
Listy.
Współprogramy IV.
Algorytmy i Struktury Danych Wprowadzenie
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

Sortowanie przez scalanie (mergesort)

Sortowanie przez scalanie wstęp W informatyce sortowanie przez scalanie (ang. merge sort), to rekurencyjny algorytm sortowania danych. Algorytm ten jest dobrym przykładem algorytmów typu Dziel i zwyciężaj. Ideą działania tego typu algorytmów jest podział problemu na mniejsze części, których rozwiązanie jest już łatwiejsze.

Sortowanie przez scalanie zasada działania Algorytm mergesort dzieli się na trzy części: dzielenie tablicy na dwa wycinki, wywołanie rekurencyjne algorytmu sortującego na tych wycinkach, scalenie dwóch posortowanych wycinków. Dzielenie tablicy odbywa się dopóki wycinek zawiera więcej niż jeden element. W rezultacie otrzymamy n-wycinków jednoelementowych (gdzie n oznacza ilość elementów w tablicy) Zwróćmy uwagę, iż zbiór jednoelementowy jest z założenia posortowany.

Sortowanie przez scalanie opis słowny algorytmu (procedura mergesort) Podziel tablicę na dwa wycinki Jeżeli lewy wycinek zawiera więcej niż jeden element to wywołaj rekurencyjnie procedurę mergesort Jeżeli prawy wycinek zawiera więcej niż jeden element, to wywołaj rekurencyjnie procedurę mergesort Scal dwa posortowane wycinki

Sortowanie przez scalanie zasada działania Początek algorytmu 4 6 3 2 1 5 8 7 Po pierwszym wywołaniu 4 6 3 2 1 5 8 7 Po drugim wywołaniu 4 6 3 2 1 5 8 7 Po trzecim wywołaniu 4 6 3 2 1 5 8 7

Sortowanie przez scalanie tekst procedury mergesort procedure mergesort(poczatek,koniec: integer; var tab:tablica); var srodek: integer; {deklaracja zmiennej} begin srodek:=(poczatek + koniec) div 2; {wyznaczanie środkowego indeksu} if poczatek < srodek then mergesort(poczatek, srodek); {jeśli lewy wycinek zawiera więcej niż 2 elementy, sortuj lewy wycinek} if srodek+1 < koniec then mergesort(srodek+1, koniec); {jeśli prawy wycinek zawiera więcej niż 2 elementy, sortuj prawy wycinek} merge(poczatek, srodek, koniec; var tab:tablica); {scal dwa posortowane wycinki} end;

Sortowanie przez scalanie scalanie posortowanych tablic (procedura merge) W procedurze scalania dwóch posortowanych wycinków wykorzystamy dwa indeksy: poz1 oraz poz2. Indeks poz1 przebiega pierwszy wycinek, a indeks poz2 przebiega drugi wycinek. Wartości tych indeksów powinny być następujące: poz1:= początek; poz2:=środek+1;

Sortowanie przez scalanie opis słowny algorytmu scalania (merge) Dla każdego elementu dwóch wycinków wykonuj: jeżeli tab[poz1] < tab[poz2] to dodaj do tablicy pomocniczej element tab[poz1] oraz zwiększ indeks poz1 w przeciwnym wypadku dodaj do tablicy pomocniczej element tab[poz2] oraz zwiększ indeks poz2 Rozwiązanie nie uwzględnia sytuacji, gdy któryś z elementów jest pusty.

Sortowanie przez scalanie opis słowny algorytmu scalania (merge) Dla każdego elementu dwóch wycinków wykonuj: jeżeli pierwszy wycinek jest pusty to dodaj do tablicy pomocniczej element tab[poz2] zwiększ poz2 w przeciwnym wypadku jeżeli drugi wycinek jest pusty to dodaj do tablicy pomocniczej element tab[poz1] zwiększ poz1 jeżeli tab[poz1] < tab[poz2] to dodaj do tablicy pomocniczej element tab[poz1] zwiększ indeks poz1 dodaj do tablicy pomocniczej element tab[poz2] zwiększ indeks poz2 koniec

Sortowanie przez scalanie opis słowny algorytmu scalania (merge) Zdanie „wycinek pierwszy jest pusty” realizujemy przy pomocy warunku poz1>środek natomiast zdanie „wycinek drugi jest pusty” realizujemy przy pomocy warunku poz2>koniec

2 3 4 6 1 5 7 8 Sortowanie przez scalanie scalanie elementów poz1 poz2 Początek:=1 Środek:=4 Koniec:=8 2 3 4 6 1 5 7 8 tablica pomocnicza

Sortowanie przez scalanie tekst procedury merge (deklaracje zmiennych i przypisanie zmiennym początkowych wartości) procedure merge(poczatek, srodek, koniec: integer; var tab:tablica); var poz1, poz2, pozx, i : integer; tabx: tablica; begin poz1:=poczatek; poz2:=srodek+1; pozx:=poczatek;

Sortowanie przez scalanie tekst procedury merge (dla każdego elementu z dwóch wycinków wykonuj: jeśli pierwszy wycinek jest pusty przepisz element z wycinka drugiego i zwiększ indeks poz2 o jeden) for i:=poczatek to koniec do begin if poz1 > srodek then tabx[pozx]:=tab[poz2]; poz2:=poz2+1; pozx:=pozx+1; end else

Sortowanie przez scalanie tekst procedury merge (jeśli drugi wycinek jest pusty przepisz element z wycinka pierwszego i zwiększ indeks poz1 o jeden) if poz2 > koniec then begin tabx[pozx]:=tab[poz1]; poz1:=poz1+1; pozx:=pozx+1; end

Sortowanie przez scalanie tekst procedury merge (porównaj wartości elementów tablicy i przepisz mniejszy do tablicy tymczasowej, zwiększ indeks o jeden) else if tab[poz1] < tab[poz2] then begin tabx[pozx]:=tab[poz1]; poz1:=poz1+1; pozx:=pozx+1; end else tabx[pozx]:=tab[poz2]; poz2:=poz2+1; end;

Sortowanie przez scalanie tekst procedury merge (przepisywanie elementów z tablicy pomocniczej do wejściowej) for i:=poczatek to koniec do tab[i]:=tabx[i]; end;

Sortowanie przez scalanie złożoność czasowa algorytmu (nieformalna) Bez straty ogólności załóżmy, że długość ciągu, który mamy posortować jest potęgą 2 (2n). Podczas wykonywania rekurencji otrzymujemy drzewo o głębokości log2n, na każdym poziomie dokonujemy scalenia o łącznym koszcie nc, gdzie c jest stałą zależną od komputera. A więc nieformalnie możemy dowieść, że złożoność algorytmu mergesort to n log2n

Sortowanie przez scalanie przykładowe wyniki działania programu

Sortowanie przez scalanie Literatura A. Strusińska-Walczak, K. Walczak „Programowanie w języku Turbo Pascal 7.0”, Wydawnictwo W&W, 1998 http://www.wikipedia.pl