Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gravitar,
31. Mai 2012
Hey, da kennt ja jemand meine Umsetzung für Ansatz 1 sehr genau! Ja stimmt, tatsächlich muss ich den Kartenstapel in Ansatz 1 immer wieder neu aufbauen (über TList.Assign).
In Ansatz 2 (Fisher-Yates) verzichte ich darauf. Schließlich zerstöre ich die Kartenliste ja nicht, sondern greife lediglich über die randomisierte Liste auf die Karten zu.
Die dargestellten Zeiten berücksichtigen diesen...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gravitar,
31. Mai 2012
So,
nachdem ich nun Fisher-Yates als Randomisierung der Karten genutzt habe und nicht mehr Karten aus meiner TList über TList.Delete rauslösche, komme ich zu folgenden Laufzeiten:
50.000.000 Handsimulationen für Texas-Hold'em
Ansatz 1: TList der Karten mit Zufallsziehung einer Karte und TList.Delete = 142,601 sek.
Ansatz 2: Randomisieren einer Liste mit 52 Nummern und Ziehung
der...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gravitar,
30. Mai 2012
Mhm,:gruebel: stimmt. Die Funktion TList.Delete scheint wirklich das Element zu löschen und die anderen Elemente aufrücken zu lassen. Ich dachte immer, dass das Löschen über eine verkettete Liste und "umbiegen" von 2 Pointern realisiert würde.
Ich probiere mal Fisher-Yates aus (einmal eine TList von 52 Elementen durcheinandermischen und danach dann stumpf die ersten n Karten nach dieser TList...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Gravitar,
29. Mai 2012
Hi,
habe das Thema für mein Poker-Wahrscheinlichkeitsrechner inzwischen sehr performant umgesetzt:
1. Mischen ist nicht notwendig und kostet nur Zeit
2. Lege dir eine Liste vom Typ TCard an (Record Value u. Farbe)
3. Wähle aus der Liste per Zufall eine Karte aus und verteile sie an den Spieler
4. Danach löscht Du diese Karte aus der Liste
Dadurch musst du nicht jedesmal prüfen, ob die...