Supprimer les doublons

ulysse00
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
- 1 mars 2007 à 12:11
ulysse00
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
- 4 mars 2007 à 12:30
salut mes amis

j'ai un problème que je n'arrive pas a le résoudre
j'ai une liste A={a,b,c}
et j'ai fait la combinaison entre les élements de la lsite A alors j'aurais une liste F{ab,ac,ba,bc,ca,cb} et j'ai supprimer les doublons alors j'aurais {ab,ac,bc} voila la partie qui fait ça
ArrayList F= new ArrayList ();
for (int i=0;i<A.size();i++){
   for (int j = i + 1; j < A.size(); j++) {
     String Q1=A.get(i).toString();
     String Q2=A.get(j).toString();
     if ( ! Q1.equals(Q2) ){
       String  Q3=Q1.concat(Q2);
       F.add(Q3);
     }
  }
}

mais le vrai problème que quand j'ai par exemple {ab,ac,bc,bd,cd}alors je ne sais pas faire la combinaison pour avoir {abc,acb,bcd,bdc} et apres supprimer les doublons alors j'airais une liste F qui contient seulment {abc,bcd}

merci de bien vouloir m'aider

8 réponses

Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
38
1 mars 2007 à 21:58
Salut:



Une idée: Fais le tri des tes chaines dans un ordre croissant de telle sorte que abc, cba, bac se réduisent tous àprès tri à abc, abc, abc d'où tu as seulement après suppression abc




__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
0
ulysse00
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
2 mars 2007 à 12:54
salut mais désolé ami je n'ai rien compris , moi je n'arrive meme pas à faire la combinaison
0
Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
38
3 mars 2007 à 11:59
Salut:

Je ne pense pas que ce que je viens de dire est assez compliqué.



supposons que tu as le chaines {ab, bc, ba}



si tu tries chaque chaine par odre croissant (a < b < ... < z)



tu obtient : {ab, bc, ab}




Puis si tu fais le tri de toutes l'ensemble tu obtiens: {ab, ab, bc}



Enfin tu fais l'unification ce que donne {ab, bc}



C'est comme en fait avec UNIX: sort | uniq




__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
0
ulysse00
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
3 mars 2007 à 12:46
je n'ai pas compris désolé et merci
si j'ai une liste F {ab,ac,bc} alors j'aurais {abc,acb,bcd,bdc}
meme si j'ai une liste avec {abd,acd,abc} apres la combinaison j'aurais {abdc}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
38
3 mars 2007 à 13:06
Salut:

Désolé, j'ai pas bien compris ta question:



Mais si tu veux générer toutes les combinaisons possibles tu peux utiliser un arbre de choix.




__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
0
ulysse00
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
3 mars 2007 à 13:41
essaie me comprendre  mon exemple est clair
{ab,ac,bc,} je voulais avoir comme résultat {abc,acb,bcd,bdc} et pas {abac,abbc,acbc} mais {abc,abc,acb}puis {abc} car je considére les autre doublons

et si j'ai une liste {ab,bc} je ne peux pas faire la combinaison car il faut qu'on trouve a au premier de ab et a en premier bc c'est pour ça je ne peux faire combinaison

meme si j'ai uen lsite avec {abc,abd} j'aurais {abcd} et pas {abcabd}

et si j'ai une lsite {abc,adc} je ne peux pas faire car j'ai ab n'égale pas ad

j'aimerai bien que tu m'as compris
0
ulysse00
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
3 mars 2007 à 16:23
je m'avance et je pense que j'ai trouvé la solution mais je coince sur une condition que j'ignore de l'ajouter dans le code par exemple si j'ai une liste {ABC,ABD.BCE,ABF}
essayez me comprendre
car le code que je vais poster seulment une idée générale
j'ai mis comme code


 


for i = 1 jusqu'à 3 faire
X=T1[i]
for j= i+1 jusqu'à3 faire
Y=T1[j]
  je vais séparer Y alors j'aurais une liste T2={A,B,D}
je vais parcourir la liste
while (i<=Té.size()){
   if (T2[K] appartient à X)
     remove
K++;
sinon K=T2.size();
}
concacténation x avec T2 ( le reste de la liste T2 )


j'ai appliqué ça qu'avec i=1;alors j=2 T1[1]=ABC et T2[2]=ABD


le problème que je n'arrive pas a ajouter la condition si je serais à j=3 T2[3]=BCE
on voit B n'appartient pas à X alors je sote à j égale 4 ainsi de suite jusqu'à la fin de la liste T2


j'espere que vous m'avez bien comprendre mes amis
merci encore de bien vouloir m'aider


 


 
0
ulysse00
Messages postés
292
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
12 mai 2013
1
4 mars 2007 à 12:30
voila le code qu ej'ai fait mais un pb

public static void main(String[] args) {
     ArrayList A = new ArrayList();
     A.add("a");
     A.add("x");
     A.add("c");
     A.add("h");
     A.add("d");
     A.add("v");
 
     ArrayList B = new ArrayList();
     B.add("ah");
     B.add("ac");
     B.add("ad");
    
ArrayList SS = new ArrayList();
     ArrayList c = new ArrayList();
     ArrayList T = new ArrayList();
     for (int i = 0; i < B.size(); i++) {
       String Q2 = B.get(i).toString();
 
       for (int j= i+1; j < B.size(); j++) {
         String Q1 = B.get(j).toString();
         char[] chars = Q1.toCharArray();
         StringBuffer buf = new StringBuffer();
         int m = chars.length;
         for (int E = 0; E < m; E++) {
           buf.append(chars[E]);           for (int W 0, n buf.length(); W < n; W++) {
             if (A.contains(buf.substring(W, buf.length()))) {
               c.add(buf.substring(W, buf.length()));
               buf = new StringBuffer();
               W = n;
             }
           }
 
         }
 
       }
 
       ArrayList AToDelete = new ArrayList();
 
       int u = 0;
       int index;
       Iterator ii = c.iterator();
       while (ii.hasNext()) {
         String x = ii.next().toString();
 
         index = Q2.lastIndexOf(x); //on recherche le dernier index où l'on trouve la chaine 1;
         if (index != -1) { // on a trouvé
 
           AToDelete.add(c.get(u));
 
         }
         u++;
       }
 
       c.removeAll(AToDelete);
 
      
 
       Iterator f = c.iterator();
 
       while (f.hasNext()) {
 
         String x = f.next().toString();
 
         String o = Q2.concat(x);
         SS.add(o);
       }
    
 
     }
       System.out.println(SS);
 
   }


 


le résultat de la liste SS{[ahc, ahd, acd, acd]} mais normalemnt j'aurais [ahc, ahd, acd]


please mes amis
0