Programowanie równoległe



Podobne dokumenty
Programowanie równoległe

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Obliczenia równoległe

Analiza efektywności przetwarzania współbieżnego

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

Analiza efektywności przetwarzania współbieżnego. Wykład: Przetwarzanie Równoległe Politechnika Poznańska Rafał Walkowiak Grudzień 2015

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Analiza algorytmów zadania podstawowe

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Podstawy Informatyki. Sprawność algorytmów

Programowanie w VB Proste algorytmy sortowania

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

Wstęp do programowania

Programowanie dynamiczne

TEORETYCZNE PODSTAWY INFORMATYKI

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

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Programowanie współbieżne Wstęp do obliczeń równoległych. Rafał Skinderowicz

Algorytmy i Struktury Danych, 2. ćwiczenia

1. Analiza algorytmów przypomnienie

Matematyczne Podstawy Informatyki

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy i Struktury Danych, 2. ćwiczenia

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

Analiza algorytmów zadania podstawowe

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

Analityczne modelowanie systemów równoległych

Wprowadzenie do złożoności obliczeniowej

Sortowanie przez scalanie

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Zaawansowane algorytmy i struktury danych

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Wstęp do programowania

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

Algorytmy dla maszyny PRAM

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

INFORMATYKA SORTOWANIE DANYCH.

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Wykład 6. Wyszukiwanie wzorca w tekście

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Algorytmy i Struktury Danych.

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

Zasady analizy algorytmów

METODA SYMPLEKS. Maciej Patan. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Analiza ilościowa w przetwarzaniu równoległym

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

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

Programowanie i projektowanie obiektowe

Teoretyczne podstawy informatyki

Strategia "dziel i zwyciężaj"

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

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

Algorytmy i struktury danych

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

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.

Algorytmy sortujące 1

Wstęp do programowania

Luty 2001 Algorytmy (4) 2000/2001

TEORETYCZNE PODSTAWY INFORMATYKI

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

Algorytmy i struktury danych

Informatyka A. Algorytmy

Zaawansowane algorytmy i struktury danych

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

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

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

Lista 4. Kamil Matuszewski 10 maja 2016

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 )

Informatyka 1. Złożoność obliczeniowa

Jarosław Wróblewski Matematyka Elementarna, zima 2013/14

Wstęp do Programowania potok funkcyjny

Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott

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

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Algorytmy i Struktury Danych

Rekurencja. Przygotowała: Agnieszka Reiter

Programowanie dynamiczne (optymalizacja dynamiczna).

Techniki konstruowania algorytmów. Metoda dziel i zwyciężaj

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

Podstawy Informatyki. Inżynieria Ciepła, I rok. Iteracja warunkowadopóki(while) Blok instrukcji. Pascal: begin instrukcja1; C: { end;

Macierzowe algorytmy równoległe

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Algorytmy i struktury danych.

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova

Algorytmy Równoległe i Rozproszone Część IV - Model PRAM

Programowanie dynamiczne cz. 2

Programowanie dynamiczne

Algorytmy Równoległe i Rozproszone Część IV - Model PRAM

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

Sortowanie w czasie liniowym

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

Projektowanie i analiza algorytmów

Algorytm. a programowanie -

Grzegorz Mazur. Zak lad Metod Obliczeniowych Chemii UJ. 14 marca 2007

Równoległość i współbieżność

Transkrypt:

Programowanie równoległe ELEMENTARNE ALGORYTMY (NA PODSTAWIE KSIAŻKI CZECHA) Andrzej Baran baran@kft.umcs.lublin.pl

CHARAKTERYSTYKA ILOŚCIOWA ALGORYTMÓW Przez algorytm równoległy (AR) rozumiemy pewną liczbą odrębnych algorytmów obliczeniowych, które mogą być wykonane jednocześnie. Oceniając algorytm równoległy należy uwzględnić oprócz rozmiaru danych n dodatkowy parametr jakim jest liczba procesorów p. Przy ocenie algorytmu bierze się pod uwagę takie jego cechy jak złożoność czasowa i pamięciowa przyspieszenie koszt algorytmu efektywność wykorzystania procesorów złożoność komunikacyjna przenośność 2/29

CHARAKTERYSTYKA ILOŚCIOWA ZŁOŻONOŚĆ CZASOWA Zakładamy, że algorytm równoległy (AR) rozwiązuje problem Z o rozmiarze n i korzysta z p procesorów. Złożoność czasowa (pesymistyczna) algorytmu jest T(p,n)= sup d D n {t(p,d)} gdzie t(p,d) = liczba kroków obliczeniowych wykonanych dla zestawu danych d p = liczba procesorów D n = zbiór zestawów danych wejściowych o rozmiarz n 3/29

CHARAKTERYSTYKA ILOŚCIOWA PRZYSPIESZENIE AR S(p,n)= T (1,n) T(p, n) Tutaj T (1,n) jest złożonością czasową najlepszego algorytmu sekwencyjnego. Ogólnie T (1,n) T(1,n). Równość zachodzi tylko w przypadku gdy AR jest kopią algorytmu sekwencyjnego i nie ma komunikacji między procesorami. Maksymalne przyspieszenie jest równe p, bo S(p,n) p. Na ogół T(1,n)>T (1,n). S() jest miarą korzyści, którą osiąga się dzięki obliczeniom równoległym. 4/29

Złożoność T(1,n) wyraża się przez złożoność części sekwencyjnej algorytmu T s (1,n) i równoległej T r (1,n). Przy tym T(1,n)=T s (1,n)+T r (1,n) Konieczność obliczeń sekwencyjnych przy realizacji AR wynika z zależności danych. Przykład: x=a+b; y=c x; sekwencyjne x=a+b; y=c d; równoległe Przy założeniu, że T (1,n) da się równomiernie rozdzielić między p procesorów (zazwyczaj niemożliwe), dostaniemy S(p,n)= T (1,n) T(p,n) T s (1,n)+T r (1,n) T s (1,n)+T r (1,n)/p+T o (p,n) gdzie T o (p,n) oznacza dodatkową złożoność wynikłą z organizacji obliczeń równoległych (komunikacja) oraz opóźnień. T o (p,n) zazwyczaj rośnie wraz ze wzrostem p, ale T r (1,n)/p maleje i zachowanie S(p,n) jest takie, że S najpierw rośnie z p a potem maleje (przy stałym rozmiarze problemu n). 5/29

CHARAKTERYSTYKA ILOŚCIOWA KOSZT AR Koszt AR C(p,n)=pT(p,n) Koszt jest liczbą kroków jaką wykonują wszystkie procesory, realizując AR. Koszt organizacji obliczeń jest równy różnicy kosztu obliczeń i złożoności najlepszego AS (sekwencyjnego) C o (p,n)=pt(p,n) T (1,n) (= operacje nadmiarowe, puste, bezczynność procesorów, koszt odwołań do pamięci wspólnej) 6/29

CHARAKTERYSTYKA ILOŚCIOWA EFEKTYWNOŚĆ WYKORZYSTANIA PROCESORÓW E(p,n)= S(p,n) p = T (1,n) pt(p, n) Maksymalna wartość efektywności wynosi 1 (procesory pracują 100% czasu działania i koszty komunikacyjne są zerowe) Algorytm jest optymalny pod względem kosztu jeśli spełniona jest równość pt(p,n)=θ(t (1,n)) Efektywność AR optymalnego względem kosztu jest równa E(p,n)=Θ(1) 7/29

CHARAKTERYSTYKA ILOŚCIOWA SKALOWALNOŚĆ Skalowalność oznacza zwiększenie przyspieszeń równoległych lub utrzymanie stałej efektywności wraz ze wzrostem liczby procesorów. Rozpatrzmy AR, który jest jakąś wersją AS. Mamy Ponieważ w tym wypadku E(p,n)= T(1,n) pt(p, n) C o (p,n)=pt(p,n) T (1,n)=pT(p,n) T(1,n) to Dla efektywności dostaniemy pt(p,n)=c o (p,n)+t(1,n) E(p,n)= T(1, n) T(1,n)+C o (p,n) = 1 1+ Co (p,n) T(1,n) Ponieważ C o rośnie z p i dla ustalonego rozmiaru n problemu złożoność T(1,n)=const, to widzimy stąd, że efektywność maleje wraz ze wzrostem liczby procesorów. 8/29

Z drugiej strony przy ustalonym p zwiększenie rozmiaru problemu n powoduje wzrost efektywności gdyż T(1,n) rośnie z reguły szybciej niż C o (p,n). Z wzoru widać, że dla utrzymania efektywności (zapewnienie skalowalności) systemu równoległego na stałym poziomie przy rosnącej liczbie procesorów należy zapewnić spełnienie związku C o (p,n) T(1,n) = Θ(1) Ze wzrostem C o powinien rosnąć koszt. Można to zapewnić zwiększając rozmiar problemu - należy rozwiązywać problemy większe! (Przykład) Skalowalność System równoległy jest skalowalny jeśli jego efektywność utrzymuje się na stałym poziomie poprzez jednoczesne zwiększanie liczby procesorów oraz zwiększanie rozmiaru problemu. 9/29

PRAWO AMDAHLA (1967) Rozważmy algorytm sekwencyjny o złożoności T(1,n). Niech r oznacza część obliczeń równoległych, a s sekwencyjnych. Mamy wówczas T s (1,n)=sT(1,n), T r (1,n)=rT(1,n),s+r=1. Przyspieszenie po urównolegleniu S(p, n) = T s (1,n)+T r (1,n) T s (1,n)+T r (1,n)/p+T o (p,n) st(1,n)+rt(1,n) st(1,n)+rt(1,n)/p 1 s+r/p = 1 s+(1 s)/p (1) (2) (3) Wzór ten nosi nazwę prawa Amdahla i daje ograniczenie przyspieszenia będącego funkcją s oraz p. Np. dla p=1000, s=0.01 (1%), S 90; dla p, s=0.01, S=100. 10/29

MINIMALNY ELEMENT TABLICY // Plik: elminimalny.alg // Dane: Tablica n elementowa, n procesorów, pamięć wspólna // Zadanie: Znaleźć najmniejszy element m tablicy. Obliczyć złożoność, // przyspieszenie, koszt oraz efektywność algorytmu ===================================================================== 1 begin 2 parfor P_i, 1 <= i <= n do 3 b[i] = a[i] // kopiowanie tablicy a do pomocniczej tablicy b 4 k = n 5 end parfor 6 for (j=1; j<=log(n); j++) 7 parfor P_i, 1<=i<=k/2 do 8 if b[i] > b[i+k/2] then 9 b[i] = b[i+k/2] 10 end if 11 end parfor 12 k=k/2; 13 end for 14 if i==1 then m=b[1] end if 15 end 11/29

MINIMMALNY ELEMENT TABLICY Złożoność: T(p,n)=T(n)=1+logn=O(logn) Przyspieszenie: Koszt: Efektywność: S(n)= n 1 1+logn = O( n logn ) C(n)=n(1+logn)=O(nlogn) E(n)= n 1 n(1+logn) = O( 1 logn ) 12/29

SUMA ELEMENTÓW TABLICY; N PROCESORÓW // Plik: suma.alg // Dane: Tablica liczb a[n]; n dowolne // Zadanie: Znaleźć sumę s elementów tablicy a ------------------------------------------------------------------- 1 begin 2 parfor P_i, 1 <= i <= n do 3 b[i] = a[i]; // kopiowanie tablicy a do pomocniczej tablicy b 4 k = n; 5 end parfor 6 for (j=1; j<= ceil( log n ); j++) 7 parfor P_i, 1<=i<= floor(k/2) do 8 b[i] = b[i] + b[k+1-i]; // pierwszy+ostatni; drugi+przedostatni; 9 end parfor 10 k=ceil(k/2); 11 end for 12 if i==1 then s=b[1] end if // wynik s 13 end Złożoność, przyspieszenie, koszt i efektywność są podobne do tych w algorytmie wyszukiwania elementu najmniejszego. 13/29

SUMA ELEMENTÓW TABLICY; p PROCESORÓW // Plik: suma-p.alg // Dane: Tablica liczb a[n]; n dowolne // Zadanie: Znaleźć sumę elementów tablicy a używając p procesorów ------------------------------------------------------------------- 1 begin 2 parfor P_i, 1 <= i <= p do 3 g = ceil(n/p) (i - 1) + 1 4 b[i] = a[g]; 5 for (j=1; j<= ceil( n/p ) - 1; j++) // sumowanie w segmantach 6 if (g + j) <= n then // ostatni segment może być niepełny 7 b[i] = b[i] + a[g + j]; 8 end if; 9 end for; 10 end parfor 11 // Sumowanie b[1} + b[2] +... b[p] w czasie O(log p) 12 // za pomocą algorytmu poprzedniego 13 end 14/29

SUMA ELEMENTÓW TABLICY; p PROCESORÓW Złożoność: T(p,n)=c 1 n/p +c 2 logn c 1 n/p+c 2 logp=o(n/p+logp) Przyspieszenie: Koszt: Efektywność: c 1 n S(p,n) c 1 n/p+c 2 logn = O( n n/p+logp ) C(p,n) p(c 1 n/p+c 2 logp)=o(n+plogp) c 1 n E(p,n) c 1 n+c 2 plogp = O( n n+plogp ) 15/29

Biorąc w powyższym zadaniu p=n/logn procesorów dostaniemy: Złożoność: T(p,n) n/p+logp<2logn=o(logp) Przyspieszenie: Koszt: Efektywność: S(p,n) n n/p+logn n 2logn = O( n logn ) C(p,n)=n+plogp=2n nloglogn logn < 2n=O(n) n E(p,n) n+plogp = O( n 2n nloglogn/logn )=Θ(1) 16/29

SUMA ELEMENTÓW TABLICY a[n]; N PROCESORÓW Algorytm poszukiwania minimum i alg. sumowania (ostatni) mają złożoność O(logn), ale ten ostatni używa mniej, bo tylko n/logn procesorów. Do wyznaczenia sumy w czasie O(logn) potrzeba co najmniej n/logn procesorów. Koszt nie może bowiem przekroczyć złożoności najlepszego algorytmu sekwencyjnego. A więc, C(p,n)=plogn T (1,n) n, a stąd p n/logn. Algorytm jest też optymalny względem kosztu bo dla n 4, r=1 oraz s=2 mamy r(n 1)<C(p,n) p=n/logn s(n 1) czyli C(p,n)=Θ(T (1,n)). Złożoność T(p,n) określają dwie składowe: n/p, która maleje z p oraz logp, któryrośnie z p. Istnieje wobec tego pewna liczba procesorów p opt dla której złożoność czasowa osiąga minimum: d dp (c 1n/p+c 2 logp)=0 prowadzi do p opt = c 1 nln2/c 2. 17/29

REDUKCJA Problemy wyznaczania najmniejszego elementu lub sumy są szczególnymi przypadkami problemu redukcji: Dany jest zbiór x 1,x 2,...,x n. Należy obliczyć x 1 opx 2 opx 3... opx n gdzie op oznacza operację dwuargumentową łączna i przemienną (np. +, max. min,, itd). 18/29

Złożoność 200 150 n/p+log(n) n/p log(n) T(p,n) 100 50 0 5 10 15 20 25 30 35 40 45 50 Liczba procesorow p 19/29

Przyspieszenie 14 12 n=200 n=500 n=1000 10 S(p,n) 8 6 4 2 0 5 10 15 20 25 30 35 40 45 50 Liczba procesorow p 20/29

Efektywność 1 0.8 n=200 n=500 n=1000 T(p,n) 0.6 0.4 0.2 0 5 10 15 20 25 30 35 40 45 50 Liczba procesorow p 21/29

ALGORYTM WYZNACZANIA SUM PREFIKSOWYCH Dla danego zbioru{x 1,...,x n } wyznaczyć wielkości: s 1 = x 1 s 2 = x 1 + x 2 s 3 = x 1 + x 2 + x 3... s n = x 1 + +x n. // Plik: prefixsum.alg // Algorytm sekwencyjny (złożoność: T = O(n)) s[1]=x[1]; for (i=2; i<=n; i++) s[i]=s[i-1]+x[i]; --------------------------------------------------------- // Algorytm rownolegly: 1 begin 2 parfor P_i, 1 <= i <= n do\\ 3 s[i]=x[i];\\ 4 end parfor; 5 for (j=0; j <= ceil(log n) - 1 do 6 parfor P_i, 2^j <= i <= n do 7 s[i] = s[i-2^j] + s[i]; 8 end parfor; 9 end for; 10 end 22/29

ILUSTRACJA DZIAŁANIA ALGORYTMU SUM PREFIKSOWYCH // Plik: prefixtab.alg ilustracja działania algorytmu sum prefiksowych ------------------------------------------------------------------ pocz. j = 0 j = 1 j = 2 ------------------------------------------------------------------ s[1] 3 s[2] 2 (3) + 2 s[3] 1 (2) + 1 (3) + 2 + 1 s[4] 5 (1) + 5 (3 + 2) + 1 + 5 s[5] 4 (5) + 4 (2 + 1) + 5 + 4 (3) + 2 + 1 + 5 + 4 s[6] 7 (4) + 7 (1 + 5) + 4 + 7 (3 + 2) + 1 + 5 + 4 + 7 ------------------------------------------------------------------ (Rekursywne podwajanie) 23/29

WYZNACZANIE EL. MINIMALNEGO W CZASIE O(1) // Plik: min-o1.alg // Dane:: tablica a[n]; n^2 procesorow; CRCW PRAM // Zadanie: znalezienie elementu minimalnego w a (pierwszego najmniejszego) 1 begin 2 parfor P_i,j, i=1, 1 <= j <=n do 3 t[j] == 0; 4 end parfor 5 parfor P_i,j, 1 <= i,j <= n do 6 if a[i] < a[j] then // a[i] nie jest el. minimalnym 7 t[i] = 0; 8 end if; // t[j]==0 znaczy, ze a[j] = min(a[j]), i=1,...,n 10 if t[i] == 0 and i<j then 11 t[j] = 1; 12 end if; // tylko jeden element jest minimalny 13 end parfor; 14 parfor P_i,j, i=1, 1 <= j <= n do 15 if t[j] == 0 then 16 return a[j]; // zwrot elementu minimalnego 17 end if; 18 end parfor; 19 end; 24/29

WYZNACZANIE ELEMENTU MINIMALNEGO W CZASIE O(1) Algorytm działa w czasie O(1)! Złożoność procesorowa p(n)=n 2, a więc cena, jest wysoka. Koszt jest O(n 2 ) i przewyższa koszt algorytmu sekwencyjnego, który wynosi n 1. Efektywność szybko maleje do zera wraz ze wzrostem n. 25/29

SORTOWANIE W CZASIE O(log n) Przeanalizujemy algorytm sortowania pracujący w czasie O(1). Zastosujemy tzw. sortowanie przez zliczanie. Użyjemy n 2 procesorów ułożonych w sieć n n. Problem sprowadza sie do wyznaczenia indeksu, pod który należy wstawić do b[] każdy element tablicy a[]. Pomocnicza tablica obliczana przez wszystkie procesory jest dana przez: w[i,j]= { 1 gdy a[i] > a[j], lub gdy a[i] = a[j] oraz i > j 0, w przeciwnym razie. Suma jedynek w każdym wierszu i tablicy w[] określa indeks elementu a[i], pod który należy go wstawic do tablicy b[] (suma jest mniejsza od indeksu o 1). Jako przykład rozpatrzmy sortowanie tablicy a[1..4]={5, 1,2, 1}. Relację opisaną przez (4) oznaczmy przez. Wyniki przedstawia tabela. (4) P i,j 1 2 3 4 w 1 2 3 4 1 a[1] a[1] a[1] a[2] a[1] a[3] a[1] a[4] 1 0 1 1 1 3 2 a[2] a[1] a[2] a[2] a[2] a[3] a[2] a[4] 1 0 0 0 0 0 3 a[3] a[1] a31] a[2] a[3] a[3] a[3] a[4] 1 0 1 0 1 2 4 a[4 a[1] a[4] a[2] a[4] a[3] a[4] a[4] 1 0 1 0 0 1 26/29

SORTOWANIE W CZASIE O(log n) // Plik: sort-ologn.alg; Algorytm sortowania w czasie O(lg n) // Dane: Tablica a[n], n^2 = siec n x n procesorow, CREW PRAM // Dane pomocnicze: w[1..n, 1..n]; Wynik: Tablica b[1..n] uporzadkowana; 1 begin 2 parfor P_ij, 1<= i,j <= n do 3 if (a[i] == a[j]) or ((a[i] == a[j]) and (i>j)) then 4 w[i,j] = 1; 5 else 6 w[i,j] = 0; 7 end if; 8 end parfor; 9 k = n; 10 for (r=1; r<=ceil(log n) do // zliczanie jedynek w tablicy w[] 11 parfor P_ij, 1 <= i <= n, 1 <= j <= floor(k/2) do 12 w[i,j] = w[i,j] +w[i, k+1-j]; 13 end parfor; 14 k = ceil(k/2); 15 end for; // w[i,j] okreslaja pozycje elementow a[i] w tablicy b[] 16 parfor P_ij, 1 <= i <= n, j=1 do 17 b[w[i,1]+1] = a[i]; 18 end parfor; 19 end 27/29

ANALIZA ZŁOŻONOSCI ALG. n 2 PROC. Wiersze 2 8 oraz 16 18 wykonują sie w jednym kroku (stały czas), a wiersze 9 15 w czasie c logn gdzie c jest stala. Mamy więc: Złożoność czasowa: T(p,n)=T(n)=O(logn) Przyspieszenie: Koszt: Efektywność: S(n)= nlogn logn = O(n) C(n)=O(n 2 logn) E(n)= nlogn n 2 logn = O( 1 n ). Zalety i wady algorytmu sortowania Zaletą algorytmu jest duże przyspieszenie. Wadą algorytmu jest mała efektywność. 28/29

DZIEKUJ E ZA UWAG E. 29/29