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.

52 Hoofdstuk 5. <strong>Parallelle</strong> sorteeralgoritm<strong>en</strong><br />

E<strong>en</strong> odd-ev<strong>en</strong>-transposition netwerk op n lijn<strong>en</strong> is gebouwd uit twee soort<strong>en</strong> koppeling<strong>en</strong> van de<br />

lijn<strong>en</strong>. Wanneer we de lijn<strong>en</strong> nummer<strong>en</strong> van 1 tot n, dan word<strong>en</strong> in de eerste soort koppeling<br />

vergelijking<strong>en</strong> tuss<strong>en</strong> lijn<strong>en</strong> 1 <strong>en</strong> 2, 3 <strong>en</strong> 4, 5 <strong>en</strong> 6, <strong>en</strong>z. aangebracht. In de tweede soort koppeling<br />

word<strong>en</strong> vergelijking<strong>en</strong> tuss<strong>en</strong> lijn<strong>en</strong> 2 <strong>en</strong> 3, 4 <strong>en</strong> 5, <strong>en</strong>z. aangebracht. We alterner<strong>en</strong> deze<br />

koppeling<strong>en</strong> n − 2 keer, hetge<strong>en</strong> e<strong>en</strong> netwerk van diepte n oplevert.<br />

Stelling 5.1.3. Het odd-ev<strong>en</strong>-transposition netwerk sorteert n getall<strong>en</strong> in n stapp<strong>en</strong> met Θ(n 2 )<br />

poort<strong>en</strong>.<br />

(Bewijs als oef<strong>en</strong>ing)<br />

Het odd-ev<strong>en</strong>-transposition netwerk is sneller dan de beste sequ<strong>en</strong>tiële algoritm<strong>en</strong>, maar de versnelling<br />

met factor O(logn) is bekom<strong>en</strong> t<strong>en</strong> koste van Θ(n 2 ) poort<strong>en</strong>. De vraag is of we het<br />

netwerk kunn<strong>en</strong> verbeter<strong>en</strong>, zowel in diepte als in grootte. Dit blijkt e<strong>en</strong> moeilijk probleem te<br />

zijn.<br />

In het PRAM-model bestaat er e<strong>en</strong> gecompliceerde parallelle versie van het mergesort-algoritme<br />

dat sorteert in O(logn) parallelle tijd <strong>en</strong> O(nlogn) werk (e<strong>en</strong> algoritme dat we hier niet besprek<strong>en</strong>).<br />

Voor lange tijd bestond er e<strong>en</strong> conjectuur (o.a. door Knuth) dat deze gr<strong>en</strong>z<strong>en</strong> niet met<br />

e<strong>en</strong> sorteernetwerk kond<strong>en</strong> word<strong>en</strong> bereikt. In 1983 echter construeerd<strong>en</strong> Ajtai, Komlós <strong>en</strong> Szemerédi<br />

e<strong>en</strong> sorteernetwerk van diepte O(logn) <strong>en</strong> grootte O(nlogn). Hun constructie is echter<br />

zeer ingewikkeld <strong>en</strong> van weinig praktisch belang.<br />

Onze bedoeling in dit hoofdstuk is het besprek<strong>en</strong> van e<strong>en</strong> sorteernetwerk, geconstrueerd door<br />

Batcher, dat diepte O(log 2 n) <strong>en</strong> grootte O(nlog 2 n) heeft. Batcher gebruikte e<strong>en</strong> verdeel-<strong>en</strong>heers<br />

strategie voor het sorter<strong>en</strong>: e<strong>en</strong> inputrij wordt in twee helft<strong>en</strong> gesplitst, recursief gesorteerd,<br />

<strong>en</strong> dan word<strong>en</strong> de helft<strong>en</strong> sam<strong>en</strong>gevoegd (gemerged). De taak van het efficiënt merg<strong>en</strong> van twee<br />

gesorteerde rij<strong>en</strong> tot één gesorteerde rij blijkt moeilijker te zijn op sorteernetwerk<strong>en</strong> dan voor<br />

algem<strong>en</strong>e algoritm<strong>en</strong>. Om dit probleem op te loss<strong>en</strong>, bekijk<strong>en</strong> we eerst hoe e<strong>en</strong> sorteernetwerk<br />

voor speciale rij<strong>en</strong>, nl. de bitonische rij<strong>en</strong>, kan word<strong>en</strong> geconstrueerd. Daarna pass<strong>en</strong> we dit<br />

sorteernetwerk toe om twee gesorteerde rij<strong>en</strong> te merg<strong>en</strong> <strong>en</strong> vervolg<strong>en</strong>s gebruik<strong>en</strong> we dat netwerk<br />

om e<strong>en</strong> algeme<strong>en</strong> sorteernetwerk te construer<strong>en</strong>.<br />

5.1.2 Bitonisch sorter<strong>en</strong><br />

We b<strong>en</strong>ader<strong>en</strong> het sorteerprobleem door het eerst op te loss<strong>en</strong> voor e<strong>en</strong>voudige inputrij<strong>en</strong>. De<br />

meest e<strong>en</strong>voudige inputrij is e<strong>en</strong> rij die reeds in stijg<strong>en</strong>de volgorde gesorteerd is, want daar is er<br />

ge<strong>en</strong> werk te do<strong>en</strong>. In e<strong>en</strong> volg<strong>en</strong>de stap beschouw<strong>en</strong> we rij<strong>en</strong> die rotaties van gesorteerde rij<strong>en</strong><br />

zijn. We noem<strong>en</strong> e<strong>en</strong> dergelijke rij (a0,...,an−1) cyclisch stijg<strong>en</strong>d als er e<strong>en</strong> index i bestaat zodanig<br />

dat (ai,...,an−1,a0,...,ai−1) stijg<strong>en</strong>d is. Merk op dat dit voor i = 0 betek<strong>en</strong>t dat de rij zelf<br />

stijg<strong>en</strong>d is. Bijvoorbeeld, de rij<strong>en</strong> (92,78,92) <strong>en</strong> (12,23,31,4,7) zijn cyclisch stijg<strong>en</strong>d, terwijl<br />

de rij<strong>en</strong> (1,3,1,3) <strong>en</strong> (12,3,2) dit niet zijn. E<strong>en</strong> cyclisch stijg<strong>en</strong>de rij kan word<strong>en</strong> gevisualiseerd<br />

door zijn getall<strong>en</strong> op de omtrek van e<strong>en</strong> cirkel te schrijv<strong>en</strong> <strong>en</strong> het eerste elem<strong>en</strong>t in de rij door<br />

e<strong>en</strong> pijl te lat<strong>en</strong> aanwijz<strong>en</strong>.<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!