两根相等长度的弦之间的汉明距离

时间:2017-01-04 05:22:58

标签: java

我需要在两根相等长度的弦之间应用汉明距离。我使用下面的代码

private int HD(String d1, String d2){

    return (d1.equals(d2)) ? 0 : 1;
} 

代码是以正确的方式编写的吗?

3 个答案:

答案 0 :(得分:2)

汉明距离计算两个弦之间的距离,但它们的长度必须相等。

  

它测量两个字符串相等的最小替换次数。

    private int HammingDistance(String One, String Two)
    {
       if (One.length() != Two.length())
        return -1;

       int counter = 0;

       for (int i = 0; i < One.length(); i++)
       {
           if (One.charAt(i) != Two.charAt(i)) counter++;
       }

       return counter;
    }

你正在做的只是比较两个不需要长度的字符串。

答案 1 :(得分:0)

两个相等长度的串之间的汉明距离是相应符号不同的位置的数量。换句话说,它是将一个字符串更改为另一个字符串所需的最小替换次数。例如,“cat”和“mat”之间的汉明距离为1。

您的代码似乎只是检查两个字符串是否长度相等。汉明距离的以下代码来源可能会对您有所帮助。

https://commons.apache.org/sandbox/commons-text/jacoco/org.apache.commons.text.similarity/HammingDistance.java.html

答案 2 :(得分:0)

您的代码只检查2个字符串是否相等,如果相等则返回0,否则为1。 它没有说汉明的距离。

汉明距离是什么?

汉明距离只不过是在比较字符串的相同索引处字母表中的差异数量,因此告诉您必须使2字符串相等的替换次数。

示例:

假设我有2根相同长度的字符串“ABCD”和“ACCC”。在这个示例中,第一个和第二个最后一个在两个字符串中是相同的,因此您需要在第二个中替换2个字符使其相同,因此在这种情况下汉明距离为2。

A B C D

A C C C

..............

0 1 0 1

因此总汉明距离为1 + 1 = 2。

汉明距离计划:

private  int getHD(String d1, String d2) {
int distance = 0;
if (d1 == null || d2 == null) {
  System.out.println("Either String is null");
  System.exit(0); // or throw a RuntimeException here
}

d1 = d1.toUpperCase();
d2 = d2.toUpperCase();

if (d1.length() != d2.length()) {
  System.out.println("The string are not equal in length.");
  System.exit(0); //or throw a RuntimeException here
}

for (int i = 0; i < d1.length(); i++) {
  if (d1.charAt(i) != d2.charAt(i))
    distance++;
}

return distance;
}