03.07.2013 Views

Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt

Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt

Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

4.1. Pipelining / Sorter<strong>en</strong> & Priemzeef 37<br />

Algoritme 4.1 Sorter<strong>en</strong> via pipelining<br />

Input: rij van n processor<strong>en</strong> P1,...,Pn <strong>en</strong> e<strong>en</strong> master P0; processornummer i > 0; rij van n getall<strong>en</strong><br />

op P0<br />

Output: de gesorteerde rij op master P0<br />

1: receive (x, Pi−1)<br />

2: for j from 2 to n − i do<br />

3: receive (y, Pi−1)<br />

4: if y < x th<strong>en</strong><br />

5: s<strong>en</strong>d (x, Pi+1)<br />

6: Stel x ← y<br />

7: else<br />

8: s<strong>en</strong>d (y, Pi+1)<br />

9: s<strong>en</strong>d (x, Pi−1)<br />

10: for j from 2 to n − i do<br />

11: receive (y, Pi+1)<br />

12: s<strong>en</strong>d (y, Pi−1)<br />

Algoritme 4.2 Priemzeef van Eratosth<strong>en</strong>es (sequ<strong>en</strong>tieel algoritme)<br />

Input: e<strong>en</strong> positief geheel getal n<br />

Output: (p2,..., pn) met pi true als i priem, anders false<br />

1: for i from 2 to n do<br />

2: Stel pi ← true<br />

3: for i from 2 to √ n do<br />

4: if pi th<strong>en</strong><br />

5: for j from i 2 to n step i do<br />

6: Stel pi ← false<br />

4.1.3 Priemzeef via pipeling<br />

De priemzeef van Eratosth<strong>en</strong>es voor het bepal<strong>en</strong> van alle priemgetall<strong>en</strong> kleiner dan of gelijk aan n<br />

start met de rij 2,...,n. Eerst word<strong>en</strong> alle echte veelvoud<strong>en</strong> van 2 geschrapt, vervolg<strong>en</strong>s alle echte<br />

veelvoud<strong>en</strong> van 3, van 5, <strong>en</strong>z. voor alle overblijv<strong>en</strong>de getall<strong>en</strong>, tot aan √ n. Algoritme 4.2 geeft<br />

de pseudocode voor e<strong>en</strong> sequ<strong>en</strong>tiële uitwerking van dit idee. De sequ<strong>en</strong>tiële uitvoeringstijd is<br />

T(n) = O(n 2 ).<br />

Merk op dat het schrapp<strong>en</strong> van de veelvoud<strong>en</strong> iets is wat in parallel kan gebeur<strong>en</strong>, meer bepaald<br />

via pipelining. Het algoritme via pipelining werkt als volgt. Elke processor houdt het eerste<br />

binn<strong>en</strong>kom<strong>en</strong>de getal bij, verwijdert de veelvoud<strong>en</strong> hiervan uit de doorkom<strong>en</strong>de rij <strong>en</strong> stuurt de<br />

niet-veelvoud<strong>en</strong> door naar zijn rechterbuur.<br />

Anders dan bij het sorteerprobleem wet<strong>en</strong> we nu niet op voorhand hoeveel getall<strong>en</strong> elke processor<br />

zal ontvang<strong>en</strong>. Dit kunn<strong>en</strong> we oploss<strong>en</strong> door e<strong>en</strong> speciaal getal (“terminator”) aan het einde van<br />

de rij toe te voeg<strong>en</strong>, dat aangeeft dat de rij t<strong>en</strong> einde is.<br />

<strong>Algoritm<strong>en</strong></strong> <strong>en</strong> Datastructur<strong>en</strong> <strong>III</strong> Veerle.Fack@UG<strong>en</strong>t.be

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!