背景
在计算机科学、信息论与数据通信领域,**汉明距离(Hamming Distance)**是一个极其重要的概念。它用于衡量两个等长字符串之间的差异程度,定义为:
在对应位置上不同字符的个数。
例如:
- "1011101"
- "1001001"
不同位置有 2 处,因此汉明距离为 2。
汉明距离最早由美国数学家理查德·汉明(Richard Hamming)提出,并应用于著名的汉明码(Hamming Code)中,用于错误检测与纠正。
在实际工程中,汉明距离广泛应用于:
- 数据通信中的错误检测
- 哈希相似度比较
- 图像相似度算法(感知哈希)
- DNA 序列比对
- 机器学习中的特征差异度量
- 密码学中的安全分析
在算法面试中,汉明距离也是经典高频题目之一,尤其是'两个整数之间的汉明距离'问题。
本项目将使用 Go 语言系统实现汉明距离算法,并从多个角度进行教学级讲解。
需求
本项目实现一个完整的汉明距离算法系统,具体需求如下:
基础功能需求
- 实现字符串版本的汉明距离
- 实现整数版本的汉明距离(位运算)
- 若字符串长度不同,返回错误提示
- 时间复杂度 O(n)
增强功能需求
- 支持 Unicode 字符串
- 支持批量比较
- 提供高性能位运算版本
- 支持大整数
代码规范要求
- 所有代码放在一个代码块中
- 不同文件用注释区分
- 代码必须包含详细中文注释
- 提供 main 函数测试案例
扩展需求
- 优化整数版本性能
- 使用 Brian Kernighan 算法优化
- 与 LeetCode 题目对标
- 性能对比说明
技术原理
在正式编码前,我们需要理解几个核心知识点。
什么是汉明距离?
定义: 对于两个等长字符串 s1 和 s2: HammingDistance = Σ (s1[i] != s2[i]) 即逐字符比较,不同则计数。
字符串版本 vs 整数版本
字符串版本
适用于:
- 文本比较
- DNA 序列
- 哈希字符串比较
时间复杂度:O(n)
整数版本
对于两个整数 x 和 y: 步骤:
- 计算 x ^ y(异或)
- 统计结果中 1 的个数
因为:
- 相同位异或为 0
- 不同位异或为 1
这就是汉明距离。
Brian Kernighan 算法
统计二进制中 1 的个数优化方法:
while n != 0:
n = n & (n - 1)
每次操作都会消除最右侧的 1。
时间复杂度:O(k),其中 k 为 1 的个数。

