Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
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