Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1477 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

permutation

n°2115022
gilou
Modérateur
Modzilla
Posté le 05-12-2011 à 20:50:30  profilanswer
 

Reprise du message précédent :
>> faire des ptits programme rigolo
 [:totoz]  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 05-12-2011 à 20:50:30  profilanswer
 

n°2117337
vapeur_coc​honne
Stig de Loisir
Posté le 19-12-2011 à 20:19:45  profilanswer
 

up :o


---------------
marilou repose sous la neige
n°2117352
gilou
Modérateur
Modzilla
Posté le 19-12-2011 à 21:07:06  profilanswer
 

Si on le veut en itératif, il y a l'algo QuickPerm
Le code qui imprime la même chose (facile a modifier si on veut creer le tableau de tous les sous tableaux permutés, et pas seulement imprimer)
 

Code :
  1. import java.util.Arrays;
  2. import java.lang.String;
  3.    
  4. public class Vapeur {
  5.    public  String[] permuted;
  6.    private String[] initial;
  7.    private int[] indice;
  8.    private int count;
  9.  
  10.    public Vapeur (String[] t)  {
  11.     count = t.length;
  12.     initial = t.clone();
  13.     permuted = new String[count];
  14.     indice = new int[count];
  15.     for (int i = 0; i < count; ++i) {
  16.         indice[i] = i;
  17.         permuted[i] = initial[i];
  18.     }
  19.    }
  20.  
  21.    private void swap(int i, int j) {
  22.     int tmp = indice[i];
  23.     indice[i] = indice[j];
  24.     indice[j] = tmp;
  25.    }
  26.  
  27.    private boolean permute() {
  28.     int tail, i, j;
  29.  
  30.     if (count <= 1) return false;
  31.  
  32.     for (i = count-1; i > 0 && indice[i-1] >= indice[i]; --i) /* */;
  33.     tail = i;
  34.  
  35.     if (tail > 0) {
  36.         for (j = count-1; j > tail && indice[j] <= indice[tail-1]; --j) /* */;
  37.         swap(tail-1, j);
  38.     }
  39.         
  40.     for (i = tail, j = count-1; i < j; ++i, --j) {
  41.         swap(i, j);
  42.     }
  43.  
  44.     for (i = 0; i < count; ++i) {
  45.         permuted[i] = initial[indice[i]];
  46.     }
  47.  
  48.     return (tail != 0);
  49.    }
  50.  
  51.    public void printPermuted(){
  52.        System.out.println(Arrays.toString(permuted));
  53.    }
  54.  
  55.    public void reset() {
  56.        for (int i = 0; i < count; ++i) {
  57.         indice[i] = i;
  58.         permuted[i] = initial[i];
  59.     }
  60.    }
  61.  
  62.    public static void main(String[] args){
  63.     String[] texte = new String[] {"vapeur", "cochonne", "a dit", "l'alcool c'est mal!"};
  64.     Vapeur cochonne = new Vapeur(texte);
  65.     do {
  66.         cochonne.printPermuted();
  67.     } while (cochonne.permute());
  68.     cochonne.reset();
  69.        /* ... */
  70.    }
  71. }


 
A+,


Message édité par gilou le 19-12-2011 à 21:45:15

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2117353
vapeur_coc​honne
Stig de Loisir
Posté le 19-12-2011 à 21:08:51  profilanswer
 

mwoauis tu veux pas m'expliquer ce qui se passe quand j=3 dans ton prog recursif
 
on passe jamais dans le swap(i, j) ?


---------------
marilou repose sous la neige
n°2117366
gilou
Modérateur
Modzilla
Posté le 19-12-2011 à 21:41:48  profilanswer
 

On commence a faire un permute(0), c'est a dire un permute à partir de l'indice 0
 
ça fait:
for (int j = 0; j < 3; j++) {
 swap(0, j);
 permute(1);
 swap(j, 0);
}
 
Donc ca fait
On a au départ [0, 1, 2] par exemple
swap(0,0) -> rien de modifié
permute(1); donc permutation de [1, 2] et 0 fixé en premier indice
==> swap(1,1) -> rien de modifié
      permute(2)  
       ==> plus rien à permuter -> retour avec [0, 1, 2]
      swap(1,1) -> rien de modifié
      swap(1,2) -> on a maintenant [0, 2, 1]
      permute(2)  
      ==> plus rien à permuter -> retour avec [0, 2, 1]
      swap(2,1) -> on a maintenant [0, 1, 2]
swap(0,0) -> rien de modifié
swap(0,1) -> on a maintenant [1, 0, 2]
permute(1); donc permutation de [0, 2] et 1 fixé en premier indice
==> swap(1,1) -> rien de modifié
      permute(2)  
       ==> plus rien à permuter -> retour avec [1, 0, 2]
      swap(1,1) -> rien de modifié
      swap(1,2) -> on a maintenant [1, 2, 0]
      permute(2)  
      ==> plus rien à permuter -> retour avec [1, 2, 0]
      swap(2,1) -> on a maintenant [1, 0, 2]
swap(1,0) -> on a maintenant [0, 1, 2]
swap(0,2) -> on a maintenant [2, 1, 0]
permute(1); donc permutation de [1, 0] et 2 fixé en premier indice
==> swap(1,1) -> rien de modifié
      permute(2)  
       ==> plus rien à permuter -> retour avec [2, 1, 0]
      swap(1,1) -> rien de modifié
      swap(1,2) -> on a maintenant [2, 0, 1]
      permute(2)  
      ==> plus rien à permuter -> retour avec [2, 0, 1]
      swap(2,1) -> on a maintenant [2, 1, 0]
swap(2,0) -> on a maintenant [0, 1, 2]
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2117406
vapeur_coc​honne
Stig de Loisir
Posté le 20-12-2011 à 08:10:03  profilanswer
 

:jap:


---------------
marilou repose sous la neige
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Besoin d'aide permutation binairedifférences tri à bulle et par permutation
permutationalgorithme de permutation et rotation cyclik
Algorithme permutation[C][NEW] Permutation de 2 variable (avec condition)
combinaison permutationAlgorithme de permutation de 2 éléments d'une liste simplement chaînée
Algorithme de permutationProbleme permutation ligne tableau
Plus de sujets relatifs à : permutation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR