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

Langage Java Discussion :

Fouille dichotomique String


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut Fouille dichotomique String
    Voila, je veux faire une recherche dans un tableau d'objet avec ce type de fouille.

    Par contre, j'ai des problèmes quand à l'implémentation de celui-ci.

    Il faudrait q'il recherche dans le tableau d'objet "tabMotsDict".

    Merci

    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
    public class MotDictionnaire {
     
    	private String mot;
    	private char type;
    	private char genre;
    	private char nombre;
     
    	public MotDictionnaire(String mot, char type, char genre, char nombre) 
    	{
     
    		this.mot = mot;
    		this.type = type;
    		this.genre = genre;
    		this.nombre = nombre;
     
    	}
     
    	public String getMot() {
     
    		return mot;
     
    	}
     
    	public char getType() {
     
    		return type;
     
    	}
     
    	public char getGenre() {
     
    		return genre;
     
    	}
     
    	public char getNombre() {
     
    		return nombre;
     
    	}
     
    }
    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
    public class Dictionnaire
    {
    	public MotDictionnaire[] tabMotsDict;
     
    	public Dictionnaire(){};
     
    	public Dictionnaire(MotDictionnaire[] tabMotsDict)
    	{
    		this.tabMotsDict = tabMotsDict;
    	}
     
     
    	public MotDictionnaire[] getTabMotsDict() {
    		return tabMotsDict;
    	}
     
    	public void setTabMotsDict(MotDictionnaire[] tabMotsDict) {
    		this.tabMotsDict = tabMotsDict;
    	}
     
    	/*******************************
             * Fonction qui vérifie si un mot existe dans le dictionnaire
             * 
             *Recoit un mot
             * 
             *Retourne un boolean (true / false)
             * 
             */
    	public boolean motExiste(String mot) 
    	{
    		int debut;
    		int fin;
    		int valeur = 0;
    		int milieu = 0;
    		int tab[] = new int[100];
    		boolean trouve;
     
    		debut = 0;
    		fin = 100;
    		trouve = false;
     
    		while(valeur < tab[0] || valeur >= tab[100])
    			milieu = debut + ((fin - debut) / 2);
    		if(tab[milieu] == valeur)
    			trouve = true;
    		else
    			if(valeur > tab[milieu])
    				debut = milieu + 1;
    			else
    				fin = milieu - 1;
    		while(trouve = false && debut < fin);
     
    		return trouve;

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Bonjour,

    On ne peut guère t'aider avec si peu d'informations
    Explique le problème, donne un exemple concret illustrant la ou les erreurs et on verra ce qu'on peut faire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    J'ai réussi à implémenter mais je crois qu'il y a un erreur sans l'a trouvé....

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ArrayList<MotDictionnaire> tabMotsDict = new ArrayList<MotDictionnaire>();
    		Dictionnaire monDict = new Dictionnaire();
    		try {
    			tabMotsDict.add(new MotDictionnaire("notions", 'N', 'F', 'P'));
    			tabMotsDict.add(new MotDictionnaire("objectif", 'N', 'M', 'S'));
    			tabMotsDict.add(new MotDictionnaire("operateurs", 'N', 'M', 'P'));
    			tabMotsDict.add(new MotDictionnaire("pratique", 'N', 'F', 'S'));
    			tabMotsDict.add(new MotDictionnaire("references", 'N', 'F', 'P'));
    			tabMotsDict.add(new MotDictionnaire("travail", 'N', 'M', 'S'));
     
    			monDict = new Dictionnaire(tabMotsDict);
    			System.out.println(monDict.motExiste("notions"));
    Il retourne false quand le mot notions est bel et bien dans le tableau.

    Voici ma fonction.

    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
    public boolean motExiste(String mot) {
     
    		int pointMilieu = 0;
    		int iDebut = 1;
    		int iFin = getTabMotsDict().size() - 1;
     
    		do {
    			pointMilieu = (iDebut + iFin) / 2;
     
    			if (mot.compareTo(getTabMotsDict().get(pointMilieu).getMot()) > 0)
    				iFin = pointMilieu - 1;
     
    			else if (mot.compareTo(getTabMotsDict().get(pointMilieu).getMot()) < 0)
    				iDebut = pointMilieu + 1;
     
    			else if (mot.compareTo(getTabMotsDict().get(pointMilieu).getMot()) == 0)
    				return true;
     
    		} while (iDebut <= iFin);
     
    		return false;
    	}
    Merci

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Essaie de changer le signe de comparaison à 0.

    < devient > et > devient <

    Tu as, à mon avis, simplement inversé ces signes.

    P.S. Je ferais ceci également afin de gagner en performance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			int cmp = mot.compareTo(getTabMotsDict().get(pointMilieu).getMot());
    			if (cmp > 0)
    				iFin = pointMilieu - 1;
     			else if (cmp < 0)
    				iDebut = pointMilieu + 1;
    			else
    				return true;

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/08/2014, 12h10
  2. recherche dichotomique dans un tableu de String
    Par new_wave dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 23/02/2007, 12h53
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 10h47
  4. Réponses: 2
    Dernier message: 05/06/2002, 13h29
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 16h23

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