Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Pointer-Problem (https://www.delphipraxis.net/166023-pointer-problem.html)

Uwe Raabe 26. Jan 2012 21:08

AW: Pointer-Problem
 
TList.Sort ruft intern einen Quicksort aufruft und der braucht (wie eigentlich jeder Sort) eine stabile Vergleichsmethode über die gesamte Datenmenge. D.h. wenn A < B und B < C ist, dann muss auch A < C sein. Mit dem Random im Comparer ist das aber nicht garantiert.

Du kannst natürlich das Random vor dem Sort verwenden um eine gewisse Zufälligkeit zu erreichen. Während des Sorts sind Zufälle aber nicht erlaubt.

himitsu 26. Jan 2012 22:01

AW: Pointer-Problem
 
Wiki mein Quicksort sei ein "nicht-stabiler Sortieralgorithmus".
Somit hast du deinen Zufall sowieso schon automatisch integriert. :angle2:


stabil = gleich Werte bleiben in der Reihenfolge, wie sie vor der Sortierung schon war.

stahli 26. Jan 2012 22:16

AW: Pointer-Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ok, dank an alle. Ich habe jetzt eine funktionierende Lösung.

@himi
Wenn alle Einträge den gleichen Rang haben (Result = 0 ist), dann war in meinem Versuch der erste und letzte Eintrag (sowie ein weiteres Item) immer an der gleichen Stelle. Die anderen Positionen wechselten.
Das reichte mir nicht zum Verwürfeln der Reihenfolge, da ich das zum Losen von Spielern brauche.

Ich hatte gedacht/gehofft, dass Sort so eine Zufallsmanipulation schon irgendwie toleriert. Ist halt dann nicht so - gut zu wissen.

"Nicht stabil" würde ich daher eher so interpretieren, dass eine bestimmte Reihenfolge nicht gesichert ist (aber auch keine zufällige Umsortierung erfolgt).

BUG 26. Jan 2012 22:28

AW: Pointer-Problem
 
Zitat:

Zitat von himitsu (Beitrag 1147858)
Wiki mein Quicksort sei ein "nicht-stabiler Sortieralgorithmus".
Somit hast du deinen Zufall sowieso schon automatisch integriert. :angle2:

Auch wenn es ein Scherz war, so kann man das nicht stehen lassen:
Die Sortierung ist ja trotzdem deterministisch und nur von der Eingabe abhängig (nicht noch von irgendwelchen anderen (pseudo-)zufälligen Bedingungen).

himitsu 26. Jan 2012 22:35

AW: Pointer-Problem
 
Darum hab ich auch nur die Erklärung für "stabil" geschrieben.
Für "nicht stabil" gibt es keine definierte Reihenfolge/Erklärung, abgesehn von dem "nicht".


Für deinen Fall gibt es zwei/drei Lösungen.
- vor dem Sortieren bei allen Elementen einen Zufallswert hinterlegen, welcher im Gleichheitsfall genommen wird (somit ändert sich dieses nicht mehr, wärend des sortierens)
- wärend des Sortierens jedem Element einen Zufallswert verpassen, aber diesen speichern, damit bei der nächsten Abfrage des elementes sein Zufallswert sich nicht ändert (hier brauch man auch nur den Elementen etwas zurodnen und speichern, welche mal mit Gleichheit aufgefallen sind)

- vorher einmal gut durchmischen


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz