www.wikidata.de-de.nina.az
Quickselect englisch quick deutsch schnell und to select auswahlen ist ein Auswahlverfahren aus der Informatik um das k kleinste Element in einer ungeordneten Liste zu finden Es bezieht sich auf den Quicksort Sortieralgorithmus Wie Quicksort wurde es von Tony Hoare entwickelt und ist daher auch als Hoare Auswahlalgorithmus bekannt 1 Wie Quicksort ist es in der Praxis effizient und hat einen guten Average Case jedoch auch eine schlechte Leistung im Worst Case Quickselect und seine Varianten sind die am haufigsten verwendeten Selektionsalgorithmen in effizienten Implementierungen in der Praxis Animierte Visualisierung des Quickselect Algorithmus Auswahl des 22 kleinsten Wertes Quickselect verwendet den gleichen Gesamtansatz wie Quicksort wahlt ein Element als Pivot und teilt die Daten in zwei Teile basierend auf dem Pivot entsprechend kleiner oder grosser als der Pivot Anstatt jedoch wie bei Quicksort in beide Seiten zuruckzukehren kehrt die Schnellauswahl nur in eine Seite zuruck die Seite mit dem gesuchten Element Dies reduziert die durchschnittliche Komplexitat von O n log n displaystyle mathcal O n log n auf O n displaystyle mathcal O n mit einem Worst Case von O n 2 displaystyle mathcal O n 2 Wie bei Quicksort ist die Schnellauswahl im Allgemeinen als In Place Algorithmus implementiert und uber die Auswahl des k ten Elements hinaus sortiert sie die Daten teilweise auch Prinzip BearbeitenIn Quicksort gibt es eine Unterprozedur namens partition die in linearer Zeit eine Liste von links nach rechts in zwei Teile gruppieren kann diejenigen die kleiner als ein bestimmtes Element sind und solche die grosser als oder gleich dem Element sind Hier ist Pseudocode der eine Partition uber die Elementliste pivotIndex ausfuhrt Funktion partition Liste links rechts pivotIndex pivotWert Liste pivotIndex swap Liste pivotIndex und Liste rechts Pivot ans Ende verschieben speicherIndex links fur i von links bis rechts 1 falls Liste i lt pivotWert swap Liste speicherIndex und Liste i inkrementiere speicherIndex swap Liste rechts und Liste speicherIndex Pivot an die finale Stelle verschieben return speicherIndex Dies ist bekannt als das Lomuto Partitionsschema das einfacher aber weniger effizient ist als das ursprungliche Partitionsschema von Hoare In Quicksort sortieren wir beide Zweige rekursiv was zu einer optimalen O n log n displaystyle mathcal O n log n nbsp Zeit fuhrt Bei der Auswahl wissen wir jedoch bereits in welcher Partition sich unser gewunschtes Element befindet da sich der Pivot in seiner endgultigen sortierten Position befindet mit allen die ihm in einer unsortierten Reihenfolge vorausgehen und allen die ihm in einer unsortierten Reihenfolge folgen Daher findet ein einziger rekursiver Aufruf das gewunschte Element in der richtigen Partition und darauf aufbauend entsteht der Quickselect Algorithmus Gibt das k kleinste Element der Liste zuruck inklusive Rechts Linkselement z B links lt k lt rechts Der Speicherbedarf des Datenfelds der Suche andert sich mit jeder Rund aber die Liste behalt immer die gleiche Grosse Deswegen muss der Wert k nicht jede Runde aktualisiert werden Funktion auswahlen Liste links rechts k falls links rechts falls Liste nur ein Element enthalt return Liste links return dieses Element pivotIndex Auswahl eines Pivotelements zwischen links und rechts z B links floor rand rechts links 1 pivotIndex partition Liste links rechts pivotIndex Pivot in seiner endgultigen sortierten Position falls k pivotIndex return Liste k sonst falls k lt pivotIndex return auswahlen Liste links pivotIndex 1 k sonst return auswahlen Liste pivotIndex 1 rechts k Beachten Sie die Ahnlichkeit mit Quicksort So wie der minimal basierte Selectionsort ein Teilselectionsort ist so ist dies eine Teilquicksort bei der nur O log n displaystyle mathcal O log n nbsp seiner O n displaystyle mathcal O n nbsp Partitionen erzeugt und partitioniert wird Dieses einfache Verfahren hat eine erwartete lineare Laufzeit und wie Quicksort in der Praxis eine recht gute Leistung Es ist auch ein In Place Algorithmus der nur konstanten Speicher Overhead erfordert wenn die Endrekursionsoptimierung verfugbar ist oder wenn die Endrekursion mit einer Schleife eliminiert wird Funktion auswahlen Liste links rechts k loop falls links rechts return Liste links pivotIndex Auswahl PivotIndex zwischen links und rechts pivotIndex partition Liste links rechts pivotIndex falls k pivotIndex return Liste k sonst falls k lt pivotIndex rechts pivotIndex 1 sonst links pivotIndex 1Zeitkomplexitat BearbeitenWie Quicksort hat auch der Quickselect eine gute durchschnittliche Leistung ist aber empfindlich gegenuber dem gewahlten Pivot Wenn gute Pivots gewahlt werden d h solche die den Suchsatz konsequent um einen bestimmten Bruchteil verringern dann nimmt der Suchsatz exponentiell ab und durch Induktion oder Summierung der geometrischen Reihen sieht man dass die Leistung linear ist da jeder Schritt linear ist und die Gesamtzeit eine konstante Zeit ist abhangig davon wie schnell sich der Suchsatz verringert Wenn jedoch konsequent schlechte Pivots gewahlt werden wie z B die Verringerung um jeweils nur ein einziges Element dann ist die Worst Case Performance quadratisch O n 2 displaystyle mathcal O n 2 nbsp Dies geschieht z B bei der Suche nach dem maximalen Element einer Menge wobei das erste Element als Pivot verwendet wird und die Daten sortiert werden Einzelnachweise Bearbeiten C A R Hoare Algorithm 65 find Hrsg Communications of the ACM Volume 4 Issue 7 Juli 1961 S 321 322 acm org Abgerufen von https de wikipedia org w index php title Quickselect amp oldid 240804679