Avatar billede nwk Nybegynder
13. maj 2000 - 16:36 Der er 7 kommentarer og
1 løsning

kombinatorik i java

Hej

Jeg sidder og er igang med at lave et spil (en football Manager).
Jeg skal have en turnering 12 hold,
alle hold skal spille mod hinanden én gang. Dvs. der skal afvikles 22 runder hver indeholdene 6 kampe. dvs. ialt 6*22 = 132 kampe.(Dem har jeg beregnet)
I hver runde skal alle hold i kamp, dvs. et hold må kun optræde én gang i en runde og en kamp må ikke gå igen i flere runder.

Hvordan får jeg sorteret de 132 kampe på 22 runder med 6 kampe i hver?

PS jeg er klar over at man evt. skal lave en algoritme, dette har jeg endnu ikke modtaget undervisning i, så hvis nogen kan hjælpe.

pps det fungerer hvis man først laver samtlige mulige rundekombinationer med 6 kampe og dereftersorterer dem fra hvis hold eller kampe går igang.
Problemet ved denne metode er at beregningen af samtlige mulige rundekombinationer osv. tager flere timer for computeren når man er oppe på 12 hold i en turningen,hvilket bestemt ikke er holdbart i et spil.

Avatar billede nwk Nybegynder
13. maj 2000 - 16:43 #1
Jeg prøver lige at gøre første del af pps mere forståelig.

pss det fungerer hvis man først opretter samtlige mulige rundekombinationer med 6 kampe, og derefter frasorterer med sammenligningsmetoder der undersøger om de opfylder opfylder de ovenfor nævnte betingelser ...osv Problemet ved denne...
Avatar billede gnarf Nybegynder
15. maj 2000 - 11:01 #2
Er det vigtigt at fordelingen af kampene bliver forskellig fra gang til gang ???

Hvad hvis du nu gemte resultatet af samtlige kombinationer, i et 12x22 array, og angav ud for hvert hold, hvilket af de 11 andre hold de skal møde.

Hold 1: [2][1],[3][2]
Hold 2: [1][1],[5][2]
Hold 3: [4][1],[1][2]
Hold 4: [3][1],[6][2]
Hold 5: [6][1],[2][2]
Hold 6: [5][1],[4][2]
osv...

Hold 1 skal altså møde Hold 2 i første kamp, derefter skal Hold 1 møde Hold 3 i anden kamp, osv.

Herved skal du bare gemme hvilken runde du er nået til, og du kan så slå op og se hvem der skal møde hvem.

Ulempen ved ovenstående løsning er selvfølgelig at Hold altid møder Hold 2 i første runde, men det er måske heller ikke det store problem. En hurtig løsning på det kunne være at rode holdene lidt rundt, inden du tildeler dem deres nummer.

Ikke nogen smart algoritmeløsning eller noget, men et statisk array, som burde klare tingene for dig.
Avatar billede nwk Nybegynder
15. maj 2000 - 15:17 #3
Hej Gnarf

Nej det er ikke vigtigt at fordelingen af kampene bliver forskellig fragang til gang, det kan, som du selv nævner løses med at rode lidt rundt i holdene fra gang til gang.

MEN!

hvordan kommer du frem til kombinationen om at , hold-2 møder hold-5 netop kommer i 2. runde. osv ?
Avatar billede nwk Nybegynder
15. maj 2000 - 15:32 #4
Lige et eksempel på mit problem

lad os antage for overskuelighedens skyld der kun er 6 hold.

vi prøver at kombinere

1.runde

1-2  3-4  5-6

2.runde

1-3  2-4  (5-6)?

første runde går let nok
2.runde. 1 spiller mod 3 ok, hvad er ikke spillet og muligt i anden kamp . 2-4
OK men hvad så? 5-6 i tredje kamp, men den er allerede spillet i runde 1.?
Avatar billede gnarf Nybegynder
15. maj 2000 - 15:48 #5
Jeg gættede bare løs (på at hold 2 møder hold 5)...det lød som om at du godt kunne finde en metode til at løse problemet, den tog bare for lang tid.

Så du kunne lade et program gøre det en gang for alle, og så gemme informationerne statisk bagefter. Så behøver dit program kun lave den timelange udregning en gang.

Måske skulle du lade et andet program generere det der array, og så skrive det i en fil. Dit spil kunne så loade denne fil ind, og har derved en metode til at lade 12 hold spille mod hinanden.

Med hensyn til at skrive et object i en fil, så er java's indbyggede serialization rimelig stærkt.
Avatar billede gnarf Nybegynder
15. maj 2000 - 15:52 #6
1-2, 3-4, 5-6
1-3, 2-6, 4-5
1-4, 2-5, 3-6
1-5, 2-3, 4-6

Det var de første 5 runder, så skal de bare spille mod hinanden på "udebane"

Det bliver klart mere kompliceret med 12 hold, men da du sagde du godt kunne finde en løsning, så synes jeg du skal generere den (selvom det tager nogle timer for computeren) og så ligger du bare løsningen ind i et program, og (mis)bruger den fremover.
Avatar billede gnarf Nybegynder
15. maj 2000 - 15:54 #7
Ooops,

manglede lige en runde:
1-6, 2-4, 3-5
Avatar billede nwk Nybegynder
15. maj 2000 - 16:12 #8
Okay Gnarf

Det går netop ikke med gætteriet når det drejer sig om tolv hold.

Desuden er det svært at få java til bare at gætte løs  og så prøve forfra når den ikke holder. Her e vi ifølge min vejleder ude i at skulle have fat i noget algoritme-sjov.

Til trod for du ikke løste mit problem,  så kal du alligevel have pointene for din deltagelse i mit lille problem.

M.V.H
nwk

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
Kurser inden for grundlæggende programmering

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