Avatar billede brian0905 Nybegynder
26. juli 2008 - 17:33 Der er 6 kommentarer og
1 løsning

Prekalkulationer, hvilken datastruktur skal jeg bruge?

Hejsa,
Jeg er ved at lave en "lommeregner" til når jeg spiller online poker. Jeg vil gerne tage en given hånd og vægte den mod en tilfældig hånd - eller mod en kendt hånd. Jg vil ikke lave alle beregningerne runtime da jeg helst vil have så stor spredning som muligt (omkring 1.000.000 hænder at teste imod). Da alle kort er kendte giver det en øvre grænse for de kombinationer der skal laves.

Det jeg overvejer er at lave en matrice med alle "hænderne (en hånd består af 2 - 7 kort) på x aksen og de samme hænder på y aksen. Så vil jeg så een gang beregne alle odds og gemme dem i strukturen. Det jeg er lidt i tvivl om er hvilken datastruktur jeg skal bruge, umiddelbart lyder det for mig som et to-dimensionelt array, men er det optimalt? Er der en datastruktur der er hurtigere at tilgå og som er egnet til formålet?

Bedre forslag?
Avatar billede arne_v Ekspert
26. juli 2008 - 17:40 #1
Hvis du har en matrice med alle hænder x alle hænder, så indeholder matricen jo kun
1/0 (eller true/false), fordi udafldet er givet. Odds kommer først ind når du
summerer over en række/kolonne.

Umiddelbart tror jeg ikke på ideen. Antal elementer vil være stort. Hvis du har ret
i at der er en million forskellige hænder og du bruger 1 bit til informationen, så
vil du have brug for 125 GB data.
Avatar billede brian0905 Nybegynder
26. juli 2008 - 18:13 #2
En hånd bliver opbygget gradvist i Poker (Texas Hold'em) til at starte med har man 2 kort. De to kort er private kort og kendes ikke af de andre spillere. Så byder man (byderunde 1) - denne budrunde vil jeg gerne optimere således jeg kan træffe en beslutning på et fornuftigt grundlag. Så bliver der vendt 3 kort som er fælles for alle spillere. Den spiller der har den bedste kombination af 5 kort vinder. Nu byder man igen på baggrund af hvor meget stærke man synes ens kort er. Det er her jeg vil kunne træffe en god beslutning - bedre end min sidste beslutning idet jeg kender flere kort nu. Nu kommer der så et enkelt kort efterfulgt af endnu en budrunde, efterfulgt af det sidste kort (der er nu 5 fælles kort og 2 private kort) og til slut sidste budrunde.

Jeg kan sidde een hånd ud af de 1326 mulige hænder der er, det samme kan min modstander.

Problemet er at jeg ikke helt kan gennemskue hvordan jeg skal modellere de fælles kort, de er jo med til at udgøre en hånd, gradvist... Indledningsvist må man vel lave 1.000.000 (eksempelvis, her kom den 1.000.000 fra) forskellige kombinationer af mine kort (mine 2 som jeg kender + 5 tilfældige) og se hvor mange gange min hånd vil vinde over en helt tilfældig (1.000.000 tilfældige 7 kort , da jeg ikke kender spillerens private kort). Jeg forestiller mig ikke et true/false matrice, da hånden gradvist bygges op. Men mere en matrice der indeholder en procent der afgører i hvor mange spil en given hånd har vundet over en anden (X og Y hånden i min matrice):
Avatar billede brian0905 Nybegynder
26. juli 2008 - 18:15 #3
REttelse: med kombinationer mener jeg spil, dvs, simulere et spil med tilfældige kort og se hvem der vinder
Avatar billede brian0905 Nybegynder
29. juli 2008 - 12:53 #4
Tror det bliver ALT for stort, også for en DB, nu er matematik ikke min stærke side, men jeg forsøgte atregne på det. for at lave antallet af mulige kombinationer af hænder med 5 kort på hånden: 52*51*50*49*48 = 311875200 kombinationer (og det er kun ved 5 kort der er reelt 7 kort i en fuld hånd). Dog begrænses dette tal af at kortenes placering på hånden ikke er betydende, dvs: As Ad (spar es og ruder es) er det samme som (Ad As)... Har ikke helt gennemskuet hvor meget jeg skal dividere med for at komme til det endelige antal kombinationer! der er jo 5 kort på min hånd... tror jeg skipper projektet og udregner det on-the-fly mens jeg spiller :-) giv lige et svar
Avatar billede arne_v Ekspert
29. juli 2008 - 14:56 #5
Jeg ved ikke meget om Poker, men jeg kender statistik.

Perm(m,n) = antal maader m kan udtraekkes af n naar raekkefoelge betyder noget = n!/(n-m)!

Comb(m,n) = antal maader m kan udtraekkes af n naar raekkefoelge IKKE betyder noget = n!/(m!*(n-m)!)
Avatar billede brian0905 Nybegynder
11. august 2008 - 09:20 #6
Takker for svarene, smid lige et svar. Min løsning er at beregne det hver gang, det tager snævert under et sekund - det kan jeg godt leve med.
Avatar billede arne_v Ekspert
12. august 2008 - 01:20 #7
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester