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.
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