Ich versuche, mein Wissen über Algorithmenanalyse aufzufrischen (und hoffentlich mehr zu lernen). Ich habe vor zwei Jahren einen Kurs dazu gemacht, aber ich versuche, das aufzuholen, was ich damals gelernt habe.
Ich gehe dabei vor, indem ich Übungen aus dem klassischen Text Introduction to Algorithms, 2nd Edition – CLRS mache.
Das Problem, das ich zu lösen versuche, ist folgendes:
Meine Lösung
Die Laufzeit von QUICKSORT, wenn alle Elemente von Array A den gleichen Wert haben, entspricht der Ausführung von QUICKSORT im schlimmsten Fall, da QUICKSORT unabhängig davon, welcher Pivot ausgewählt wird, alle Werte in A durchlaufen muss. Und da alle Werte gleich sind, führt jeder rekursive Aufruf zu einer unausgeglichenen Partitionierung.
Somit wird die Wiederholung sein:
Die obige Wiederholung hat die Lösung (ich werde dies später beweisen):
Daher ist die Laufzeit von QUICKSORT in diesem Fall
Bitte überprüfen Sie, ob ich die Frage richtig beantwortet habe :)
Bitte teilen Sie mir mit, ob diese Frage an anderer Stelle im SE-Netzwerk veröffentlicht werden soll.
Danke!
Jake Clawson
Deine Lösung sieht völlig richtig aus.
Die Antwort hängt davon ab, wie Sie den Drehpunkt auswählen. Wenn Sie dem im CLSR vorhandenen Algorithmus folgen, der immer das letzte Element als Drehpunkt auswählt, würde dies zu der Gleichung führen und daher Andernfalls, wenn Sie jedes Mal das mittlere Element als Drehpunkt auswählen, wird die Gleichung was dazu führen würde .
Nein, die Partitionierungen führen zu perfekt ausbalancierten Subarrays. Tatsächlich sucht der Algorithmus nach dem ersten Element nach links schwenken und nach rechts schwenken und vertauschen. Da alle Elemente gleich (und gleich dem Pivot) sind, werden das Element ganz links und ganz rechts sofort vertauscht. Dies wird so lange fortgesetzt, bis sich die beiden Indizes treffen, was genau in der Mitte der Fall ist.
Justin
Emre
tb
Yuval Filmus
Yai0Phah
Aang