IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

recherche un algo.


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de L4BiN
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2006
    Messages : 432
    Par défaut recherche un algo.
    Bonjour,

    je cherche a faire un Algo pour ceci:

    j'ai deux tableau d'entier A et B. A est l'ensemble des ids deja existants. B est l'ensemble des ids que l'on veux ajouter....
    Je cherche une methode ou un algo permettant de recuppérer les éléments de B qui ne sont pas dans A.

    Dans la methode que j'ai developpé ca ne marche pas pour certain cas... par exemple si B est plus grand que A....

    Voici la methode que j'ai faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    public static int[] NonIntersectIntArray(int[] a, int [] b)
       {DEBUG.ASSERT(a != null);
       	DEBUG.ASSERT(b != null);
       	Vector theResult = new Vector();
       	int[] naIdx = GetIndirectionVector(a);
       	int[] nbIdx = GetIndirectionVector(b);
       	int i=0,j=0;
       	while(true)
       	{
               	int	nIdx1 = naIdx[i];
                int nIdx2 = nbIdx[j];
     
                if (a[nIdx1] < b[nIdx2])
                {           	
                	i++;
                }
                else if (a[nIdx1] == b[nIdx2])
                {
                	i++;
                	j++; 
                }
                else if (a[nIdx1] > b[nIdx2])
                {
                   theResult.add(new Integer(nIdx2));
                   j++;
                }
     
                if ( i==a.length || j == b.length )
                	break;
     
     	}
     
       	return IntVectorToIntArray(theResult);
       }
    Est ce que quelqun peut amélirer cette methode pour quel marche tout le temps ?

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, cette solution devrait fonctionner, ça ne ressemble pas du tout à ton algo, mais c'est ce que j'aurai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for(int i = 0; i < b.length ; i++) {
        boolean trouve = false;
        for(int j = 0 ; j < a.length ; i++) {
            if(a[j] == b[i]) {
                trouve = true;
                break;
            }
        }
        if(!trouve) {
            theResult.add(b[i]);
        }
    }

  3. #3
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Sinon tu utilises des List et la méthode retainAll ...

  4. #4
    Membre éclairé Avatar de L4BiN
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2006
    Messages : 432
    Par défaut
    Ok merci pour vos reponses....

    Bonjour, cette solution devrait fonctionner, ça ne ressemble pas du tout à ton algo, mais c'est ce que j'aurai fait :

    Code :

    for(int i = 0; i < b.length ; i++) {
    boolean trouve = false;
    for(int j = 0 ; j < a.length ; i++) {
    if(a[j] == b[i]) {
    trouve = true;
    break;
    }
    }
    if(!trouve) {
    theResult.add(b[i]);
    }
    }
    cette solution est bonne j'y avais pensé mais elle est trop couteuse à cause de la double boucle for... mais merci qd meme

    sinon j'ai trouver une solution aussi... (reste a tester le cout)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    public static int[] NonIntersectIntArray(int[] a, int [] b)
       {
    	   DEBUG.ASSERT(a != null);
    	   DEBUG.ASSERT(b != null);
     
    	   Vector theResult = new Vector();
    	   int[] naIdx = GetIndirectionVector(a);
    	   int[] nbIdx = GetIndirectionVector(b);
    	   int i=0,j=0;
    	   int nIdx1=0;
     
    	   while(true)
    	   {
    		   if(i!=a.length) nIdx1 = naIdx[i];
    		   int nIdx2 = nbIdx[j];
     
    		   if(i!=a.length)// if we are not at the end of a[]
    		   {
     
     
    			   if (a[nIdx1] < b[nIdx2])
    			   {
    				   i++;
    			   }
    			   else if (a[nIdx1] == b[nIdx2])
    			   {
    				   i++;
    				   j++;
    			   }
    			   else if (a[nIdx1] > b[nIdx2])
    			   {
    				   theResult.add(new Integer(nIdx2));
    				   j++;
    			   }
    		   }
    		   else// if we are at the end of a[]
    		   {
    			   if (a[nIdx1] < b[nIdx2])
    			   {
    				   theResult.add(new Integer(nIdx2));
    				   j++;
    			   }
    			   else if (a[nIdx1] == b[nIdx2])
    			   {
    				   j++;
    			   }
    			   else if (a[nIdx1] > b[nIdx2])
    			   {
    				   int u = nIdx1;
    				   while(a[u]>b[nIdx2])
    				   {
    					   u--;
    					   if(a[u]==b[nIdx2])
    					   {
    						   j++;
    						   break;
    					   }
    					   else if(a[u]<b[nIdx2])
    					   {
    						   theResult.add(new Integer(nIdx2));
    						   j++;
    						   break;
    					   }
    				   }
    			   }
    		   }
    		   if ( j == b.length)// in all the case  it's finish
    			   break;
     
    	   }
     
    	   return IntVectorToIntArray(theResult);
       }

  5. #5
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Il y a une raison pour que tu veuilles faire des trucs complexes tout seul plutot que d'utiliser des choses simples toutes faites ? Ou c'est juste à but éducatif ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche d'algo lié aux surfaces 3D, calcul d'intersection et de distance
    Par PaM... dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 19/02/2009, 11h24
  2. Rebond balle/brique : Recherche désespérément algo fonctionnel
    Par [INSA]Piwai dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 03/07/2006, 11h38
  3. Recherche d'algo (/ coordonnées+poids fichier)
    Par Chekov dans le forum Langage
    Réponses: 5
    Dernier message: 17/06/2006, 02h19
  4. Arbre de recherche : quel algo conseiller ?
    Par cedico dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 02/12/2005, 11h07
  5. Recherche d'algos pour contours actifs
    Par yazifun dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 27/11/2005, 00h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo