perms
Génère le tableau des permutations des éléments donnés
Séquence d'appel
y = perms(x) y = perms(x, "unique")
Arguments
- x
 Vecteur ligne ou colonne de tout type de données pour lesquelles les opérateurs size(), ==, et [] sont définis, incluant le type cell.
- "unique"
 indicateur texte optionnel, pour calculer et produire uniquement les permutations uniques, sans aucun doublon. Cette option est utilisable uniquement si
xest ordonnable : booléen, entier, réel, ou texte.- y
 Tableau du type de x, avec n=size(x,"*") colonnes. Chaque ligne contient une permutation. Sans utiliser l'option "unique",
ycomprend n! lignes. Sinon, le nombre de lignes size(y,1) ≤ n! dépend de la multiplicité des valeurs dédoublonnées de x.
Description
Etant donné un vecteur x de n éléments,
            perms(..) calcule le nombre attendu de permutations attendues,
            et vérifie qu'il y a suffisamment de mémoire vive disponible pour les calculer et les
            stocker en résultat.
S'il n'y a pas suffisamment de mémoire vive, aucun calcul effectif n'est effectué, et une erreur est générée.
Sinon, les permutations sont calculées et retournées en résultat.
![]()  | Lorsque "unique" est utilisé,
             
 x est conservé, et l'ordre
            des permutations dans y en tient compte. Ainsi x
            pourra si besoin être trié selon l'ordre choisi par l'utilisateur,
            avant d'appeler perms(). | 
![]()  | Pour mémoire, le poids  n*n!*8 de y en octets
            est listé ci-dessous en fonction du nombre n d'éléments de
            x, pour x nombres décimaux, et sans
            l'option "unique" : | 
| n | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| y [octets] | 32 | 144 | 768 | 4800 | 34560 | 288240 | 2.58×106 | 26.1×106 | 290×106 | 3.51×109 | 46.0×109 | 648×109 | 
Exemples
x = [4, 7, 10]; y = perms(x) x = ["a" "b" "c" "d"]; y = perms(x)' c = {"bonjour", %pi, %t}; perms(c)
--> x = [4, 7, 10];
--> y = perms(x)
 y  =
   10.   7.    4.
   10.   4.    7.
   7.    10.   4.
   7.    4.    10.
   4.    10.   7.
   4.    7.    10.
--> x = ["a" "b" "c" "d"];
--> perms(x)'
 ans  =
!d  d  d  d  d  d  c  c  c  c  c  c  b  b  b  b  b  b  a  a  a  a  a  a  !
!c  c  b  b  a  a  d  d  b  b  a  a  d  d  c  c  a  a  d  d  c  c  b  b  !
!b  a  c  a  c  b  b  a  d  a  d  b  c  a  d  a  d  c  c  b  d  b  d  c  !
!a  b  a  c  b  c  a  b  a  d  b  d  a  c  a  d  c  d  b  c  b  d  c  d  !
--> c = {"bonjour", %pi, %t};
--> perms(c)
 ans  =
  [1x1 boolean ]  [1x1 constant]  [1x1 string  ]
  [1x1 boolean ]  [1x1 string  ]  [1x1 constant]
  [1x1 constant]  [1x1 boolean ]  [1x1 string  ]
  [1x1 constant]  [1x1 string  ]  [1x1 boolean ]
  [1x1 string  ]  [1x1 boolean ]  [1x1 constant]
  [1x1 string  ]  [1x1 constant]  [1x1 boolean ]
Avec des éléments de multiplicité > 1 (doublons ou plus) :
perms([1 0 0]) perms([1 0 0], "unique") perms([0 1 2 0], "unique")' p = perms([0 0 0 0 1 1 1 2 2 3], "unique"); size(p)
--> perms([1 0 0]) ans = 0. 0. 1. 0. 1. 0. 0. 0. 1. 0. 1. 0. 1. 0. 0. 1. 0. 0. --> perms([1 0 0], "unique") ans = 0. 0. 1. 0. 1. 0. 1. 0. 0. --> perms([0 1 2 0], "unique")' ans = 0. 0. 0. 0. 0. 0. 1. 1. 1. 2. 2. 2. 0. 0. 1. 1. 2. 2. 0. 0. 2. 0. 0. 1. 1. 2. 0. 2. 0. 1. 0. 2. 0. 0. 1. 0. 2. 1. 2. 0. 1. 0. 2. 0. 0. 1. 0. 0. --> p = perms([0 0 0 0 1 1 1 2 2 3], "unique"); --> size(p) ans = 12600. 10. // au lieu de 10! = 3628800 lignes
Voir aussi
- grand(n,'prm',x) — Générateur de nombres pseudo-aléatoires
 - factorial — factorial function : product of the n first positive integers
 - unique — extrait (et trie) les éléments distincts d'un vecteur, matrice, hypermatrice
 - gsort — sorts boolean, numerical and string arrays
 - try — mot clé de début du bloc try dans une instruction de contrôle try-catch
 
Historique
| Version | Description | 
| 6.1.0 | Option "unique" ajoutée. | 
| Report an issue | ||
| << ones | Matrice - génération | repmat >> | 

