Comparer deux tableau en elliminat les repititions

Résolu
pmgforever Messages postés 3 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 23 mai 2008 - 22 mai 2008 à 23:18
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 23 mai 2008 à 13:27
J'ai besoin vraiment d'aide;

j'est deux tableaux, je veux elliminer du premier les valeurs qui se trouvent dans le second, j'ai une methode de comparison mai selle n'a pas fonctionne. les deux tableaux sont d'une seule dimention et de type int

QQ a des idée SVP?
Multi Agents Freak

10 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
23 mai 2008 à 11:14
Version corrigée, essaie avec celle-là:
<hr size= "2" width="100%" />
   /**
     *
     * @param array1
     *            un tableau d'entiers trie dans l'ordre croissant
     * @param array2
     *            un tableau d'entiers trie dans l'ordre croissant
     *
     * @return un tableau d'entiers contenant les entiers presents dans array1
     *         mais pas dans array2 tries dans l'ordre croissant
     *
     */
    public static int[] diff(int[] array1, int[] array2) {
        int size1 array1.length, size2 array2.length;         int index1 0, index2 0;
        int n1, n2;

        // nombre d'entiers trouves dans array1 mais pas dans array2
        // de nombre augmente au cours de la boucle
        int diffSize = 0;

        // tableau de la meme taille que array1
        // pour chaque index de array1, true signifie qu'a cet index, la valeur
        // est dans array2
        boolean[] inArray2 = new boolean[size1];

        // on parcourt les tableaux
        while (index1 < size1 && index2 < size2) {

            // on recupere les valeurs aux indices courants
            n1 = array1[index1];
            n2 = array2[index2];

            // si les valeurs sont egales, on peut conclure
            // que n1 n'est pas a conserver car il se trouve dans array2 aussi
            if (n1 == n2) {
                inArray2[index1] = true ;
                // on peut donc passer a l'index suivant seulement sur le
                // premier tableau car il peut y avoir plusieurs valeurs
                // consecutives egales dans le premier tableau
                index1++;

                // si n1 est inferieur a n2 c'est sur qu'il n'est pas dans
                // array2 puisque array2 est classe dans l'ordre croissant
            } else if (n1 < n2) {
                inArray2[index1] = false;
                // on peut incrementer le nombre de valeurs presentes dans
                // array1 et absente de array2
                diffSize++;
                // il faut ensuite tester la valeur suivante
                index1++;

                // si n1 est superieur a n2, on peut passer a l'index suivant
                // sur le tableau n2 pour voir si on peut trouver une egalite
                // plus loin dans le tableau
            } else
                index2++;

        }
         
        // si on est arrive a la fin du tableau array2 on peut rajouter toutes
        // les valeurs restantes dans array1
        while (index1 < size1) {
            inArray2[index1] = false;
            diffSize++;
            index1++;
        }

        // on parcours ensuite le tableau inArray2, pour construire le tableau
        // resultat avec les valeurs qui ne sont pas dans array2
        int[] diff = new int[diffSize];
        intindexDiff = 0;

        for (index1 = 0; index1 < size1; index1++) {
            if (!inArray2[index1]) {
                diff[indexDiff] = array1[index1];
                indexDiff++;
            }
        }

        returndiff;

    }
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mai 2008 à 07:14
Salut,

"j'ai une methode de comparison mai selle n'a pas fonctionne", je pense que l'erreur vient de la ligne 12 de ta méthode !
______________________________________
DarK Sidious
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
23 mai 2008 à 09:47
Il y a sûrement plein de solutions. Tes tableaux sont-ils triés?
Si aucun de tes tableaux n'est trié tu vas devoir faire un algo de complexité n², si un seul est trié tu peux facilement faire un algo en n log n. Encore mieux, si tes 2 tableaux sont triés tu peux faire un algo de complexité n.
Est-ce que ça te dérange d'utiliser des ArrayList ?
0
pmgforever Messages postés 3 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 23 mai 2008
23 mai 2008 à 10:22
j'ai pas utilisé des ArrayList seulement des tableaux de int.
Effectivement les deux tableau son trier.
j sait pas de quoi tu parle pour "un algo de complexité n²," et "si tes 2 tableaux sont triés tu peux faire un algo de complexité n."
Aide moi svp

Multi Agents Freak
0

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

Posez votre question
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
23 mai 2008 à 10:59
Tout simplement, si tes tableaux ne sont pas triés, tu vas devoir parcourir ton premier tableau, et pour chaque valeur de ton premier tableau, potentiellement tu vas devoir parcourir entièrement ton deuxième tableau. D'où le n² (taille du premier tableau * taille du deuxième tableau).

Je te propose un truc que j'ai fait rapidement, mais je ne l'ai pas trop testé :
<hr size= "2" width="100%" />
   /**
     *
     * @param array1
     *            un tableau d'entiers trie dans l'ordre croissant
     * @param array2
     *            un tableau d'entiers trie dans l'ordre croissant
     *
     * @return un tableau d'entiers contenant les entiers presents dans array1
     *         mais pas dans array2 tries dans l'ordre croissant
     *
     */
    public static int[] diff(int[] array1, int[] array2) {
        int size1 array1.length, size2 array2.length;         int index1 0, index2 0;
        int n1, n2;

        // nombre d'entiers trouves dans array1 mais pas dans array2
        // de nombre augmente au cours de la boucle
        int diffSize = 0;

        // tableau de la meme taille que array1
        // pour chaque index de array1, true signifie qu'a cet index, la valeur
        // est dans array2
        boolean[] inArray2 = new boolean[size1];

        // on parcourt les tableaux
        while (index1 < size1 && index2 < size2) {

            // on recupere les valeurs aux indices courants
            n1 = array1[index1];
            n2 = array2[index2];

            // si les valeurs sont egales, on peut conclure
            // que n1 n'est pas a conserver car il se trouve dans array2 aussi
            if (n1 == n2) {
                inArray2[index1] = true ;
                // on peut donc passer a l'index suivant seulement sur le
                // premier tableau car il peut y avoir plusieurs valeurs
                // consecutives egales dans le premier tableau
                index1++;

                // si n1 est inferieur a n2 c'est sur qu'il n'est pas dans
                // array2 puisque array2 est classe dans l'ordre croissant
            } else if (n1 < n2) {
                inArray2[index1] = false;
                // on peut incrementer le nombre de valeurs presentes dans
                // array1 et absente de array2
                diffSize++;
                // il faut ensuite tester la valeur suivante
                index1++;

                // si n1 est superieur a n2, on peut passer a l'index suivant
                // sur le tableau n2 pour voir si on peut trouver une egalite
                // plus loin dans le tableau
            } else
                index2++;

        }

        // on parcours ensuite le tableau inArray2, pour construire le tableau
        // resultat avec les valeurs qui ne sont pas dans array2
        int[] diff = new int [diffSize];
        intindexDiff = 0;

        for (index1 = 0; index1 < size1; index1++) {
            if (!inArray2[index1]) {
                diff[indexDiff] = array1[index1];
                indexDiff++;
            }
        }

        returndiff;

    }
0
pmgforever Messages postés 3 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 23 mai 2008
23 mai 2008 à 11:01
Merci ; Je vai le tester
Multi Agents Freak
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
23 mai 2008 à 11:03
lol attend, il ne marche pas, je le corrige
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mai 2008 à 12:36
Salut,

Membre banni pour insulte en messagerie privée !
______________________________________
DarK Sidious
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
23 mai 2008 à 12:46
Salut Dark,

Ok t'as sûrement bien fait, mais faut pas m'en vouloir d'avoir répondu ;) , j'ai trouvé que c'était un problème intéressant et pas forcément évident pour un débutant.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mai 2008 à 13:27
Salut,

Aucun problème jojolemariole, au contraire, je te remercie pour l'aide que tu as pu lui apporter.
______________________________________
DarK Sidious
0
Rejoignez-nous