Datenstrukturen und Algorithmen

Für das Sortieren auf paralleler Hardware wie GPUs werden manchmal Sortierverfahren mit einer festen Folge von Vergleichs- und Tauschschritten (Sortiernetzwerke) wie Bitonic Sort verwendet. Warum?

  1. ASie kommen mit O(n) Vergleichen aus, weniger als die untere Schranke O(n log n) für vergleichsbasiertes Sortieren
  2. BSie sind stabil und behalten die ursprüngliche Reihenfolge von Elementen mit gleichem Schlüssel bei
  3. CWelche Elementpaare verglichen und vertauscht werden, steht unabhängig von den Datenwerten im Voraus fest; viele Threads können daher gleichzeitig dieselben Schritte ausführen, und die Verzweigungen bleiben einheitlich
Antwort und Erläuterung anzeigen

Antwort: C. Welche Elementpaare verglichen und vertauscht werden, steht unabhängig von den Datenwerten im Voraus fest; viele Threads können daher gleichzeitig dieselben Schritte ausführen, und die Verzweigungen bleiben einheitlich

Bei Bitonic Sort werden die in jeder Stufe verglichenen Paare allein durch ihre Indizes bestimmt, und alle Vergleichs- und Tauschoperationen innerhalb einer Stufe können gleichzeitig laufen. n = 2ᵏ Elemente werden in k(k+1)/2 Stufen sortiert: 16 Elemente brauchen 10 Stufen und insgesamt 80 Vergleiche, 1024 Elemente 55 Stufen und 28.160 Vergleiche. Die Gesamtzahl der Vergleiche ist mit O(n log² n) höher als bei Quicksort und ähnlichen Verfahren; weil die Schritte aber nicht von den Daten abhängen, führen Geräte wie GPUs, auf denen viele Threads dieselben Befehle ausführen, sie ohne divergierende Verzweigungen effizient aus. Kein Verfahren, das allein durch Vergleiche sortiert, kommt mit weniger als O(n log n) Vergleichen aus, und Bitonic Sort ist im Allgemeinen auch nicht stabil.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Datenstrukturen und Algorithmen

  1. Welche Zeitkomplexität hat bei einem Array mit n Elementen ein Verfahren, das jedes Paar zweier verschiedener Elemente genau einmal vergleicht (eine doppelte Schleife, die das i-te Element mit allen dahinterliegenden Elementen vergleicht und i schrittweise erhöht)?
  2. Ein Programm mit der Zeitkomplexität O(n²) benötigt für 1000 Datenelemente 0,5 Sekunden. Wie lange benötigt es etwa für 4000 Datenelemente?
  3. Eine lineare Suche vergleicht die Elemente eines Arrays mit 100 verschiedenen Werten der Reihe nach von vorn, um einen Zielwert zu finden. Der Zielwert ist immer im Array enthalten und steht mit gleicher Wahrscheinlichkeit an jeder Position. Wie viele Vergleiche sind im Mittel nötig?
  4. Welche Aussage beschreibt eine verkettete Liste (eine Liste, in der jedes Element einen Zeiger auf das nächste Element enthält) im Vergleich zu einem Array richtig?
  5. Auf einem leeren Stack werden nacheinander die Operationen push 1, push 2, pop, push 3, push 4, pop, pop ausgeführt. In welcher Reihenfolge werden die Werte durch pop entnommen?