Bonjour Hubert,
Merci pour le retour.
Cependant cet algorithme n'est pas optimal parce qu'il examine de trop nombreuses solutions (pas toutes heureusement) qu'il élimine ensuite (dans la ligne z <- z[apply(z,1,function(u) all(u<=sc)),]).
Par exemple cette matrice est clairement l'unique permutation de sa classe:
Code : Tout sélectionner
(m <- matrix(c(5,5,5,5,5,5,0,0,0,0,0,0),byrow=TRUE,nrow=2))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 5 5 5 5 5 5
[2,] 0 0 0 0 0 0
Mais l'algorithme prend plusieurs secondes pour la trouver, parce qu'il réalise toutes les permutations de la première ligne (au nombre de (30+6-1)!/30!/(6-1)!=324632) pour n'en conserver qu'une:
C'est beaucoup plus rapide d'appliquer la fonction à la transposée de m:
parce que le nombre de permutations testées n'est que de 6*5=30.
Il existe certainement une façon de trouver directement les permutations.
Affaire à suivre...