Równoleg le sortowanie przez scalanie

Podobne dokumenty
Strategia "dziel i zwyciężaj"

Sortowanie. LABORKA Piotr Ciskowski

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

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

Niesimpleksowe metody rozwia zywania zadań PL. Seminarium Szkoleniowe Edyta Mrówka

Geometria odwzorowań inżynierskich perspektywa wnȩtrza 06C

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Analiza algorytmów zadania podstawowe

Programowanie w VB Proste algorytmy sortowania

Przyk ladowe Kolokwium z Algorytmów i Struktur Danych (Zad. obu kolokwiach)

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Laboratorium nr 7 Sortowanie

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Metoda Simplex bez użycia tabel simplex 29 kwietnia 2010

Wstęp do programowania

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Niech X bȩdzie dowolnym zbiorem. Dobry porz adek to relacja P X X (bȩdziemy pisać x y zamiast x, y P ) o w lasnościach:

Sortowanie przez scalanie

Sortowanie zewnętrzne

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Rozdzia l 2. Najważniejsze typy algebr stosowane w logice

Wstęp do programowania

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

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

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Algorytmy i Struktury Danych

Jeszcze o algorytmach

Struktury Danych i Złożoność Obliczeniowa

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

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Algorytmy i Struktury Danych.

Rekurencja. Przykład. Rozważmy ciąg

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania 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 )

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

MATEMATYKA DYSKRETNA - wyk lad 1 dr inż Krzysztof Bryś. Wprowadzenie

Algorytm selekcji Hoare a. Łukasz Miemus

Paradygmaty programowania. Paradygmaty programowania

Algorytmy i struktury danych

Sortowanie. Bartman Jacek Algorytmy i struktury

Wyk lad 7 Metoda eliminacji Gaussa. Wzory Cramera

Wstęp do programowania

Struktury danych: stos, kolejka, lista, drzewo

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

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

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Wyk lad 7: Drzewa decyzyjne dla dużych zbiorów danych

ALGORYTMY I STRUKTURY DANYCH

POCHODNA KIERUNKOWA. DEFINICJA Jeśli istnieje granica lim. to granica ta nazywa siȩ pochodn a kierunkow a funkcji f(m) w kierunku osi l i oznaczamy

Po wprowadzeniu zmiennych uzupe lniaj acych otrzymamy równoważny mu problem w postaci kanonicznej:

Geometria odwzorowań inżynierskich rzut środkowy 06A

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

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

Teoretyczne podstawy informatyki

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

Geometria odwzorowań inżynierskich Zadania 01

Geometria odwzorowań inżynierskich. 1. Perspektywa odbić w zwierciad lach p laskich 06F

Drzewa podstawowe poj

Rozdzia l 3. Relacje binarne

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Rozdzia l 8. Pojȩcie liczby porz adkowej

5040 =

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy i Struktury Danych, 2. ćwiczenia

ALGORYTMY I STRUKTURY DANYCH

Rozdzia l 10. Najważniejsze normalne logiki modalne

Sterowalność liniowych uk ladów sterowania

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

Następnie zdefiniujemy utworzony szkic jako blok, wybieramy zatem jak poniżej

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

Podstawowe struktury danych

Algorytmy sortujące i wyszukujące

Struktury Danych i Złożoność Obliczeniowa

Efektywna metoda sortowania sortowanie przez scalanie

176 Wstȩp do statystyki matematycznej = 0, 346. uczelni zdaje wszystkie egzaminy w pierwszym terminie.

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

0.1 Sposȯb rozk ladu liczb na czynniki pierwsze

Python: JPEG. Zadanie. 1. Wczytanie obrazka

System liczbowy binarny.

Programowanie obiektowe

Listy, kolejki, stosy

Geometria odwzorowań inżynierskich perspektywa boczna wnȩtrza 06E

Programowanie generyczne w C++

Liczba 2, to jest jedyna najmniejsza liczba parzysta i pierwsza. Oś liczbowa. Liczba 1, to nie jest liczba pierwsza

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

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

Definicja pliku kratowego

Laboratoria nr 1. Sortowanie

Teoria miary WPPT IIr. semestr zimowy 2009 Wyk lady 6 i 7. Mierzalność w sensie Carathéodory ego Miara Lebesgue a na prostej

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Matematyka dyskretna Arytmetyka

Laboratoria nr 1. Sortowanie

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

Transkrypt:

Równoleg le sortowanie przez scalanie Bartosz Zieliński 1 Zadanie Napisanie programu sortuj acego przez scalanie tablicȩ wygenerowanych losowo liczb typu double w którym każda z procedur scalania odbywa siȩ w innym procesie. Tablica do posortowania, jak również pomocnicza tablica (liczb uint), umieszczone s a w dzielonym segmencie pamiȩci. Procesy synchronizuj a swoje dzia lanie przy pomocy semaforów i komunikatów ipc. Podtablice o rozmiarze mniejszym od ustalonego powinny być sortowane przez wybór (najmniejszego elementu) w pojedyńczym procesie, zamiast bycia dalej dzielonymi i scalanymi. Dziȩki dodatkowej tablicy można uczynić z wyjściowej tablicy listȩ jednokierunkow a. Program powinien 1. Wylosować a nastȩpnie wypisać wylosowan a tablicȩ liczb double. 2. Dokonać niezbȩdnych inicjalizacji. 3. Rozwidlić siȩ na tyle procesów ile jest potrzebnych scaleń i sortowań przez wybór. 4. Posortować tablicȩ w możliwie najbardziej równoleg ly sposób. 5. Wypisać na ekranie posortowan a tablicȩ. 6. Pozostawić po sobie porz adek, tzn. żadnych zombi ani nieużywanych obiektów ipc po zakończeniu programu. Program wzorcowy mia l ok. 300 linii. Szczegó ly i wskazówki poniżej. 2 Tablice jako listy jednokierunkowe Zalet a list jest możliwość wstawiania lub usuwania elementów z wnȩtrza listy lokalnie. Gdy chcemy wstawić albo usun ać elementy z wnȩtrza tablicy, tak aby zachować kolejność pozosta lych elementów musimy przesun ać wszystkie pozosta le elementy stoj ace po prawej stronie usuwanego/wstawianego elementu. Jeśli jednak zależy nam na tym 1

aby elementy listy przechowywane by ly w pamiȩci dzielonej nie możemy przydzielać im pamiȩci przy pomocy funkcji malloc() zwracaj acej wskaźnik na pocz atek bloku pamiȩci znajduj acej siȩ w niedzielonej stercie. Rozwi azaniem jest przechowywanie wartości które chcemy u lożyć w listȩ w tablicy T elementów typu double w segmencie dzielonym, oraz zastosowanie pomocniczej tablicy (również w segmencie dzielonym) NEXT elementów uint. Aby otrzymać listȩ należy teraz zapisać w tablicy NEXT indeksy elementów w tablicy T, tak by T[NEXT[i]] by l elementem nastȩpuj acym bezpośrednio w otrzymanej liście po elemencie T[i]. Na przyk lad tablice T i NEXT podane w poniższej tabelce: reprezentuj a listȩ i 0 1 2 3 4 5 6 7 T[i] # 15.1 2.0 12.0 100.1 16.7 5.1 8.2 NEXT[i] 4 5 1 0 7 3 2 6 100.1 8.2 5.1 2.0 15.1 16.7 12.0 NULL Wartość T[0] jest niewykorzystywana, a NEXT[0] przechowuje indeks g lowy listy. Dziȩki temu, ponieważ pod indeksem 0 nie jest przechowywana żadna wartość (st ad #), można użyć 0 jako NULL, tzn. NEXT[i]==0 oznacza że T[i] jest ostatnim elementem listy. Aby usun ać z listy element nastȩpuj acy po T[i] wystarczy wykonać NEXT[i]=NEXT[NEXT[i]]; Nastȩpuj acy kod wstawia element T[j] za elementem T[i]: NEXT[j]=NEXT[i]; NEXT[i]=j; 3 Sortowanie list przez scalanie Dana jest lista L do posortowania i rozmiar listy poniżej którego powinno siȩ stosować inny algorytm: 1. Podziel listȩ na dwie po lowy. Otrzymujemy dwie listy L1,L2. 2. Jeśli rozmiar L1 jest mniejszy od podanego to sortuj inn a metod a (tutaj: przez wybór). W przeciwnym wypadku sortuj L1 przez scalanie. 3. Jeśli rozmiar L2 jest mniejszy od podanego to sortuj inn a metod a (tutaj: przez wybór). W przeciwnym wypadku sortuj L2 przez scalanie. 4. Scal L1 i L2. Scalanie L1 i L2 do listy L: 2

1. Pocz atkowo L jest pusta. 2. Powtarzaj 3-6 dopóki L1 lub L2 jest niepusty. 3. Jeśli L1 pusty to k = 2,w przeciwnym przypadku jeśli L2 pusty lub g lowa(l1) g lowa(l2) to k = 1, a jeśli g lowa(l2) < g lowa(l1) to k = 2. 4. x = wartość w g lowie(lk) 5. Usuń pierwszy element z Lk. 6. Wstaw x na końcu L. Innymi s lowy sortowanie przez scalanie można zilustrować na przyk ladzie sortowania talii kart wed lug wartości: 1. Podziel taliȩ na dwa stosy. 2. Posortuj każdy ze stosów. 3. Po l acz oba stosy, wybieraj ac za każdym razem mniejsz a z kart leż acych na szczytach obu stosów. 4 Sortowanie list przez wybór Dana jest lista L do posortowania, listȩ wynikow a oznaczmy L. 1. List L jest pusta. 2. Znajdź najmniejszy element x w liście L. 3. Usuń x z L. 4. Wstaw x na koniec L. 5. Powtarzaj 2-4 dopóki lista L jest niepusta. 5 Pe lne drzewa binarne Dowolna sekwencja liczb od 1 do n ma naturaln a strukturȩ pe lnego drzewa binarnego. Pe lne drzewo binarne to drzewo binarne w którym wszystkie poziomy (za wyj atkiem być może ostatniego) s a wype lnione. Ostatnia warstwa w drzewie nie musi być pe lna, ale nie może mieć dziur: innymi s lowy jeśli w ostatniej warstwie pojawia siȩ NULL to musi być NULL do końca. Rys. 1 i 2 powinny wyjaśnić niejasności. 3

2 1 3 4 5 6 7 8 9 10 11 12 Rys.1 Przyk lad pe lnego drzewa binarnego 2 1 3 4 5 6 7 8 9 10 11 12 13 Rys.2 To nie jest pe lne drzewo binarne. Oczywiście ponumerować można wȩz ly każdego drzewa. Rzecz w tym że w przypadku pe lnego drzewa binarnego, dla wȩz la nr i numery wȩz lów jego rodzica i prawego i lewego dziecka (jeśli istniej a) można otrzymać przy pomocy bardzo prostych wzorów: PARENT(i) = i/2, LEFT(i) = 2i, RIGHT(i) = 2i + 1. (1) Wzory te okaż a sie potrzebne w tym zadaniu ponieważ nasz program bȩdzie rozwidla l siȩ rekurencyjnie tworz ac pe lne drzewo binarne (każdy wȩze l to proces) a do każdego procesu poza korzeniem przypisany bȩdzie semafor. Podobnie do każdego procesu poza procesami z najniższego rzȩdu przypisany bȩdzie typ komunikatu. Zarówno typ komunikatu jak i nr semafora w tablicy to kolejne liczby i bȩdziemy stosować wzory (1) do przypisania semafora i rodzaju komunikatu do procesu. 6 Rozwidlanie i synchronizacja Pocz atkowo kolejność elementów w liście do posortowania pokrywa siȩ z kolejności a elementów w tablicy T, tzn. NEXT[i]=i+1. Jeśli rozmiar tablicy do posortowania wynosi N to proces g lówny rozdziela pocz atkow a listȩ elementów na po lowȩ, wykonuj ac instrukcjȩ NEXT[N/2]=0; 4

Mamy teraz dwie listy w podtablicach T[1..N/2] i T[N/2+1..N]. Program g lówny rozwidla siȩ dwukrotnie, a jego dzieci sortuj a podtablice odpowiednio T[1..N/2] i T[N/2+1..N]. Dzieci rozwidlaj a siȩ dalej rekurencyjnie. Rozwidlanie kończy to pokolenie które otrzymuje do posortowania tablicȩ o wymiarze mniejszym od ustalonego wymiaru MIN SIZE. Proces który otrzyma do postortowania podtablicȩ o wymiarze mniejszym od MIN SIZE wykonuje sortowanie przez wstawianie bez dalszego rozwidlania siȩ. Proces który rozwidli l siȩ scala listy posortowane przez jego dzieci. W tym celu dzieci przesy laj a przy pomocy kolejki komunikatów indeksy elementów które stan a siȩ g lowami posortowanych podlist. Pocz atkowo g low a podlisty by l pierwszy element podtablicy, ale o ile nie by l on elementem najmniejszym, po posortowaniu bȩdzie to jakiś inny element. Należy zwrócić uwagȩ na fakt że oba algorytmy: sortowania przez scalanie i przez wybór, buduj a posortowan a listȩ w taki spoób że kolejny element do l aczany jest do wynikowej listy zawsze na końcu i nie zmienia potem swojej pozycji. Z kolei algorytm scalania potrzebuje w każdym kroku tylko pocz atkowych elementów scalanych podlist. St ad jeśli procesy sortuj ace bȩd a sygnalizow ly swoim rodzicom umieszczenie na w laściwym miejscu kolejnego elementu sortowanej podlisty, proces rodzic bȩdzie móg l wykonać scalenie kolejnego elementu bez czekania na zakończenie procesu dzieci. Przypomina to problem producenta i konsumenta. Szczegó ly powinny zostać wyjaśnione przez przyk lad na Rys. 3 i 4. P 2 S T [1..25] T [26..50] P 1 S T [1..50] T [51..100] P 3 S T [51..75] T [76..100] P 4 S T [1..12] T [13..25] P 5 S T [26..37] T [38..50] P 6 S T [51..62] T [63..75] P 7 S T [76..87] T [88..100] P 8 W (T [1..12]) P 9 W (T [13..25]) P 10 W (T [26..37]) P 11 W (T [38..50]) P 12 W (T [51..62]) P 13 W (T [63..75]) P 14 W (T [76..87]) P 15 W (T [88..100]) Rys.3 Przyk lad rozwidlenia na procesy sortuj ace gdy ilość elementów do posortowania wynosi N = 100 a rozmiar MIN SIZE poniżej którego stosuje siȩ sortowanie przez wybór to 20. S oznacza scalanie podanych podtablic, W sortowanie podtablicy przez wybór. 5

Semafory Typy komuniktów Z każdym procesem poza P 1 zwi azane Z procesami P 1,..., P 7, tzn. z s a semafory S 0,..., S 13, i.e z procesem każdym procesem wykonuj acym sortowanie P i zwi azany jest semafor S i 2. Proces przez scalanie, zwi azany jest P i sygnalizuje semafor S i 2 gdy typ komunikatu. Typem komunikatu umieści na w laściwym miejscu element zwi azanego z procesem P i jest i. sortowanej przez siebie podlisty. Z kolei Używana jest pojedyńcza kolejka komunikatów proces P i jeśli wykonuje sortowanie ipc. Proces P i wysy la do przez scalanie czeka pod semaforami S LEFT(i) 2 lub S RIGHT(i) 2 przed scaleniem kolejki komunikat typu PARENT(i) z informacj a o indeksie g lowy sortowanej kolejnych elementów z list sortowanych przez niego podtablicy, i.e. o indeksie przez procesy P LEFT(i) i P RIGHT(i). najmniejszego elementu w podtabl- icy. Proces PARENT(i) odbiera komunikaty od swoich dzieci, dziȩki czemu może rozpocz ać scalanie. Rys.4 Semafory i kolejki komunikatów w przyk ladzie z Rys. 3. 6