Les Snippets

Connexion

iterateurs de permutations

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 17/06/2008 00:00:46 et initié par coucou747 [Liste]
Vue : 544
Catégorie(s) : Maths, Algorithme, Class
Langages dispo pour ce code :
- Java



Langage : Java
Date ajout : 17/06/2008
Posté par coucou747 [Liste]

public class Permutations implements java.util.Iterator{ 
    private boolean ended; // dit si on a fini d'iterer 
    private Object[] tab; // tableau 
    private int len; // longueur du tableau 
    private int pos; // position de l'objet ignore 
    private Permutations perm; // la permutation enfant 
    public Permutations(Object[] tab){ 
        this.tab = tab; 
        len = tab.length; 
        if (len==0){ 
            ended = true; 
        }else if (len==1){ 
            ended = false; 
            pos=-1; 
        }else{ 
            ended = false; 
            pos = 0; 
            gperm(); 
        } 
    } 
    //! permet de recuperer la permutation suivante (celle qui ignore pos) 
    private void gperm(){ 
        Object[] t = new Object[len-1]; 
        int d=0; 
        for (int i=0;i<len;i++){ 
            if (i==pos) d++; 
            else t[i-d]=tab[i]; 
        } 
        perm = new Permutations(t); 
    } 
    //! recupere l'objet suivant 
    public Object[] next(){ 
        if (len < 2){ 
            ended=true; 
            return tab; 
        }else{ 
            if (!perm.hasNext()){ 
                pos++; 
                gperm(); 
            } 
            Object[] result = perm.next(); 
            Object[] o = new Object[len]; 
            o[0]=tab[pos]; 
            for (int i=0;i<len-1;i++){ 
                o[i+1] = result[i]; 
            } 
            return o; 
        } 
    } 
    //! dit si il en reste a parcourrir 
    public boolean hasNext(){ 
        if (ended) return false; 
        return pos!=len-1 || perm.hasNext(); 
    } 
    public void remove(){} 
} 
Remarque :
suite au post : http://www.javafr.com/infomsg_TABLEAU-JAVA_1153515.aspx
exemple d'utilisation :
Object [] t = new Object[4];
t[0] = "1"; t[1] = "2"; t[2] = "3"; t[3]="4";
Permutations perm = new Permutations(t);
while (perm.hasNext()){
   Object [] t2 = perm.next();
   for (int i=0;i       System.out.print(t2[i]);
   }
   System.out.println("");
}

Snippets en rapport avec : Lexicographique, Iterateur, Permutations



Codes sources en rapport avec : Lexicographique, Iterateur, Permutations

{PHP} FILTRER, METTRE EN CACHE OU MAPER, OU TRIER UN ITERATEUR
le titre est incorrect, mais si j'avais voulu mettre dans le titre tout ce que fait cette source, j'...