Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
Algoritmen en Datastructuren III Partim: Parallelle algoritmen - caagt
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
54 Hoofdstuk 5. <strong>Parallelle</strong> sorteeralgoritm<strong>en</strong><br />
Figuur 5.6: Het netwerk B16<br />
de pijl in wijzerzin roter<strong>en</strong> over i posities. We kunn<strong>en</strong> de berek<strong>en</strong>ing van de output dus bekijk<strong>en</strong><br />
als het roter<strong>en</strong> van de pijl, stap voor stap voor n/2 − 1 keer, vanaf zijn beginpositie.<br />
Merk op dat de uiteind<strong>en</strong> van de pijl steeds in teg<strong>en</strong>overgestelde helft<strong>en</strong> van de cirkel ligg<strong>en</strong>.<br />
Aangezi<strong>en</strong> alle elem<strong>en</strong>t<strong>en</strong> in de <strong>en</strong>e helft hoogst<strong>en</strong>s zo groot zijn als alle elem<strong>en</strong>t<strong>en</strong> in de andere<br />
helft, betek<strong>en</strong>t dit dat bi = min(ai,a i+n/2) steeds g<strong>en</strong>om<strong>en</strong> wordt uit de helft met het minimum,<br />
terwijl b i+n/2 = max(ai,a i+n/2) steeds g<strong>en</strong>om<strong>en</strong> wordt uit de helft met het maximum. Dit impliceert<br />
dat alle elem<strong>en</strong>t<strong>en</strong> van (b0,...,b n/2−1) kleiner (of gelijk) zijn dan alle elem<strong>en</strong>t<strong>en</strong> van<br />
(b n/2,...,bn−1). Bov<strong>en</strong>di<strong>en</strong> zijn beide deelrij<strong>en</strong> cyclisch stijg<strong>en</strong>d, omdat ze elk e<strong>en</strong> rotatie van<br />
e<strong>en</strong> deelrij van de oorspronkelijke rij zijn.<br />
Sam<strong>en</strong>vatt<strong>en</strong>d, het netwerk Dn verdeelt e<strong>en</strong> cyclisch stijg<strong>en</strong>de rij van l<strong>en</strong>gte n in twee cyclisch<br />
stijg<strong>en</strong>de deelrij<strong>en</strong> van l<strong>en</strong>gte n/2, zodanig dat elk elem<strong>en</strong>t in de eerste deelrij kleiner is dan<br />
elk elem<strong>en</strong>t in de tweede deelrij. We kunn<strong>en</strong> nu D n/2 op elke deelrij gebruik<strong>en</strong> om de deelrij<strong>en</strong><br />
verder te verwerk<strong>en</strong>. Wanneer we dit proces recursief verderzett<strong>en</strong>, bekom<strong>en</strong> we e<strong>en</strong> netwerk Bn<br />
dat cyclisch stijg<strong>en</strong>de rij<strong>en</strong> sorteert. Figuur 5.6 geeft B16.<br />
Lemma 5.1.6. Het netwerk Bn is e<strong>en</strong> sorteernetwerk voor cyclisch stijg<strong>en</strong>de rij<strong>en</strong>. Het heeft<br />
diepte log 2 n <strong>en</strong> grootte nlog 2 n.<br />
Bewijs. We bewijz<strong>en</strong> de correctheid door inductie op n. Het gestelde geldt voor n = 1, want B1<br />
is e<strong>en</strong> lijn zonder comparator<strong>en</strong>. Zij nu n e<strong>en</strong> eig<strong>en</strong>lijke macht van 2. Door de inductiehypothese<br />
kunn<strong>en</strong> we veronderstell<strong>en</strong> dat B n/2 cyclisch stijg<strong>en</strong>de rij<strong>en</strong> van l<strong>en</strong>gte n/2 correct sorteert. Beschouw<br />
e<strong>en</strong> cyclisch stijg<strong>en</strong>de rij als input voor Bn. Weg<strong>en</strong>s Lemma 5.1.5 verdeelt Dn deze rij in<br />
twee cyclisch stijg<strong>en</strong>de rij<strong>en</strong>, waarbij elk elem<strong>en</strong>t van de eerste deelrij kleiner is dan elk elem<strong>en</strong>t<br />
van de tweede rij. Dus, aangezi<strong>en</strong> beide deelrij<strong>en</strong> correct word<strong>en</strong> gesorteerd door B n/2, wordt de<br />
ganse rij correct gesorteerd.<br />
Merk op dat Bn meer doet dan <strong>en</strong>kel cyclisch stijg<strong>en</strong>de rij<strong>en</strong> sorter<strong>en</strong>; het sorteert ook zgn.<br />
bitonische rij<strong>en</strong> correct. E<strong>en</strong> bitonische rij is e<strong>en</strong> rij die e<strong>en</strong> rotatie is van e<strong>en</strong> rij die eerst<br />
stijg<strong>en</strong>d is <strong>en</strong> dan dal<strong>en</strong>d. Meer formeel: (a0,...,an−1) is bitonisch wanneer er e<strong>en</strong> m <strong>en</strong> e<strong>en</strong> c<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