13. maj 2000 - 16:36Der 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.
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...
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.
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 ?
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.?
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.
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.
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
Synes godt om
Ny brugerNybegynder
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.