Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
arrangements [2010/01/09 08:48] tyrtamos |
arrangements [2010/01/09 12:16] tyrtamos |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Arrangements ====== | ====== Arrangements ====== | ||
+ | **//En construction// | ||
+ | |||
+ | ===== Objectif ===== | ||
+ | |||
+ | Exemple: soit une liste d' | ||
+ | |||
+ | * on veut connaitre toutes les façons de les présenter 2 à 2, en tenant compte de l' | ||
+ | |||
+ | * en tenant compte si nécessaires de répétitions | ||
+ | |||
+ | * et on veut savoir combien | ||
+ | |||
+ | \\ | ||
+ | Référence externe pour la définition: | ||
+ | |||
+ | ===== Calcul du nombre d' | ||
+ | |||
+ | Il y a 6 arrangements, | ||
+ | |||
+ | < | ||
+ | |||
+ | Ou, en Python (si fact(n) est la factorielle de n) | ||
+ | |||
+ | Ank = fact(n)/ | ||
+ | |||
+ | Ce qui donne le code suivant: | ||
+ | |||
+ | <code python> | ||
+ | def arrang(n, k): | ||
+ | """ | ||
+ | if k>n: | ||
+ | return 0 | ||
+ | x = 1 | ||
+ | i = n-k+1 | ||
+ | while i <= n: | ||
+ | x *= i | ||
+ | i += 1 | ||
+ | return x | ||
+ | </ | ||
+ | |||
+ | Exemple d' | ||
+ | |||
+ | <code python> | ||
+ | print arrang(5,3) | ||
+ | 60 | ||
+ | </ | ||
+ | |||
+ | Vous noterez le cas k>n qui est prévu dans la définition mathématique, | ||
+ | |||
+ | ===== Liste des arrangements | ||
+ | |||
+ | Comme nous savons trouver la liste des combinaisons, | ||
+ | |||
+ | Par exemple, la liste des combinaisons de 5 objets [' | ||
+ | |||
+ | %%[[' | ||
+ | |||
+ | On constate que chaque combinaison trouvée est unique. | ||
+ | |||
+ | Par exemple %%[' | ||
+ | |||
+ | Mais pour les arrangements, | ||
+ | |||
+ | Voici le code correspondant. Il est directement issu de combinliste(), | ||
+ | |||
+ | <code python> | ||
+ | def arrangliste(seq, | ||
+ | """ | ||
+ | p = [] | ||
+ | i, imax = 0, 2**len(seq)-1 | ||
+ | while i<=imax: | ||
+ | s = [] | ||
+ | j, jmax = 0, len(seq)-1 | ||
+ | while j<=jmax: | ||
+ | if (i>> | ||
+ | s.append(seq[j]) | ||
+ | j += 1 | ||
+ | if len(s)==k: | ||
+ | v = permutliste(s) | ||
+ | p.extend(v) | ||
+ | i += 1 | ||
+ | return p | ||
+ | </ | ||
+ | |||
+ | Exemple d' | ||
+ | |||
+ | <code python> | ||
+ | print arrangliste([' | ||
+ | </ | ||
+ | |||
+ | ===== Liste des arrangements d'une chaine de n caractères pris k à k ===== | ||
+ | |||
+ | C'est le même principe, à part que la donnée est une chaîne, et qu'on cherche tous les arrangements de k caractères de cette chaîne de longueur n. | ||
+ | |||
+ | La solution la plus simple est d' | ||
+ | |||
+ | <code python> | ||
+ | def arrangchaine(ch, | ||
+ | return ['' | ||
+ | </ | ||
+ | |||
+ | Exemple d' | ||
+ | |||
+ | <code python> | ||
+ | print arrangchaine(' | ||
+ | </ | ||
+ | |||
+ | |||
+ | \\ | ||
+ | Amusez-vous bien! | ||
< | < |