Datastructuren en algoritmen

Voor sorteren op parallelle hardware zoals GPU's worden soms sorteermethoden met een vaste reeks vergelijk-en-verwisselstappen (sorteernetwerken) gebruikt, zoals bitonic sort. Waarom?

  1. AZe doen O(n) vergelijkingen, minder dan de ondergrens O(n log n) voor sorteren op basis van vergelijkingen
  2. BHet zijn stabiele sorteermethoden die elementen met gelijke sleutels in hun oorspronkelijke volgorde houden
  3. CWelke paren elementen worden vergeleken en verwisseld, ligt vooraf vast, onafhankelijk van de waarden van de gegevens; zo kunnen veel threads tegelijk dezelfde stappen uitvoeren, met uniforme vertakkingen
Antwoord en toelichting tonen

Antwoord: C. Welke paren elementen worden vergeleken en verwisseld, ligt vooraf vast, onafhankelijk van de waarden van de gegevens; zo kunnen veel threads tegelijk dezelfde stappen uitvoeren, met uniforme vertakkingen

Bij bitonic sort worden de paren die in elke fase worden vergeleken alleen door hun indexen bepaald, en alle vergelijk-en-verwisselbewerkingen binnen een fase kunnen tegelijk worden uitgevoerd. n = 2ᵏ elementen worden in k(k+1)/2 fasen gesorteerd: 16 elementen vragen 10 fasen en in totaal 80 vergelijkingen, 1024 elementen 55 fasen en 28.160 vergelijkingen. Het totale aantal vergelijkingen is O(n log² n), meer dan bij quicksort en vergelijkbare algoritmen, maar omdat de stappen niet van de gegevens afhangen, voeren apparaten zoals GPU's, waar veel threads dezelfde instructies uitvoeren, ze efficiënt uit zonder uiteenlopende vertakkingen. Geen methode die alleen met vergelijkingen sorteert, kan met minder dan O(n log n) vergelijkingen toe, en bitonic sort is in het algemeen ook niet stabiel.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Datastructuren en algoritmen

  1. Wat is de tijdcomplexiteit van een bewerking die in een array van n elementen elk paar van twee verschillende elementen precies één keer vergelijkt (een dubbele lus die element i vergelijkt met alle elementen erna en i telkens één stap verder zet)?
  2. Een programma met tijdcomplexiteit O(n²) doet er 0,5 seconde over bij 1000 gegevens. Hoeveel seconden duurt het ongeveer bij 4000 gegevens?
  3. Lineair zoeken vergelijkt de elementen van een array met 100 verschillende waarden één voor één vanaf het begin om een gezochte waarde te vinden. De gezochte waarde staat altijd in de array en heeft op elke positie dezelfde kans. Wat is het gemiddelde aantal vergelijkingen?
  4. Welke beschrijving van een gelinkte lijst (een lijst waarin elk element een pointer naar het volgende element bevat) is juist in vergelijking met een array?
  5. Op een lege stack worden achtereenvolgens push 1, push 2, pop, push 3, push 4, pop, pop uitgevoerd. In welke volgorde komen de waarden die pop verwijdert eruit?