Avatar billede dp2001 Juniormester
29. maj 2007 - 16:15 Der er 4 kommentarer

Hvordan finder jeg alle mulige kombinationer?

OK, denne her kräver lidt matematik-hjerne (hvilket jeg ikke altid har)....

Jeg spiller hver uge et lille oddssystem, der hedder 1-3-4, dvs. jeg välger 1 sikker, 3 halvsikre og 4 chancer.

Hvis blot en i hver kategori holder, er der gevinst, idet jeg spiller fölgende räkker:

S,H1,C1
S,H1,C2
S,H1,C3
S,H1,C4
S,H2,C1
S,H2,C2
S,H2,C3
S,H2,C4
S,H3,C1
S,H3,C2
S,H3,C3
S,H3,C4

Jeg kan beregne mig frem til, at der er 12 räkker, idet:

1/1 sikker (binomialt) = 1 kombination
gange
1/3 halvsikre (binomialt) = 3 kombinationer
gange
1/4 chancer (binomialt) = 4 kombinationer.

--> Så 12 räkker.

Jeg går imidlertid med tanker om at spille andre systemer. Lad os forestille os, at jeg vil spille 1-3-5, men jeg vil have at mindst 2 af chancerne skal holde.

Det vil give

1/1 sikker (binomialt) = 1 kombination
gange
1/3 halvsikre (binomialt) = 3 kombinationer
gange
2/5 chancer (binomialt) = 10 kombinationer.

--> 30 räkker.

Jeg önsker at finde alle kombinationer, hvilket lige pludselig ikke er så ligetil. Jeg kan pröve at göre det manuelt her:

S,H1,C1,C2
S,H1,C1,C3
S,H1,C1,C4
S,H1,C1,C5
S,H1,C2,C3
S,H1,C2,C4
S,H1,C2,C5
S,H1,C3,C4
S,H1,C3,C5
S,H1,C4,C5
S,H2,C1,C2
S,H2,C1,C3
S,H2,C1,C4
S,H2,C1,C5
S,H2,C2,C3
S,H2,C2,C4
S,H2,C2,C5
S,H2,C3,C4
S,H2,C3,C5
S,H2,C4,C5
S,H3,C1,C2
S,H3,C1,C3
S,H3,C1,C4
S,H3,C1,C5
S,H3,C2,C3
S,H3,C2,C4
S,H3,C2,C5
S,H3,C3,C4
S,H3,C3,C5
S,H3,C4,C5

Kort og godt mangler jeg en lösning, der smertefrit kan give mig alle kombinationer - uanset system.

Jeg har alle (kamp)data, gruppering (S/H/C) mv. som variabler i et array allerede - og jeg ved derudover fölgende:

$s = antal sikre (1 i mit seneste eksempel)
$s_h = hvor mange af de sikre, der skal spilles af gangen (1 i mit seneste eksempel)
$binomial_fordeling_for_sikre: 1 kombination

$h = antal halvchancer (3 i mit seneste eksempel)
$h_h = hvor mange af de halvsikre, der skal spilles af gangen (1 i mit seneste eksempel)
$binomial_fordeling_for_halvsikre: 3 kombinationer

$c = antal halvchancer (5 i mit seneste eksempel)
$c_h = hvor mange af de halvsikre, der skal spilles af gangen (2 i mit seneste eksempel)
$binomial_fordeling_for_chancer: 10 kombinationer

så jeg ved, at der er 1*3*10 kombinationer = 30 (räkker).

og jeg ved, at der er 4 (kampe) per räkke.

og jeg ved, at der er 9 kampe i alt i dette tilfälde.

men hvordan og hvorledes?

jeg har allerede en funktion til at finde binomiale coefficienter:

<?php
  // calculate binomial coefficient
  function binomial_coeff($n, $k) {

      $j = $res = 1;

      if($k < 0 || $k > $n)
        return 0;
      if(($n - $k) < $k)
        $k = $n - $k;

      while($j <= $k) {
        $res *= $n--;
        $res /= $j++;
      }

      return $res;

  }
?>
Avatar billede roenving Novice
29. maj 2007 - 16:39 #1
Check først om der skal tages flere fra en gruppe, og generer derefter de resulterende kombinationer ...

Derefter kan du tage resultaterne og kombinere dem ...

Nu bruger du nøjagtig to i den ene gruppe, har du tænkt dig at udvide det tal på et tidspunkt ?-)

-- men ellers bliver det noget i denne henretning (jeg er ikke php'er, så bare principperne !-)

if($s_h==2){
  //indsæt generér 2-ting
}else{
  $s1 = $s;
}

if($h_h==2){
  //indsæt generér 2-ting
}else{
  $h1 = $h;
}

if($c_h==2){
  //Generér 2-ting
  $c1 = [];//ved ikke om man kan bruge den slags shortcut i php
  for($i=0,$im=$c.length-2;$im>$i;i++){
    for($j=$i+1,$jm=$c.length-1;$jm>$j;j++){
      $c1 = $c[$i] . "," . $c[$j];
    }
  }
}else{
  $c1 = $c;
}

$res = [];
for($i=0,$im=$s1.length;$im>$i;i++){
  for($j=0,$jm=$h1.length;$jm>$j;j++){
    for($k=0,$km=$c1.length;$km>$k;k++){
      $res = $s[$i] . "," . $h[$j] . "," . $c[$k];
    }
  }
}

-- som det fremgår er det absolut ikke testet og kun lavet for at du kan fornemme principperne !o]
Avatar billede dp2001 Juniormester
29. maj 2007 - 17:48 #2
De nävnte systemer er blot eksempler, så det duer desvärre ikke at hardcode noget som helst (f.eks. tester du, at s_h == 2) - ALT skal väre drevet af variabler.
Avatar billede bauerdata Nybegynder
29. maj 2007 - 19:30 #3
#!/usr/bin/env python
a = [ "S" ]
b = [ "H1", "H2", "H3" ]
c = [ "C1", "C2", "C3", "C4" ]
d = [ "C2", "C3", "C4", "C5" ]
i = 0
for w,x,y,z in [ (w, x, y, z) for w in a for x in b for y in c for z in d if y < z] :
    i += 1
    print "%(i)2d :  %(w)s, %(x)s, %(y)s, %(z)s" % vars()
Avatar billede dp2001 Juniormester
29. maj 2007 - 22:15 #4
hmmm...... og i php?
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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