Volgorde
Re: Volgorde
Je kiest willekeurig 4 letters uit die 9?
Re: Volgorde
Ja, maar het "probleem" zit hem er in dat je meerdere dezelfde letters hebt! Als je 9 verschillende letters hebt krijg je gewoon 9x8x7x6 = 3024 verschillende "woorden"SafeX schreef:Je kiest willekeurig 4 letters uit die 9?
Maar nu heb je dus te maken met meerdere dezelfde letters. Zo komt AAAB er 6 maal in voor.
Re: Volgorde
Alle mog nagaan, zoals bv 2 dezelfde en 2 versch letters.
Re: Volgorde
Dat dacht ik al! dat deed ik altijd al, maar vroeg me af of er niet een snellere manier voor was, bedankt trouwens!
Re: Volgorde
Maar zorgvuldig: jouw vb:
Achtereenvolgens: mog om A te kiezen, mog om B ..., mog om te rangschikken.
Achtereenvolgens: mog om A te kiezen, mog om B ..., mog om te rangschikken.
Re: Volgorde
Er is volgens mij wel een snellere methode maar hij zit diep.
Je verdeelt zonder rekening te houden met het aantal van letters de "combinaties".
De volgende combinaties zijn dan mogelijk:
(4,0,0) = Alle 4 zijn dezelfde letter en de andere 2 letters zijn er niet.
(3,1,0) = 1 letter 3 maal en 1 letter 1 maal en 1 letter niet.
(2,2,0) = 2 letters zijn dubbel en 1 letter niet.
(2,1,1) = 1 letter dubbel en van de andere ieder een.
Het aantal lettercombinaties is dan:
Het aantal mogelijkheden met letters en combinaties is dan
Als vb werk ik de combinatie van (3,1,0) uit.
(aaab,aaac,cccb,ccca)
(1112,1121,1211,2111)
Er zijn dus 4*4 =16 mogelijkheden om 4 letters te rangschikken waarbij je 1 letter 3x gebruikt en een andere letter 1x. (aaab,aaba,abaa,baaa,aaac,aaca,acaa,caaa,cccb,ccbc,cbcc,bccc,ccca,ccac,cacc,accc)
De andere mag je zelf doen!
Anoniem
Je verdeelt zonder rekening te houden met het aantal van letters de "combinaties".
De volgende combinaties zijn dan mogelijk:
(4,0,0) = Alle 4 zijn dezelfde letter en de andere 2 letters zijn er niet.
(3,1,0) = 1 letter 3 maal en 1 letter 1 maal en 1 letter niet.
(2,2,0) = 2 letters zijn dubbel en 1 letter niet.
(2,1,1) = 1 letter dubbel en van de andere ieder een.
Het aantal lettercombinaties is dan:
Het aantal mogelijkheden met letters en combinaties is dan
Als vb werk ik de combinatie van (3,1,0) uit.
(aaab,aaac,cccb,ccca)
(1112,1121,1211,2111)
Er zijn dus 4*4 =16 mogelijkheden om 4 letters te rangschikken waarbij je 1 letter 3x gebruikt en een andere letter 1x. (aaab,aaba,abaa,baaa,aaac,aaca,acaa,caaa,cccb,ccbc,cbcc,bccc,ccca,ccac,cacc,accc)
De andere mag je zelf doen!
Anoniem
Re: Volgorde
Als je van programmeren houdt is er een eenvoudige oplossing:
De functie A is afhankelijk van
n = aantal te gebruiken letters
a = aantal A's dat beschikbaar is
b = aantal B's dat beschikbaar is
c = aantal C's dat beschikbaar is
en geeft terug het resultaat r = het gevraagde aantal woorden.
De functie zet eerst het resultaat op nul.
Indien er 1 plaats is (ALS(n==1)) is het aantal mogelijkheden gelijk aan het aantal letters dat nog beschikbaar is,
anders, indien er dus meerdere plaatsen in te vullen zijn zijn, kijken we voor elke letter of die nog beschikbaar is, en zo ja, dan tellen we met behulp van de functie A zelf nog het aantal mogelijkheden voor de rest van het woord (n-1 plaatsen beschikbaar, de betreffende letter - 1 omdat we die gebruikt hebben).
Als ik de functie aanroep met A(4,3,1,4) krijg ik als resultaat r=71.
Natuurlijk is deze methode nogal resultaat gericht en geeft het minder wiskundig inzicht, maar het werkt wel goed, ook voor grotere aantallen.
Je moet de code nog wel even aanpassen aan de taal van je voorkeur, maar dat lijkt me goed te doen.
Code: Selecteer alles
FUNCTIE A(n, a, b, c){
r = 0;
ALS(n==1){
ALS(a>0) r = r + 1;
ALS(b>0) r = r + 1;
ALS(c>0) r = r + 1;
}
ANDERS{
ALS(a>0) r = r + A(n-1, a-1, b, c);
ALS(b>0) r = r + A(n-1, a, b-1, c);
ALS(c>0) r = r + A(n-1, a, b, c-1);
}
RETURN(r);
}
n = aantal te gebruiken letters
a = aantal A's dat beschikbaar is
b = aantal B's dat beschikbaar is
c = aantal C's dat beschikbaar is
en geeft terug het resultaat r = het gevraagde aantal woorden.
De functie zet eerst het resultaat op nul.
Indien er 1 plaats is (ALS(n==1)) is het aantal mogelijkheden gelijk aan het aantal letters dat nog beschikbaar is,
anders, indien er dus meerdere plaatsen in te vullen zijn zijn, kijken we voor elke letter of die nog beschikbaar is, en zo ja, dan tellen we met behulp van de functie A zelf nog het aantal mogelijkheden voor de rest van het woord (n-1 plaatsen beschikbaar, de betreffende letter - 1 omdat we die gebruikt hebben).
Als ik de functie aanroep met A(4,3,1,4) krijg ik als resultaat r=71.
Natuurlijk is deze methode nogal resultaat gericht en geeft het minder wiskundig inzicht, maar het werkt wel goed, ook voor grotere aantallen.
Je moet de code nog wel even aanpassen aan de taal van je voorkeur, maar dat lijkt me goed te doen.