Comparer deux tableau en elliminat les repititions [Résolu]

pmgforever
Messages postés
3
Date d'inscription
jeudi 8 février 2007
Dernière intervention
23 mai 2008
- 22 mai 2008 à 23:18 - Dernière réponse : cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
cs_jojolemariole
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
- 23 mai 2008 à 11:14
3
Merci
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;

    }

Merci cs_jojolemariole 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_jojolemariole
cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
- 23 mai 2008 à 07:14
0
Merci
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
Commenter la réponse de cs_DARKSIDIOUS
cs_jojolemariole
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
- 23 mai 2008 à 09:47
0
Merci
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 ?
Commenter la réponse de cs_jojolemariole
pmgforever
Messages postés
3
Date d'inscription
jeudi 8 février 2007
Dernière intervention
23 mai 2008
- 23 mai 2008 à 10:22
0
Merci
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
Commenter la réponse de pmgforever
cs_jojolemariole
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
- 23 mai 2008 à 10:59
0
Merci
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;

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

Membre banni pour insulte en messagerie privée !
______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS
cs_jojolemariole
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
- 23 mai 2008 à 12:46
0
Merci
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.
Commenter la réponse de cs_jojolemariole
cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
- 23 mai 2008 à 13:27
0
Merci
Salut,

Aucun problème jojolemariole, au contraire, je te remercie pour l'aide que tu as pu lui apporter.
______________________________________
DarK Sidious
Commenter la réponse de cs_DARKSIDIOUS

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.