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

Contribuez Discussion :

[Java] Distance de Levenshtein


Sujet :

Contribuez

  1. #1
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut [Java] Distance de Levenshtein
    Implémentation en Java du calcul de la distance de Levenshtein entre 2 chaines de caractères:

    Code java : 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
    /**
     * compute the Levenshtein distance between two strings
     * @author Xavier Philippeau
     * 
     * @param s0 String 0
     * @param s1 String 1
     * @return the Levenshtein distance
     */
    public int levenshtein(String s0, String s1) {
    	int len0 = s0.length()+1;
    	int len1 = s1.length()+1;
     
    	// the array of distances
    	int[] cost = new int[len0];
    	int[] newcost = new int[len0];
     
    	// initial cost of skipping prefix in String s0
    	for(int i=0;i<len0;i++) cost[i]=i;
     
    	// dynamicaly computing the array of distances
     
    	// transformation cost for each letter in s1
    	for(int j=1;j<len1;j++) {
     
    		// initial cost of skipping prefix in String s1
    		newcost[0]=j-1;
     
    		// transformation cost for each letter in s0
    		for(int i=1;i<len0;i++) {
     
    			// matching current letters in both strings
    			int match = (s0.charAt(i-1)==s1.charAt(j-1))?0:1;
     
    			// computing cost for each transformation
    			int cost_replace = cost[i-1]+match;
    			int cost_insert  = cost[i]+1;
    			int cost_delete  = newcost[i-1]+1;
     
    			// keep minimum cost
    			newcost[i] = min(cost_insert, cost_delete, cost_replace);
    		}
     
    		// swap cost/newcost arrays
    		int[] swap=cost; cost=newcost; newcost=swap;
    	}
     
    	// the distance is the cost for transforming all letters in both strings
    	return cost[len0-1];
    }

    Je vous laisse implémenter le code de la methode min().

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arabie Saoudite

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2014
    Messages : 51
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    Et si on veut afficher à chaque étape le mot s1 après lui avoir effectué une opération jusqu'à ce qu'il vaille le mot s2 ?

    Bien cordialement.

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Que veux tu faire exactement ?
    Tester si s1 et s2 sont égaux, si ce n'est pas le cas alors le modifier puis l'afficher.
    Puis itérer jusqu'à ce que s1 = s2 ?

Discussions similaires

  1. Distance de Levenshtein sur un tableau de chaines
    Par kawther dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/04/2015, 15h35
  2. [XL-2010] Fonction Distance de levenshtein sous Excel
    Par Patrick717 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/06/2013, 17h01
  3. [À télécharger] Distance de Levenshtein
    Par 3DArchi dans le forum Téléchargez
    Réponses: 0
    Dernier message: 06/11/2010, 13h03
  4. [Stratégie] Contrôle d'une application Java à distance
    Par muad'dib dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 05/08/2008, 11h44
  5. distance de levenshtein
    Par freemasons dans le forum C++
    Réponses: 11
    Dernier message: 10/04/2008, 11h31

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