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.

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

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

Saved successfully!

Ooh no, something went wrong!