AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer-Problem

Ein Thema von stahli · begonnen am 26. Jan 2012 · letzter Beitrag vom 26. Jan 2012
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#11

AW: Pointer-Problem

  Alt 26. Jan 2012, 22:08
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

AW: Pointer-Problem

  Alt 26. Jan 2012, 23:01
Wiki mein Quicksort sei ein "nicht-stabiler Sortieralgorithmus".
Somit hast du deinen Zufall sowieso schon automatisch integriert.


stabil = gleich Werte bleiben in der Reihenfolge, wie sie vor der Sortierung schon war.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Pointer-Problem

  Alt 26. Jan 2012, 23:16
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).
Miniaturansicht angehängter Grafiken
kosort.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#14

AW: Pointer-Problem

  Alt 26. Jan 2012, 23:28
Wiki mein Quicksort sei ein "nicht-stabiler Sortieralgorithmus".
Somit hast du deinen Zufall sowieso schon automatisch integriert.
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).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#15

AW: Pointer-Problem

  Alt 26. Jan 2012, 23:35
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
$2B or not $2B

Geändert von himitsu (26. Jan 2012 um 23:39 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz