EDIT: la suite de mon poste ne répond pas au problème.
L'énoncé valide un tirage type 8,5,6,2 car 2 inférieur à toutes les boules précédentes
ci-dessous j'invalide le tirage 8,5,6,2 car 6 n'est pas inférieur à 5 (chaque boule devant être inférieure ou égale à la précédente). Je suis contraint de laisser ce message... on ne peut plus supprimer ses propres conneries
bj,
une variante tjs avec mes tableaux ...
si on pose un n fixé, par ex 7.
pour r = 1, on a 7 possibilités
1 1 1 1 1 1 1
pour r = 2, on peut écrire
- Code: Tout sélectionner
1 1 1 1 1 1 1
7 6 5 4 3 2 1
28 21 15 10 6 3 1
84 56 35 20 10 4 1
T(n,k) représente le nombre de trajets commencant par la boule k, de taille n.
Par exemple T(3,6) == 21 est calculé en disant qu'on compte les chemins de taille 2 qui commencent par 1,2,3,4,5 ou 6
et à chacun de ces chemin, on y accole la boule 6
idem T(2,6)+T(2,5)...+T(1,5)
on peut construire la table plus facilement via
T(i,j) = T(i, j+1) + T(i-1,j)
On note en particulier qu'en sommant les colonnes d'une ligne, on obtient (assez normalement...) le coeff de la ligne suivante première colonne.
en regardant une table de combinatoire, on déduit que la suite 1 7 28 84 210 462 associe
E(r,n) = C(r, n+r-1)
ex: (pour n==7), si r==2, on veut la somme pour deux boules, qui est 28 et C(2,7+2-1) = 28
je pense que ya un moyen moins bête et plus visuel pour trouver C(r,n+r-1) mais bon..
code de dénombrement bête et méchant:
- Code: Tout sélectionner
var n = 7;
var k = 3;
function rec(depth, hands, v, left){
if(depth == 0){
hands.push(v.slice(0));
return;
}
for(var i = left; i>=1; --i){
v.push(left);
rec(depth-1, hands, v, i)
v.pop();
}
}
var hands = [];
rec(k, hands, [], n);
console.log(hands);
console.log('nb:', hands.length);
on devrait du coup s'attendre à
P(E_r,n) = C(r,n+r-1)/n^r
EDIT: en regardant wiki, il s'agit de multichoose/k-multicombination (
https://en.wikipedia.org/wiki/Combination)