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 :

Algorithmie, recherche de sous chaînes


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 20
    Par défaut Algorithmie, recherche de sous chaînes
    Bonjour à tous,
    Je dois développer un logiciel qui a partir d'un code est en mesure de l'analyser afin de me ressortir différentes caractéristiques.
    Je dispose de différents produits et equipements possédant chacun une référence. Cette référence est une partie de mon code final. Un code est donc l'assemblage de plusieurs références.

    Comme un exemple est plus parlant une démonstration :
    J'ai le code : FMR-62-H1

    J'ai les produits :
    Code 1 : FM
    Code 2 : F ou R
    Code 3 : de 4 à 9
    Code 4 : de 1 à 4
    Code 5 : H ou M
    Code 6 : 1 ou 2

    Un code valide doit être la combinaison d'une et une seule suite de code (soit code 1 à code X).

    Analyser la chaîne dans le cas simple c'est à dire, je cherche le PREMIER MOTIF TROUVE, puis je continue est assez facile à implémenter.

    Mais comment gérer les cas où il faut effectuer des retours en arrière ?
    Exemple : FMR5
    Code 1 : F ou FM
    Code 2 : M ou R
    Code 3 : 5

    Ici le problème va se situer au niveau du code 1, mon algo va voir que F correspond au premier motif de la chaîne et en continuant en code 2 se rend compte qu'il n'y a plus de solution. Comment gérer le "retour en arrière" ?

    Un exemple de code déjà réalisé (ne gère que les chaînes simples):
    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
    	public boolean analyse(Code code) {
    		int indice = 0;
    		int tailleMotif = 1;
    		int tailleMaxMotif = 3;
    		int tailleCode = code.getCode().length();
    		String motif = "";
    		boolean codeValide = true;
     
    		while(indice < tailleCode && codeValide) {
    			//recherche de motifs dans la chaine suivant une taille maximum
    			for(tailleMotif = 1; tailleMotif < tailleMaxMotif; tailleMotif++) {
    				motif = code.getCode().substring(indice, indice+tailleMotif);	//récupération du motif
    				//si le motif existe on sort de la boucle de vérification du motifs
    				if(existe(motif)) {
    					indice += tailleMotif;
    					break;
    				}
    				else if(tailleMotif == tailleMaxMotif-1) {
    					codeValide = false;
    				}
    			}
    		}
    		return codeValide;
    	}
    J'ai essayé d'être le plus clair possible, si vous avez besoin de plus de précisions n'hésitez pas.
    Merci d'avance.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2011
    Messages : 65
    Par défaut
    Alors franchement, c'est pas très clair pour moi même avec tes exemples. Cependant je comprends ton problème. Je pense que stocker tes chaines de caractères reconnus jusqu'alors dans une liste te permettra de connaitre la longueur de la chaine précédente, de décrémenter ton indice de cette longueur, ensuite tu ôtes cette chaine de ta liste(je parle de liste au cas où tu aurais besoin de faire plusieurs rollback.

    Voilà je pense que comme ça tu peux y arriver non?

  3. #3
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Difficile de t'aider alors que c'est pas très précis ou alors erroné.
    Tu donnes des exemples mais pas de formules.

    Dans ton premier cas, code 1 = "FM" et dans le deuxième cas code 1 = "F ou FM".

    Pour le problème de "back tracking", PushBackInputStream est fait pour ça.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2011
    Messages : 65
    Par défaut Bien vu
    J'avais pas pensé au PushBackInputStream, mais il est vrai que c'est une manière plus élégante pour ne pas réinventer la roue =)

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 20
    Par défaut
    En gros j'ai une chaîne.
    La seule chose dont je suis sur à propos de cette chaîne c'est qu'elle fait maximum 15 caractères et qu'elle est composé de références.
    Je possède une liste des références dans un tableau (3 caractères maximum par référence).

    Sachant que certaines références peuvent être en double dans mon tableau, genre le code 3 pour Produit 1 et Produit 2.

    Je souhaite à partir de la chaine d'origine, retrouver la suite de références qui correspond.
    Mon problème c'est que celui qui a rentré les codes a fait ça comme un sagouin et au final il n'y a aucun délimiteur entre les différentes références dans le code.

    Exemple :
    fm154256

    A partir de ça je voudrais trouver quel suite de références y correspond à partir d'un tableau de toutes mes références possibles.

    Et puis par exemple sur le code FMR-5
    Cela peut très bien être la suite de 4 références F puis M puis R puis 5
    Cela peut aussi être la suite de FM puis R puis 5
    Cela peut aussi être FMR puis 5.

    J'espère avoir été plus clair.

    Sinon PushBackInputStream à l'air pas trop mal je vais essayer de regarder de ce côté là

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    je vois pas trop l'intéret du pushbask dans ce cas. vous prenez la string, vous prenez la liste de vos "codes" et vous travaillez récursivement.


    Soit la string
    pour chaque code
    si elle démarre par ce code, ajouter le code à la liste, appeler récursivemtn avec le reste, puis nettoyer le code et passer au suivant
    et la fin de récursion, quand on a su matcher tous les caractère on a une combinaison possible. Quand on a tout fait, on a toutes les combinaisons pour la ligne

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

Discussions similaires

  1. Recherche de sous chaîne en récursif
    Par Kriegor D Will dans le forum Débuter
    Réponses: 9
    Dernier message: 21/06/2013, 10h33
  2. Recherche une sous chaîne de caractères dans un Vector
    Par brino1987 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 12/06/2013, 14h31
  3. Réponses: 16
    Dernier message: 10/01/2008, 15h12
  4. Recherche d'une chaîne dans une sous chaîne
    Par teen6517 dans le forum Langage
    Réponses: 3
    Dernier message: 29/03/2007, 19h10
  5. Recherche de sous chaîne
    Par Sebou77 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 31/03/2006, 19h24

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