什么是汉明(海明)距离?

汉明距离(Hamming Distance) 是用来衡量两个等长字符串在相同位置上不同字符的个数。它是信息论和计算机科学中常用的度量方法,通常用于比较两个二进制字符串或向量的差异。

汉明距离的定义

对于两个长度相同的字符串或二进制序列,汉明距离是它们对应位置上不同字符或不同比特的数量。

示例
  1. 二进制字符串

    • 字符串 A: 1011101
    • 字符串 B: 1001001
    • 汉明距离:在第 3 位和第 5 位不同,因此汉明距离为 2
  2. 文本字符串

    • 字符串 A: karolin
    • 字符串 B: kathrin
    • 汉明距离:在第 2、3、5 位不同,因此汉明距离为 3
  3. SimHash 应用

    • SimHash 值 1: 11010101
    • SimHash 值 2: 11010001
    • 汉明距离:在第 5 位不同,因此汉明距离为 1

汉明距离的计算方法

汉明距离的计算步骤如下:

  1. 确保两个字符串或序列长度相同。
  2. 逐位比较两个字符串或序列的对应位置。
  3. 统计不同位置的数量。
代码实现(Java)
public class HammingDistance {
    
    

    public static int hammingDistance(String str1, String str2) {
    
    
        if (str1.length() != str2.length()) {
    
    
            throw new IllegalArgumentException("Strings must be of equal length");
        }

        int distance = 0;
        for (int i = 0; i < str1.length(); i++) {
    
    
            if (str1.charAt(i) != str2.charAt(i)) {
    
    
                distance++;
            }
        }
        return distance;
    }

    public static void main(String[] args) {
    
    
        String hash1 = "11010101";
        String hash2 = "11010001";

        int distance = hammingDistance(hash1, hash2);
        System.out.println("Hamming Distance: " + distance);
    }
}

输出

Hamming Distance: 1

汉明距离的应用

  1. 文本相似度计算

    • 在 SimHash 算法中,汉明距离用于比较两个文档的 SimHash 值,判断文档是否相似。
    • 通常,汉明距离越小,文档越相似。
  2. 错误检测与纠正

    • 在通信领域,汉明距离用于检测和纠正数据传输中的错误。
  3. DNA序列分析

    • 在生物信息学中,汉明距离用于比较两个 DNA 序列的差异。
  4. 机器学习

    • 在特征工程中,汉明距离可以用于衡量样本之间的相似性。

SimHash 中的汉明距离

在 SimHash 算法中,汉明距离用于衡量两个文档的 SimHash 值的相似性:

  • 如果汉明距离小于等于 3,通常认为两个文档是相似的。
  • 如果汉明距离较大,则认为文档不相似。
示例
  • SimHash 值 1: 1101010101010101

  • SimHash 值 2: 1101010101010100

  • 汉明距离:1(文档相似)

  • SimHash 值 1: 1101010101010101

  • SimHash 值 2: 1101010101010111

  • 汉明距离:2(文档相似)

  • SimHash 值 1: 1101010101010101

  • SimHash 值 2: 1101010101010000

  • 汉明距离:3(文档相似)

  • SimHash 值 1: 1101010101010101

  • SimHash 值 2: 1101010101000000

  • 汉明距离:4(文档不相似)


总结

汉明距离是一种简单但强大的度量方法,广泛应用于文本相似度计算、错误检测、DNA 序列分析等领域。在 SimHash 算法中,汉明距离是判断文档相似性的关键指标。