Pivotwahl bei Quicksort und Quickselect?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Es gibt verschiedene Quicksorts - zum Stack greift man bei nicht rekursiver Variante. Swaps macht man allgemein bei Sortierung inplace.

Soweit so gut erstmal.

Im besten Fall teilt Dein Pivot die Eingabemenge beim Paritionieren in zwei gleich große Teilarrays, das sichert Dir die minimale Rekursionstiefe zu. (kürzeste Laufzeit).

----

Du sollst jetzt im Prinzip die Wahrscheinlichkeit dafür berechnen, daß Deine Pivotwahl einen Split erzeugt, der nicht schlechter als 1/4 zu 3/4 ist, heißt das größere Array soll nicht größer als 3/4 der Elemente sein, das kleinere nicht kleiner als 1/4 der Elemente.

Das ist also ein rein stochastische Ding - Ziehe ich uniform ein Element, beträgt die Wahrscheinlichkeit dafür, daß es zwischen 1/4 und 3/4 liegt 0.5. Das gilt auch für jedes der 7 Elemente jeweils. Jetzt bleibt die Frage, wie groß ist die Wahrscheinlichkeit, daß genau das 4. kleinste der 7 im gewünschten Intervall ist? (Also im Prinzip das mittlere)

-----

⌈(links+rechts)/2⌉ - es sei links =n und rechts = n+6 - eien Folge der Länge 7. es ist n+n+6=(2n+6)/2=n+3- also das 4. und somit mittlere Element der Folge.

dort packst Du natürlich das kleinste aller Elemente hin (oder das größte, denn dann entsteht beim pivotieren ein Array der Größe n-1 sowie ein leeres.


KarlRanseierIII  26.10.2019, 01:23
 0   1   2  3  4   5   6

n+6 n+4 n+2 n n+1 n+3 n+5

Natürlich muß das nicht n +1, n+2 usw. sein, sondern es reicht, wenn die Ordnung gewahrt bleibt, also Mitte kleinste Element, rechts daneben das zweitkleinste, dann links das drittkleinste usw. .

Natürlich klappt es genauso gut, wenn das größte, das zweitgrößte ... genommen wird.

Der Grund für die Anordnung ist ceil(), also das Aufrunden.

1
KarlRanseierIII  26.10.2019, 02:58
@KarlRanseierIII

Nochmal zu 1 a) ein Gedanke:

Das mittlere der 7 Elemente liegt genau dann im Intervall, wenn nicht 4 oder mehr Elemente unterhalb des Intervalls liegen, oder wenn nicht 4 oder mehr Elemente oberhalb des Intervalls liegen.

1
Jensek81 
Fragesteller
 27.10.2019, 16:08
@KarlRanseierIII

Danke für die Antwort KarlRansereiIII.

Eine Frage noch zur 1a).

Wenn ich dich richtig versteh, gibt es also 3 zu betrachtende Intervalle bei reinzufälliger Wahl eines Elements

1) Element ist kleiner als Intervall (0, 1/4)

2) Element liegt genau dazwischen ((1/4 + 1), 3/4)

3) Element ist größer als Intervall (3/4, n)

Wir betrachten nun, dass 4 oder mehr Intervalle oberhalb des Intervalls liegen, d.h.

k = 4,5,6,7.

Könnte man dann nicht einfach die Binominalverteilung über dieses Ereignisse bilden, aufsummieren und die Gegenwahrscheinlichkeit bilden.

D.h. (n über k) * p^k * (1 - p)^n-k ? aufsummiert für k = 4 bis 7?

Weil wir den Hinweis bekommen haben, P (falsches Intervall) und P (beide im falschen Intervall) zu berechnen. Die gesuchte Lösung wäre dann 1 - P (Beide im falschen Intervall). Mich verwirrt dieses beide im falschen Intervall. Warum beide? Wir wählen doch nur ein zufälliges Element.

0
KarlRanseierIII  27.10.2019, 16:35
@Jensek81

Ja, mir war heute morgen nachm Aufstehen auch noch etwas dazu durch den Kopf gegangen ...

Es fühlt sich definitiv binomial an, das wäre auch die Richtung in die ich gehen würde. Die Frage ist halt genau das richtige zu ermitteln.

gehen wir es mal durch: Es können 6 von sieben außerhalb unseres mittleren Intervalls liegen, das mittlere Element könnte aber immernoch im Intervall oder außerhalb liegen.

Wenn meine Elemente aber sortiert sind und ich das 4. ziehe, aber mindestens 4 Elemente unterhalb von 1/4 n liegen, dann weiß ich, daß mein gezogenes Element außerhalb meines Wunschintervalls liegt. Ebenso bezüglich des anderen Intervalls (also oberhalb).

Wenn ich jetzt aber von dieser (jeweiligen) Wahrscheinlichkeit die Gegenwahrscheinlichkeit bilde, wäre das aber nicht mehr auf mein Wunschintervall beschränkt. (Ich will ja schließlich Element 4 liegt nich oberhalb und nicht unterhalb).

Ich frage mich was mit:

P (beide im falschen Intervall)

gemeint sein soll.

1
Jensek81 
Fragesteller
 27.10.2019, 16:49
@KarlRanseierIII

Vielleicht, wenn man beide Seiten getrennt betrachtet. Also einmal das Szenario dass die kleinsten 4 in das größte Intervall fallen, oder den ungekehrten Fal, dass die 4 größten in das kleinste Intervall fallen.

Unser Tutor hat uns zudem verraten, dass die Lösung wohl 85,88 % sein soll.

Darauf würde ich mit der binominalverteilung auch kommen, d.h.

Summe von k = 4 bis 7: (7 über k) * 1/4^k * 3/4^(7-k) = 0,0706

Jetzt dieser komische Zwischenschritt, den ich nicht verstehe:

2 * 0,0706 = 0,1412

Naja, und dann eben über die Gegenwahrscheinlichkeit: 1 - 0,1412 = 85,88 %

Diese 2 * 0,0706 ("Beide im falschen Intervall") verwirrt mich. :/

0
KarlRanseierIII  27.10.2019, 17:03
@Jensek81

Also, nochmal:

Wenn mindestens 4 Elemente von 7 unterhalb 1/4 n liegen, dann liegt das mittlere der 7 unterhalb des Intervalls, in dem liegen sollte, wenn alles gut ist.

Das ist, ohne es jetzt gegenzurechnen laut Deiner Aussage: 0.0706.

Oder aber 4 oder mehr Elemente liegen Oberhalb 3/4, das ist nun ebenso 0.0706.

Die Wahrscheinlichkeit, daß also das eine ungünstige Ereignis eintritt, ODER das andere wäre die Summe, also 2*0.0706. Die Gegenwahrscheinlichkeit, also 1-2*0.0706 wäre demnach die Wahrscheinlichkeit für unseren günstigen Fall.

Beide ungünstigen Fälle sind disjunkt - das ist wichtig.

1
Jensek81 
Fragesteller
 27.10.2019, 17:07
@KarlRanseierIII

Ok vielen Dank, KarlRansereiIII. Das war genau das, was mir bisher unklar war. EInen schönen Abend noch :)

0