À l'aide de boucle pour obtenir la distance de Hamming entre les 2 chaînes
Dans cette tâche, j'ai besoin d'obtenir la distance de Hamming (la distance de Hamming entre deux cordes de même longueur est le nombre de positions au cours de laquelle les symboles correspondants sont différent - à partir de Wikipedia) entre les deux chaînes sequence1 et sequence2.
J'ai d'abord fait 2 nouvelles chaînes qui est les 2 chaînes d'origine, mais à la fois à la diminution des cas de rendre la comparaison plus facile. Ensuite, j'ai eu recours à l'aide de la boucle for et si pour comparer les 2 chaînes. Pour toutes les différences dans les caractères de ces 2 paires de chaîne, la boucle serait ajouter 1 à un int x = 0. Le rendement de la méthode sera la valeur de ce x.
public static int getHammingDistance(String sequence1, String sequence2) {
int a = 0;
String sequenceX = sequence1.toLowerCase();
String sequenceY = sequence2.toLowerCase();
for (int x = 0; x < sequenceX.length(); x++) {
for (int y = 0; y < sequenceY.length(); y++) {
if (sequenceX.charAt(x) == sequenceY.charAt(y)) {
a += 0;
} else if (sequenceX.charAt(x) != sequenceY.charAt(y)) {
a += 1;
}
}
}
return a;
}
Donc le code semble bon et assez fonctionnel? Tout ce que je pouvais réparer ou optimiser le code? Merci à l'avance. Je suis une grosse noob donc pardonnez-moi si j'ai demandé quelque chose de stupide
anything I could do to fix
est une question qui appartient ici.optimize
question appartient au Code d'Examen- Cette question est mieux adapté à codereview.stackexchange.com. Vous obtiendrez plus belle des réponses, là aussi.
- est-ce devoirs?
- aussi votre code n'est pas sorties de la réponse correcte. J'ai testé avec abcd et abdd , la sortie est de 12
- Avez-vous regardé Levenstein distance? Il y a beaucoup de bibliothèques qui le font, y compris apache commons
- Notez que les devoirs de la balise a été desolved: meta.stackexchange.com/questions/147100/...
Vous devez vous connecter pour publier un commentaire.
De mon point la suite de la mise en œuvre serait ok:
votre code est complètement hors tension.
comme vous l'avez dit vous-même, la distance est le nombre de lieux où les chaînes de caractères différents - alors vous ne devriez avoir 1 boucle, allant de plus de deux cordes à la fois. au lieu de cela, vous avez 2 boucles imbriquées que de comparer tous les index dans la chaîne un pour chaque index dans la chaîne b.
aussi, la rédaction d'un si condition que les résultats de
a+=0
est une perte de temps.essayez plutôt ceci:
aussi, c'est encore une approche naïve qui probbaly pas de travail complexe, avec des caractères unicode (où 2 personnages peuvent logiquement être égaux, mais pas le même caractère de code)
Votre code est OK, cependant, je vous suggère les améliorations suivantes.
charAt()
de la chaîne. Obtenez char tableau de chaîne à l'aide detoCharArray()
avant la boucle, et ensuite travailler avec ce tableau. C'est plus lisible et plus efficace.La structure
semble redondant. Fixer:
si (sequenceX.charAt(x) == sequenceY.charAt(y)) {
a += 0;
} else {
a += 1;
}
En outre de prendre en compte le fait que j'ai recommandé de travailler avec le tableau de le changer pour quelque chose comme:
a += seqx[x] == seqY[x] ? 0 : 1
moins de code, moins de bugs...
EDIT: comme mentionded par @radai vous n'avez pas besoin
if/else
structure: ajout de0
àa
est redondante.