martes, 25 de octubre de 2011


El algoritmo Distancia de Hamming compara uno por uno los caracteres para ver cambios de uno con respecto al otro.

El algoritmo de Distancia de Levenshtein calcula numero de operaciones para convertir una cadena a otra.


Distancia de Hamming en C#
  1. public static int HammingDistance(String s1, String s2)
  2. {
  3. int counter = 0;
  4. for (int k = 0; k < s1.Length; k++)
  5. {
  6. if (s1.ElementAt(k) == s2.ElementAt(k)) counter++;
  7. }
  8. return counter;
  9. }

Distancia de Levenshtein en C#
  1. static int LevenshteinDistance(string s, string t, out double porcentaje)
  2. {
  3. porcentaje = 0;
  4. // d es una tabla con m+1 renglones y n+1 columnas
  5. int costo = 0;
  6. int m = s.Length;
  7. int n = t.Length;
  8. int[,] d = new int[m + 1, n + 1];
  9. // Verifica que exista algo que comparar
  10. if (n == 0) return m;
  11. if (m == 0) return n;
  12. // Llena la primera columna y la primera fila.
  13. for (int i = 0; i <= m; d[i, 0] = i++) ;
  14. for (int j = 0; j <= n; d[0, j] = j++) ;
  15. /// recorre la matriz llenando cada unos de los pesos.
  16. /// i columnas, j renglones
  17. for (int i = 1; i <= m; i++)
  18. {
  19. // recorre para j
  20. for (int j = 1; j <= n; j++)
  21. {
  22. /// si son iguales en posiciones equidistantes el peso es 0
  23. /// de lo contrario el peso suma a uno.
  24. costo = (s[i - 1] == t[j - 1]) ? 0 : 1;
  25. d[i, j] = System.Math.Min(System.Math.Min(d[i - 1, j] + 1, //Eliminacion
  26. d[i, j - 1] + 1), //Inserccion
  27. d[i - 1, j - 1] + costo); //Sustitucion
  28. }
  29. }
  30. /// Calculamos el porcentaje de cambios en la palabra.
  31. if (s.Length > t.Length)
  32. porcentaje = ((double)d[m, n] / (double)s.Length);
  33. else
  34. porcentaje = ((double)d[m, n] / (double)t.Length);
  35. return d[m, n];
  36. }

0 comentarios:

Publicar un comentario