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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

46 Hoofdstuk 4. Ontwerptechniek<strong>en</strong> voor parallelle algoritm<strong>en</strong><br />

Algoritme 4.8 Bepal<strong>en</strong> van het maximum in constante tijd<br />

Input: array A = (a1,...,ap) met p verschill<strong>en</strong>de getall<strong>en</strong><br />

Output: boolean array M = (m1,...,mp) met mi = true als <strong>en</strong> slechts als ai het maximum van A<br />

is<br />

1: for 1 ≤ i, j ≤ p pardo<br />

2: if ai ≥ a j th<strong>en</strong><br />

3: Stel bi, j ← true<br />

4: else<br />

5: Stel bi, j ← false<br />

6: for 1 ≤ i ≤ p pardo<br />

7: mi ← bi,1 ∧ bi,2 ∧...bi,p<br />

word<strong>en</strong> als het elem<strong>en</strong>t dat in al zijn vergelijking<strong>en</strong> de “winnaar” is. Daartoe houdt het algoritme<br />

e<strong>en</strong> tweedim<strong>en</strong>sionale boolean array B = (bi, j) bij, die het resultaat van elke vergelijking<br />

opslaat. Vervolg<strong>en</strong>s wordt e<strong>en</strong> array M opgebouwd. Wanneer het algoritme eindigt, heeft arrayelem<strong>en</strong>t<br />

mi de waarde true als <strong>en</strong> slechts als elem<strong>en</strong>t ai het grootste elem<strong>en</strong>t uit A is.<br />

Merk op dat dit algoritme concurr<strong>en</strong>t read nodig heeft. Bov<strong>en</strong>di<strong>en</strong> kan de tweede parallelle forlus<br />

uitgevoerd word<strong>en</strong> in constante tijd, als we concurr<strong>en</strong>t write toelat<strong>en</strong>. Dit algoritme werkt dus<br />

in het CRCW PRAM-model in Θ(1) tijd <strong>en</strong> gebruikt Θ(p 2 ) bewerking<strong>en</strong>. Dit levert de volg<strong>en</strong>de<br />

stelling.<br />

Stelling 4.4.1. Het grootste van p elem<strong>en</strong>t<strong>en</strong> kan op CRCW PRAM bepaald word<strong>en</strong> in Θ(1)<br />

parallelle tijd <strong>en</strong> Θ(p 2 ) bewerking<strong>en</strong>.<br />

4.4.3 Algoritme voor het maximum in dubbel-logaritmische tijd<br />

In e<strong>en</strong> gewortelde boom is het niveau van e<strong>en</strong> top v bepaald door het aantal bog<strong>en</strong> op het pad<br />

van de wortel naar v. De wortel heeft dus niveau 0. We definiër<strong>en</strong> nu de boom van dubbellogaritmische<br />

diepte met n blader<strong>en</strong>. Voor de e<strong>en</strong>voud veronderstell<strong>en</strong> we dat n = 22k voor zekere<br />

k geheel.<br />

De wortel van de boom heeft √ n = 22k−1 kinder<strong>en</strong>, elk van die kinder<strong>en</strong> heeft op zijn beurt 22k−2 kinder<strong>en</strong>, <strong>en</strong>z. Algeme<strong>en</strong>, e<strong>en</strong> top op niveau i heeft 22k−i−1 kinder<strong>en</strong>, voor 0 ≤ i ≤ k−1. T<strong>en</strong>slotte<br />

heeft elke top op niveau k nog 2 blader<strong>en</strong> als kinder<strong>en</strong>.<br />

Volg<strong>en</strong>de eig<strong>en</strong>schapp<strong>en</strong> zijn e<strong>en</strong>voudig (evt. met behulp van inductie) te bewijz<strong>en</strong>:<br />

(1) Het aantal topp<strong>en</strong> op niveau i is gegev<strong>en</strong> door n/2 2k−i<br />

(2) Het aantal topp<strong>en</strong> op niveau k is gegev<strong>en</strong> door n/2 = 22k−1. (3) De diepte van de boom is k+ 1 = log 2 log 2 n+1<br />

= 2 2k −2 k−i<br />

, voor 0 ≤ i < k.<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!