03.07.2013 Views

Het sorteernetwerk

Het sorteernetwerk

Het sorteernetwerk

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!