Het sorteernetwerk
Het sorteernetwerk
Het sorteernetwerk
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Parallelle<br />
sorteeralgoritmen<br />
parallelle varianten van klassieke<br />
sorteeralgoritmen<br />
<strong>sorteernetwerk</strong>en / nul-een-principe<br />
sorteren op interconnectienetwerken<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.1/47
Sorteeralgoritmen<br />
“Comparison-based” sorteeralgoritmen<br />
sorteren door herhaaldelijk vergelijken van<br />
2 elementen en verwisselen indien in<br />
verkeerde volgorde<br />
basisbewerking “vergelijk&verwissel”<br />
(“compare-exchange”, notatie v&v )<br />
BubbleSort, InsertionSort, SelectionSort,<br />
MergeSort, QuickSort<br />
ondergrens voor sequentiële tijdscomplexiteit<br />
is Ω(n log n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.2/47
Sorteeralgoritmen (2)<br />
“Noncomparison-based” sorteeralgoritmen<br />
gebruiken specifieke gekende eigenschappen<br />
van te sorteren gegevens (bvb. hun<br />
bitvoorstelling of hun verdeling)<br />
BucketSort, RadixSort, CountingSort<br />
ondergrens voor sequentiële tijdscomplexiteit<br />
is Ω(n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.3/47
Parallelle variant van<br />
mergesort<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.4/47
Verdeel-en-heers techniek<br />
Techniek: 3 stappen<br />
input opsplitsen in stukken van ongeveer<br />
gelijke grootte<br />
recursief oplossen van elk deelprobleem<br />
resultaten van deelproblemen samenvoegen<br />
tot oplossing van oorspronkelijke probleem<br />
Wanneer is techniek bruikbaar?<br />
als opsplitsen en samenvoegen efficiënt kan<br />
gebeuren<br />
Voorbeelden: mergesort<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.5/47
MergeSort<br />
Algoritme MergeSort (sequentieel, recursief)<br />
Input: rij elementen Aℓ,r = (aℓ,...,ar)<br />
Output: stijgend gesorteerde rij<br />
1: if ℓ < r then<br />
2: stel m ← (ℓ + r)/2<br />
3: sorteer (aℓ,...,am) recursief<br />
4: sorteer (am+1,...,ar) recursief<br />
5: merge deelrijen<br />
Sequentiële complexiteit<br />
T(n) = 2T(n/2) + Θ(n) = Θ(n log n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.6/47
MergeSort parallelliseren<br />
Merk op<br />
sorteren deelrijen kan in parallel gebeuren<br />
mergen in parallel?<br />
Parallelle Merge (zie eerder)<br />
mergen van k = 2 ℓ elementen<br />
T(k) = Θ(log k) en W(k) = Θ(k)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.7/47
MergeSort parallelliseren<br />
Merk op<br />
sorteren deelrijen kan in parallel gebeuren<br />
mergen in parallel?<br />
Parallelle Merge (zie eerder)<br />
mergen van k = 2 ℓ elementen<br />
T(k) = Θ(log k) en W(k) = Θ(k)<br />
Complexiteit van parallelle MergeSort<br />
T(n) = T(n/2) + Θ(log n) = Θ(log 2 n)<br />
W(n) = 2W(n/2) + Θ(n) = Θ(n log n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.7/47
TwoWayMergeSort<br />
Algoritme (sequentieel, niet-recursief)<br />
Input: rij A = (a1,...,an), n = 2 k<br />
Output: stijgend gesorteerde rij<br />
1: for h from 1 to log 2 n − 1 do<br />
2: for j from 1 to n/2 h − 1 step 2 do<br />
3: merge (a (j−1)2 h +1,...,a j2 h) en<br />
(a j2 h +1,...,a (j+1)2 h)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.8/47
TwoWayMergeSort<br />
Algoritme (sequentieel, niet-recursief)<br />
Input: rij A = (a1,...,an), n = 2 k<br />
Output: stijgend gesorteerde rij<br />
1: for h from 1 to log 2 n − 1 do<br />
2: for j from 1 to n/2 h − 1 step 2 do<br />
3: merge (a (j−1)2 h +1,...,a j2 h) en<br />
(a j2 h +1,...,a (j+1)2 h)<br />
Opmerking<br />
cfr. techniek van gebalanceerde bomen<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.8/47
TwoWayMergeSort<br />
Algoritme (voor PRAM)<br />
1: for h from 1 to log 2 n − 1 do<br />
2: for j from 1 to n/2 h − 1 step 2 pardo<br />
3: merge (a (j−1)2 h +1,...,a j2 h) en<br />
(a j2 h +1,...,a (j+1)2 h)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.9/47
TwoWayMergeSort<br />
Algoritme (voor PRAM)<br />
1: for h from 1 to log 2 n − 1 do<br />
2: for j from 1 to n/2 h − 1 step 2 pardo<br />
3: merge (a (j−1)2 h +1,...,a j2 h) en<br />
(a j2 h +1,...,a (j+1)2 h)<br />
Complexiteit van parallelle TwoWayMergeSort<br />
T(n) = Θ( log 2 n−1<br />
h=1<br />
W(n) = Θ( log 2 n−1<br />
h=1<br />
log 2(2 h )) = Θ(log 2 n)<br />
n) = Θ(n log n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.9/47
Varianten van bubblesort<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.10/47
BubbleSort<br />
Algoritme (sequentieel)<br />
Input: rij (a1,a2,...,an)<br />
Output: stijgend gesorteerde rij<br />
1: for i from n − 1 to 1 do<br />
2: for j from 1 to i do<br />
3: v&v aj en aj+1<br />
Complexiteit<br />
T(n) = Θ(n 2 )<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.11/47
Parallelle BubbleSort<br />
Parallelliseren van BubbleSort<br />
elke fase (lus over j) is inherent sequentieel<br />
algoritme te parallelliseren via pipelining<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.12/47
Parallelle BubbleSort<br />
Parallelliseren van BubbleSort<br />
elke fase (lus over j) is inherent sequentieel<br />
algoritme te parallelliseren via pipelining<br />
Complexiteit<br />
T(n) = Θ(n)<br />
W(n) = Θ(n 2 )<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.12/47
Variant van BubbleSort<br />
OddEvenTranspositionSort<br />
werkt in twee fasen: even en oneven<br />
(on)even fase: vergelijk&verwissel tussen<br />
elementen op (on)even plaatsen met hun<br />
rechterbuur<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.13/47
OddEvenTranspositionSort<br />
Algoritme (sequentieel)<br />
1: for i from 1 to n do<br />
2: if i is oneven then<br />
3: for j from 0 to n/2 − 1 do<br />
4: v&v a2j+1 en a2j+2<br />
5: else<br />
6: for j from 1 to n/2 − 1 do<br />
7: v&v a2j en a2j+1<br />
Complexiteit:<br />
T(n) = Θ(n 2 )<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.14/47
OddEvenTranspositionSort<br />
Algoritme (voor PRAM)<br />
1: for i from 1 to n do<br />
2: if i is oneven then<br />
3: for j from 0 to n/2 − 1 pardo<br />
4: v&v a2j+1 en a2j+2<br />
5: else<br />
6: for j from 1 to n/2 − 1 pardo<br />
7: v&v a2j en a2j+1<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.15/47
OddEvenTranspositionSort<br />
Algoritme (voor PRAM)<br />
1: for i from 1 to n do<br />
2: if i is oneven then<br />
3: for j from 0 to n/2 − 1 pardo<br />
4: v&v a2j+1 en a2j+2<br />
5: else<br />
6: for j from 1 to n/2 − 1 pardo<br />
7: v&v a2j en a2j+1<br />
Complexiteit<br />
T(n) = Θ(n) en W(n) = Θ(n 2 )<br />
niet optimaal, T ∗ (n) = Θ(n log n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.15/47
Algoritme optimaliseren<br />
OddEvenTranspositionSort optimaliseren<br />
n stappen van elk Θ(n) werk<br />
→ in totaal Θ(n 2 ) werk<br />
proberen herleiden naar log 2 n stappen<br />
→ parallel algoritme uitvoeren op p = log 2 n<br />
“elementen”<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.16/47
Algoritme optimaliseren<br />
OddEvenTranspositionSort optimaliseren<br />
n stappen van elk Θ(n) werk<br />
→ in totaal Θ(n 2 ) werk<br />
proberen herleiden naar log 2 n stappen<br />
→ parallel algoritme uitvoeren op p = log 2 n<br />
“elementen”<br />
“elementen” zijn deelrijen van lengte n/p die<br />
sequentieel gesorteerd worden<br />
“vergelijk&verwissel” wordt “merge&splits”<br />
(“compare-split”) van 2 deelrijen<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.16/47
Optimaal algoritme<br />
OddEvenTranpositionSort (voor PRAM)<br />
Input: rij (a1,a2,...,an), n = 2 p , r = n/p<br />
1: for i from 1 to p pardo<br />
2: sorteer Ai = (a (i−1)r+1,...,air) seq.<br />
3: for i from 1 to p do<br />
4: if i is oneven then<br />
5: for j from 0 to p/2 − 1 pardo<br />
6: merge&splits A2j+1 en A2j+2<br />
7: else<br />
8: for j from 1 to p/2 − 1 pardo<br />
9: merge&splits A2j en A2j+1<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.17/47
Complexiteit<br />
Stel<br />
p = log 2 n en r = n/p<br />
Uitvoeringstijd<br />
Werk<br />
T(n) = Θ(r log r + p × r) = Θ(n)<br />
W(n) = Θ(p × r log r + p × p × r) = Θ(n log n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.18/47
Sorteernetwerken<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.19/47
Comparatoren<br />
Wat zijn <strong>sorteernetwerk</strong>en?<br />
netwerk bestaande uit speciale poorten<br />
vergelijkende poort of comparator<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.20/47
Comparatoren<br />
Wat zijn <strong>sorteernetwerk</strong>en?<br />
netwerk bestaande uit speciale poorten<br />
vergelijkende poort of comparator<br />
Vergelijkende poort of comparator<br />
device met 2 inputs x,y en 2 outputs x ′ ,y ′<br />
stijgende comparator ⊕<br />
x ′ = min{x,y} en y ′ = max{x,y}<br />
dalende comparator ⊖<br />
x ′ = max{x,y} en y ′ = min{x,y}<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.20/47
Sorteernetwerken<br />
Sorteernetwerk<br />
circuit van vergelijkende poorten dat zijn input<br />
in stijgende volgorde sorteert<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.21/47
Sorteernetwerken<br />
Sorteernetwerk<br />
circuit van vergelijkende poorten dat zijn input<br />
in stijgende volgorde sorteert<br />
Voorstelling<br />
verzameling lijnen, 1 lijn per input<br />
poorten tussen lijnen getekend<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.21/47
Sorteernetwerken<br />
Sorteernetwerk<br />
circuit van vergelijkende poorten dat zijn input<br />
in stijgende volgorde sorteert<br />
Voorstelling<br />
verzameling lijnen, 1 lijn per input<br />
poorten tussen lijnen getekend<br />
Merk op<br />
poort reageert pas wanneer alle inputs<br />
beschikbaar<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.21/47
Visualisatie <strong>sorteernetwerk</strong><br />
Merk op<br />
poorten waarvan lijnen niet overlappen,<br />
kunnen in parallel werken<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.22/47
Visualisatie <strong>sorteernetwerk</strong><br />
Merk op<br />
poorten waarvan lijnen niet overlappen,<br />
kunnen in parallel werken<br />
Visualisatie<br />
groeperen poorten die parallel werken<br />
vormen laag van netwerk<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.22/47
Visualisatie <strong>sorteernetwerk</strong><br />
Merk op<br />
poorten waarvan lijnen niet overlappen,<br />
kunnen in parallel werken<br />
Visualisatie<br />
groeperen poorten die parallel werken<br />
vormen laag van netwerk<br />
Merk op<br />
laag vereist 1 tijdseenheid voor uitvoering<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.22/47
Parameters <strong>sorteernetwerk</strong><br />
Diepte van netwerk = aantal lagen<br />
d.i. aantal stappen nodig opdat elke poort zijn<br />
vergelijking uitgevoerd heeft<br />
bepaalt snelheid van <strong>sorteernetwerk</strong><br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.23/47
Parameters <strong>sorteernetwerk</strong><br />
Diepte van netwerk = aantal lagen<br />
d.i. aantal stappen nodig opdat elke poort zijn<br />
vergelijking uitgevoerd heeft<br />
bepaalt snelheid van <strong>sorteernetwerk</strong><br />
Grootte van netwerk = aantal poorten<br />
bepaalt werk van <strong>sorteernetwerk</strong><br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.23/47
Parameters <strong>sorteernetwerk</strong><br />
Diepte van netwerk = aantal lagen<br />
d.i. aantal stappen nodig opdat elke poort zijn<br />
vergelijking uitgevoerd heeft<br />
bepaalt snelheid van <strong>sorteernetwerk</strong><br />
Grootte van netwerk = aantal poorten<br />
bepaalt werk van <strong>sorteernetwerk</strong><br />
Merk op<br />
<strong>sorteernetwerk</strong> omzetbaar naar sequentieel<br />
sorteeralgoritme<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.23/47
Odd-even-tranposition<br />
<strong>sorteernetwerk</strong><br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.24/47
Een ‘maximum’-netwerk<br />
Bepalen van maximum via ‘<strong>sorteernetwerk</strong>’<br />
vergelijk eerste twee inputs<br />
telkens vorige resultaat vergelijken met<br />
volgende input<br />
totdat alle inputs verwerkt<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.25/47
Een ‘maximum’-netwerk<br />
Bepalen van maximum via ‘<strong>sorteernetwerk</strong>’<br />
vergelijk eerste twee inputs<br />
telkens vorige resultaat vergelijken met<br />
volgende input<br />
totdat alle inputs verwerkt<br />
Complexiteit (n inputs)<br />
diepte = grootte = n − 1<br />
tijd en werk Θ(n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.25/47
Odd-even-transposition netwerk<br />
Merk op: maximum-netwerk<br />
n − 1 comparatoren op diagonaal<br />
⇒ grootste element naar laatste lijn<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.26/47
Odd-even-transposition netwerk<br />
Merk op: maximum-netwerk<br />
n − 1 comparatoren op diagonaal<br />
⇒ grootste element naar laatste lijn<br />
Idee (cfr. bubblesort)<br />
gebruik meerdere dergelijke diagonalen<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.26/47
Odd-even-transposition netwerk<br />
Merk op: maximum-netwerk<br />
n − 1 comparatoren op diagonaal<br />
⇒ grootste element naar laatste lijn<br />
Idee (cfr. bubblesort)<br />
gebruik meerdere dergelijke diagonalen<br />
Werkwijze (n inputs)<br />
twee soorten koppelingen tussen lijnen<br />
eerste soort: koppelt even lijn met vorige lijn<br />
tweede soort: koppelt even lijn met volgende<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.26/47
Complexiteit<br />
Uitvoeringstijd<br />
diepte n, dus tijd Θ(n)<br />
sneller dan beste sequentieel sorteeralgo.<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.27/47
Complexiteit<br />
Uitvoeringstijd<br />
Werk<br />
diepte n, dus tijd Θ(n)<br />
sneller dan beste sequentieel sorteeralgo.<br />
grootte n(n − 1)/2, dus werk Θ(n 2 )<br />
niet werk-optimaal<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.27/47
Complexiteit<br />
Uitvoeringstijd<br />
Werk<br />
diepte n, dus tijd Θ(n)<br />
sneller dan beste sequentieel sorteeralgo.<br />
grootte n(n − 1)/2, dus werk Θ(n 2 )<br />
niet werk-optimaal<br />
Kan dit beter?<br />
PRAM-versie van mergesort<br />
tijd Θ(log n) en werk Θ(n log n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.27/47
Complexiteit<br />
Uitvoeringstijd<br />
Werk<br />
diepte n, dus tijd Θ(n)<br />
sneller dan beste sequentieel sorteeralgo.<br />
grootte n(n − 1)/2, dus werk Θ(n 2 )<br />
niet werk-optimaal<br />
Kan dit beter?<br />
PRAM-versie van mergesort<br />
tijd Θ(log n) en werk Θ(n log n)<br />
met <strong>sorteernetwerk</strong>? Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.27/47
Betere <strong>sorteernetwerk</strong>en?<br />
Conjectuur Knuth<br />
grenzen niet te halen met <strong>sorteernetwerk</strong><br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.28/47
Betere <strong>sorteernetwerk</strong>en?<br />
Conjectuur Knuth<br />
grenzen niet te halen met <strong>sorteernetwerk</strong><br />
Sorteernetwerk van Ajtai, e.a. (1983)<br />
diepte Θ(log n) en grootte Θ(n log n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.28/47
Betere <strong>sorteernetwerk</strong>en?<br />
Conjectuur Knuth<br />
grenzen niet te halen met <strong>sorteernetwerk</strong><br />
Sorteernetwerk van Ajtai, e.a. (1983)<br />
diepte Θ(log n) en grootte Θ(n log n)<br />
Sorteernetwerk van Batcher (1968)<br />
diepte Θ(log 2 n) en grootte Θ(n log 2 n)<br />
gebaseerd op verdeel-en-heers strategie<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.28/47
Sorteernetwerk van Batcher<br />
Idee: verdeel-en-heers, mergesort<br />
splits inputrij in twee helften<br />
sorteer elke helft recursief<br />
merge twee gesorteerde deelrijen<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.29/47
Sorteernetwerk van Batcher<br />
Idee: verdeel-en-heers, mergesort<br />
splits inputrij in twee helften<br />
sorteer elke helft recursief<br />
merge twee gesorteerde deelrijen<br />
Probleem<br />
efficiënt mergen in <strong>sorteernetwerk</strong>en?<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.29/47
Sorteernetwerk van Batcher<br />
Idee: verdeel-en-heers, mergesort<br />
splits inputrij in twee helften<br />
sorteer elke helft recursief<br />
merge twee gesorteerde deelrijen<br />
Probleem<br />
efficiënt mergen in <strong>sorteernetwerk</strong>en?<br />
Werkwijze<br />
construeren eerst <strong>sorteernetwerk</strong> voor<br />
speciale rijen, zgn. bitonische rijen<br />
daaruit algemeen <strong>sorteernetwerk</strong> construeren<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.29/47
Bitonisch <strong>sorteernetwerk</strong><br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.30/47
Cyclisch stijgende rij<br />
Onderstelling: n = 2 k<br />
Cyclisch stijgende rij: (a0,...,an−1)<br />
rotatie van gesorteerde rij<br />
∃i zodat (ai,...,an−1,a0,...,ai−1) stijgend<br />
visualiseren op cirkel of in diagram<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.31/47
Cyclisch stijgende rij<br />
Onderstelling: n = 2 k<br />
Cyclisch stijgende rij: (a0,...,an−1)<br />
rotatie van gesorteerde rij<br />
∃i zodat (ai,...,an−1,a0,...,ai−1) stijgend<br />
visualiseren op cirkel of in diagram<br />
Netwerk Dn<br />
vergelijkt ai met a i+n/2, ∀0 ≤ i < n/2<br />
grootte n/2 en diepte 1<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.31/47
Netwerk Dn<br />
Stelling<br />
als input voor Dn cyclisch stijgende rij<br />
zij (b0,...,bn−1) output van Dn<br />
dan zijn (b0,...,b n/2−1) en (b n/2,...,bn−1)<br />
cyclisch stijgend<br />
zodanig dat bi ≤ bj voor 0 ≤ i < n/2 ≤ j < n<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.32/47
Netwerk Dn<br />
Stelling<br />
als input voor Dn cyclisch stijgende rij<br />
zij (b0,...,bn−1) output van Dn<br />
dan zijn (b0,...,b n/2−1) en (b n/2,...,bn−1)<br />
cyclisch stijgend<br />
zodanig dat bi ≤ bj voor 0 ≤ i < n/2 ≤ j < n<br />
Betekenis<br />
Dn splitst cyclisch stijgende rij in twee<br />
cyclisch stijgende deelrijen, die ’onafhankelijk’<br />
zijn<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.32/47
Netwerk Bn<br />
Werkwijze<br />
gebruik Dn om rij op te splitsen<br />
gebruik D n/2 om deelrijen verder te verwerken<br />
enzovoort<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.33/47
Netwerk Bn<br />
Werkwijze<br />
gebruik Dn om rij op te splitsen<br />
gebruik D n/2 om deelrijen verder te verwerken<br />
enzovoort<br />
Stelling<br />
Bn sorteert cyclisch stijgende rijen<br />
diepte is log 2 n en grootte is n log 2 n<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.33/47
Bitonisch sorteren<br />
Bitonische rij<br />
rotatie van rij die eerst stijgt en dan daalt<br />
(a0,...,an−1) bitonisch a.s.a. ∃m,c zodat<br />
am ≤ ... ≤ a(m+c) mod n<br />
a (m+c) mod n ≥ a (m+c+1) mod n ≥ ... ≥ am−1<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.34/47
Bitonisch sorteren<br />
Bitonische rij<br />
rotatie van rij die eerst stijgt en dan daalt<br />
(a0,...,an−1) bitonisch a.s.a. ∃m,c zodat<br />
Stelling<br />
am ≤ ... ≤ a(m+c) mod n<br />
a (m+c) mod n ≥ a (m+c+1) mod n ≥ ... ≥ am−1<br />
Bn sorteert bitonische rijen<br />
in tijd Θ(log n) en werk Θ(n log n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.34/47
Mergen met Bn<br />
Merk op<br />
twee gesorteerde rijen ‘ruggelings’ aan elkaar<br />
schakelen levert bitonische rij<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.35/47
Mergen met Bn<br />
Merk op<br />
twee gesorteerde rijen ‘ruggelings’ aan elkaar<br />
schakelen levert bitonische rij<br />
Merging netwerk Mn<br />
input: twee stijgende rijen van lengte n/2<br />
volgorde van tweede deelrij omkeren<br />
gebruik Bn om rij te sorteren<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.35/47
<strong>Het</strong> <strong>sorteernetwerk</strong> Sn<br />
Werkwijze<br />
input: een rij van lengte n<br />
sorteer eerste helft met een S n/2<br />
sorteer tweede helft met een S n/2<br />
merge deze stijgende deelrijen met een Mn<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.36/47
Complexiteit van Sn<br />
Diepte dn<br />
dn = d n/2 + log 2 n<br />
⇒ dn = Θ(log 2 n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.37/47
Complexiteit van Sn<br />
Diepte dn<br />
dn = d n/2 + log 2 n<br />
⇒ dn = Θ(log 2 n)<br />
Grootte sn<br />
sn = 2s n/2 + n log 2 n<br />
⇒ dn = Θ(n log 2 n)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.37/47
Nul-een-principe<br />
voor <strong>sorteernetwerk</strong>en<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.38/47
Nul-een-principe<br />
Stelling<br />
als <strong>sorteernetwerk</strong> correct werkt op alle<br />
mogelijke 0-1-inputs, dan werkt het ook<br />
correct op alle mogelijke inputs<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.39/47
Nul-een-principe<br />
Stelling<br />
als <strong>sorteernetwerk</strong> correct werkt op alle<br />
mogelijke 0-1-inputs, dan werkt het ook<br />
correct op alle mogelijke inputs<br />
Gevolg<br />
<strong>sorteernetwerk</strong>en verifiëren door enkel<br />
0-1-inputs te testen<br />
dus hoogstens 2 n i.p.v. oneindig veel<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.39/47
Bewijs nul-een-principe<br />
ond. netwerk sorteert alle 0-1-rijen correct<br />
ond. (a0,...,an−1) niet correct gesorteerd<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.40/47
Bewijs nul-een-principe<br />
ond. netwerk sorteert alle 0-1-rijen correct<br />
ond. (a0,...,an−1) niet correct gesorteerd<br />
zij (b0,...,bn−1) output van <strong>sorteernetwerk</strong><br />
dan ∃s < t zodat bs > bt<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.40/47
Bewijs nul-een-principe<br />
ond. netwerk sorteert alle 0-1-rijen correct<br />
ond. (a0,...,an−1) niet correct gesorteerd<br />
zij (b0,...,bn−1) output van <strong>sorteernetwerk</strong><br />
dan ∃s < t zodat bs > bt<br />
labels ℓi = 0 als ai < bs; ℓi = 1 anders<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.40/47
Bewijs nul-een-principe<br />
ond. netwerk sorteert alle 0-1-rijen correct<br />
ond. (a0,...,an−1) niet correct gesorteerd<br />
zij (b0,...,bn−1) output van <strong>sorteernetwerk</strong><br />
dan ∃s < t zodat bs > bt<br />
labels ℓi = 0 als ai < bs; ℓi = 1 anders<br />
er geldt: netwerk (ai) en (ℓi) gelijktijdig laten<br />
sorteren ⇒ elke ai behoudt zijn label<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.40/47
Bewijs nul-een-principe<br />
ond. netwerk sorteert alle 0-1-rijen correct<br />
ond. (a0,...,an−1) niet correct gesorteerd<br />
zij (b0,...,bn−1) output van <strong>sorteernetwerk</strong><br />
dan ∃s < t zodat bs > bt<br />
labels ℓi = 0 als ai < bs; ℓi = 1 anders<br />
er geldt: netwerk (ai) en (ℓi) gelijktijdig laten<br />
sorteren ⇒ elke ai behoudt zijn label<br />
dus: bs heeft label 1 en bt label 0, met s < t<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.40/47
Bewijs nul-een-principe<br />
ond. netwerk sorteert alle 0-1-rijen correct<br />
ond. (a0,...,an−1) niet correct gesorteerd<br />
zij (b0,...,bn−1) output van <strong>sorteernetwerk</strong><br />
dan ∃s < t zodat bs > bt<br />
labels ℓi = 0 als ai < bs; ℓi = 1 anders<br />
er geldt: netwerk (ai) en (ℓi) gelijktijdig laten<br />
sorteren ⇒ elke ai behoudt zijn label<br />
dus: bs heeft label 1 en bt label 0, met s < t<br />
m.a.w. rij labels niet correct gesorteerd<br />
(strijdigheid)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.40/47
Correctheid odd-even-transposition<br />
Stelling<br />
odd-even-transposition <strong>sorteernetwerk</strong><br />
sorteert n inputs in diepte n en grootte Θ(n 2 )<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.41/47
Correctheid odd-even-transposition<br />
Stelling<br />
odd-even-transposition <strong>sorteernetwerk</strong><br />
sorteert n inputs in diepte n en grootte Θ(n 2 )<br />
Bewijs<br />
beschouw willekeurige 0-1-rij (a0,...,an−1)<br />
zij ai eerste nul: ai = 0, en ak = 1, voor k < i<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.41/47
Correctheid odd-even-transposition<br />
Stelling<br />
odd-even-transposition <strong>sorteernetwerk</strong><br />
sorteert n inputs in diepte n en grootte Θ(n 2 )<br />
Bewijs<br />
beschouw willekeurige 0-1-rij (a0,...,an−1)<br />
zij ai eerste nul: ai = 0, en ak = 1, voor k < i<br />
als i oneven, ai begint aan beweging naar<br />
eerste lijn totdat die bereikt<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.41/47
Correctheid odd-even-transposition<br />
Stelling<br />
odd-even-transposition <strong>sorteernetwerk</strong><br />
sorteert n inputs in diepte n en grootte Θ(n 2 )<br />
Bewijs<br />
beschouw willekeurige 0-1-rij (a0,...,an−1)<br />
zij ai eerste nul: ai = 0, en ak = 1, voor k < i<br />
als i oneven, ai begint aan beweging naar<br />
eerste lijn totdat die bereikt<br />
als i even, in eerste laag blijft ai, vanaf<br />
tweede laag beweging naar eerste lijn<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.41/47
Bewijs (vervolg)<br />
3 mogelijke toestanden voor 0 in rij<br />
aangekomen / in beweging<br />
geblokkeerd<br />
ofwel in verkeerde fase<br />
ofwel opgehouden door eerdere 0<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.42/47
Bewijs (vervolg)<br />
3 mogelijke toestanden voor 0 in rij<br />
aangekomen / in beweging<br />
geblokkeerd<br />
ofwel in verkeerde fase<br />
ofwel opgehouden door eerdere 0<br />
er geldt: k-de 0 in rij begint ten laatste in laag<br />
k + 1 te bewegen (bewijs door inductie)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.42/47
Bewijs (vervolg)<br />
3 mogelijke toestanden voor 0 in rij<br />
aangekomen / in beweging<br />
geblokkeerd<br />
ofwel in verkeerde fase<br />
ofwel opgehouden door eerdere 0<br />
er geldt: k-de 0 in rij begint ten laatste in laag<br />
k + 1 te bewegen (bewijs door inductie)<br />
er geldt: k-de 0 is hoogstens n − k posities<br />
verwijderd van uiteindelijke positie<br />
⇒ voldoende lagen beschikbaar<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.42/47
Sorteren op<br />
interconnectienetwerken<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.43/47
Sorteren op rij processoren<br />
Cfr. odd-even-transposition <strong>sorteernetwerk</strong><br />
“comparator” = tussen naburige processoren<br />
Odd-even-transposition sorteeralgoritme<br />
elke processor heeft vlag: even/oneven fase<br />
even fase: werkt samen met rechterbuur<br />
oneven fase: werkt samen met linkerbuur<br />
Complexiteit<br />
sorteert n getallen in lineaire tijd op rij van<br />
n processoren<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.44/47
Bitonisch sorteren op hyperkubus<br />
Werkwijze<br />
label inputlijnen van bitonisch <strong>sorteernetwerk</strong><br />
met 00. . . 0 t.e.m. 11. . . 1<br />
Opmerking<br />
mappen inputlijnen op processoren van<br />
hyperkubus<br />
→ vergelijk&verwissel over verbindingen in<br />
hyperkubus<br />
m.a.w. geen extra communicatie-overhead<br />
voor routing<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.45/47
Shearsort op rooster<br />
Shearsort<br />
twee fasen, telkens herhaald<br />
rijsorteerfase:<br />
sorteren rijen met odd-even-transposition,<br />
afwisselend stijgend en dalend<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.46/47
Shearsort op rooster<br />
Shearsort<br />
twee fasen, telkens herhaald<br />
rijsorteerfase:<br />
sorteren rijen met odd-even-transposition,<br />
afwisselend stijgend en dalend<br />
kolomsorteerfase:<br />
sorteren kolommen met odd-even-transp.,<br />
in stijgende volgorde<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.46/47
Shearsort op rooster<br />
Shearsort<br />
twee fasen, telkens herhaald<br />
rijsorteerfase:<br />
sorteren rijen met odd-even-transposition,<br />
afwisselend stijgend en dalend<br />
kolomsorteerfase:<br />
sorteren kolommen met odd-even-transp.,<br />
in stijgende volgorde<br />
na ⌈log 2 n⌉ + 1 herhalingen is rij gesorteerd<br />
(‘ploegvoren’)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.46/47
Correctheid shearsort<br />
Stelling<br />
shearsort sorteert n 2 inputs in Θ(n log n)<br />
stappen op n × n rooster<br />
Bewijs (0-1-principe <strong>sorteernetwerk</strong>en)<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.47/47
Correctheid shearsort<br />
Stelling<br />
shearsort sorteert n 2 inputs in Θ(n log n)<br />
stappen op n × n rooster<br />
Bewijs (0-1-principe <strong>sorteernetwerk</strong>en)<br />
beschouwen enkel 0-1-inputs<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.47/47
Correctheid shearsort<br />
Stelling<br />
shearsort sorteert n 2 inputs in Θ(n log n)<br />
stappen op n × n rooster<br />
Bewijs (0-1-principe <strong>sorteernetwerk</strong>en)<br />
beschouwen enkel 0-1-inputs<br />
beschouw rijen 2i en 2i + 1 na rijsorteerfase<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.47/47
Correctheid shearsort<br />
Stelling<br />
shearsort sorteert n 2 inputs in Θ(n log n)<br />
stappen op n × n rooster<br />
Bewijs (0-1-principe <strong>sorteernetwerk</strong>en)<br />
beschouwen enkel 0-1-inputs<br />
beschouw rijen 2i en 2i + 1 na rijsorteerfase<br />
geven minstens 1 rij vol 0 of 1 na<br />
kolomsorteerfase, verder niet meer beïnvloed<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.47/47
Correctheid shearsort<br />
Stelling<br />
shearsort sorteert n 2 inputs in Θ(n log n)<br />
stappen op n × n rooster<br />
Bewijs (0-1-principe <strong>sorteernetwerk</strong>en)<br />
beschouwen enkel 0-1-inputs<br />
beschouw rijen 2i en 2i + 1 na rijsorteerfase<br />
geven minstens 1 rij vol 0 of 1 na<br />
kolomsorteerfase, verder niet meer beïnvloed<br />
elke fase halveert # “niet-gesorteerde” rijen<br />
Cursus Algoritmen en Datastructuren III - Parallelle Algoritmen (2008–2009) – p.47/47