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

avec Java Discussion :

Algorithme de recherche Trichonomique


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Par défaut Algorithme de recherche Trichonomique
    Salut à tous,

    Je tente de régler un petit algorithme de recherche dans un tableau et j'ai des problèmes d'exécution. Je suis débutant à ce niveau.

    Voila ce que j'ai :
    La valeur x est celle que je cherche
    78 ici comme exemple

    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
            int tableau[] = { 2, 4, 10, 22, 34, 40, 56, 61, 78, 90 };
            int x = 78;
            int debut = 0;
            int fin = 9;
            int premiertier = (debut + fin) / 3;
            int deuxiemetier = (premiertier * 2);
     
            while ((debut < fin) && (x != tableau[premiertier])) {
     
                if (x < tableau[premiertier]) {
     
                    fin = premiertier;
                }
                else if (x > tableau[deuxiemetier]) {
     
                    debut = deuxiemetier;
                }
                else {
     
                    debut = premiertier;
                    fin = deuxiemetier;
                }
     
                premiertier = (debut + fin) / 3;
                deuxiemetier = (premiertier * 2);
            }
     
            if (tableau[premiertier] == x) {
     
                System.out.println("La valeur " + x + " se trouve à la position "
                        + premiertier);
            }
            else {
     
                System.out.println("La valeur n'a pas été trouvée");
            }
    Voici le message d'erreur que j'obtiens :
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
    at dicho3.main(dicho3.java:17)
    Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    C'est que l'index que tu tentes d'accéder dans le tableau est égal ou supérieur à la taille du tableau. L'index qui est accepté est de 0 à taille-1.

    A+.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Par défaut
    Il faudrait que tu postes maintenant le code qui correspond à cette erreur

  4. #4
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Tu as un probleme de limite lors du calcul de l'indice de fin de recherche.
    Il faut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    deuxiemetier = (premiertier * 2);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    deuxiemetier = Math.min((premiertier * 2), tableau.length-1);
    Parce que actuellement, tu essayes d'acceder à un indice supérieur à la taille du tableau.

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 10
    Par défaut
    C'est bon sauf que cette fois j'ai l'impression d'être dans une boucle infini.
    Pas d'erreur mais la machine virtuel tourne... Je dois forçer un break...
    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
    int tableau[] = { 2, 4, 10, 22, 34, 40, 56, 61, 78, 90 };
    		int x = 78;
    		int debut = 0;
    		int fin = 9;
    		int premiertier = (debut + fin) / 3;
    		int deuxiemetier = Math.min((premiertier * 2), tableau.length-1);
     
    		while ((debut < fin) && (x != tableau[premiertier])) {
     
    			if (x < tableau[premiertier]) {
    				fin = premiertier;
    			}
     
    			else if (x > tableau[deuxiemetier]) {
    				debut = deuxiemetier;
    			}
     
    			else{
    				debut = premiertier;
    				fin = deuxiemetier;
    			}
     
    			premiertier = (debut + fin) / 3;
    			deuxiemetier = Math.min((premiertier * 2), tableau.length-1);
    		}
    		if (tableau[premiertier] == x) {
     
    			System.out.println("La valeur " + x + " se trouve à la position "
    					+ premiertier);
     
    		}
     
    		else {
    			System.out.println("La valeur n'a pas été trouvée");
    		}

  6. #6
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Je trouve ca plus simple intellectuellement de raisonner avec un index de debut et un pas (ca simplifie le nombre de variables). Par defaut le pas sera egal a taille du tableau / 3. Ainsi, si on est apres l'element au pas suivant, il faut changer le debut. Sinon, il faut diviser par 3 le pas. Ca donnera un truc du genre :
    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
          int tableau[] = { 2, 4, 10, 22, 34, 40, 56, 61, 78, 90 };
          int x = 78;
          int debut = 0;
          int pas = (tableau.length / 3);
     
          while (debut < (tableau.length - 1) && (pas > 0))
          {
             int i= Math.min(debut + pas, tableau.length - 1);
             if (x >= tableau[i])
             {
                // On est dans un tiers superieur
                debut = i;
             } 
             else
             {
                // On est dans le meme tier
                pas = pas / 3;
             }
          }
          if (tableau[debut] == x)
          {
     
             System.out.println("La valeur " + x + " se trouve à la position "
                   + debut);
          }
          else
          {
             System.out.println("La valeur n'a pas été trouvée");
          }

Discussions similaires

  1. Algorithme de recherche
    Par toddy_101 dans le forum Langage
    Réponses: 13
    Dernier message: 23/01/2007, 12h06
  2. Algorithme de Recherche
    Par i.pollux dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 19/10/2006, 09h48
  3. Meilleur algorithme de recherche de chaine?
    Par ryosnake dans le forum Algorithmes et structures de données
    Réponses: 23
    Dernier message: 20/09/2006, 20h34
  4. Algorithme de recherche
    Par pekka77 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 08/03/2006, 13h01
  5. Algorithme de recherche de chemin
    Par amelie gaya dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 09/06/2002, 15h29

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