汉明距离(Hamming Distance)

​1. 定义​

汉明距离是指两个等长字符串 在相同位置 上不同字符 的个数。它常用于衡量两个字符串的相似度,广泛应用于编码理论、信息论、密码学、生物信息学等领域。

​2. 数学表达​

给定两个等长的字符串 x 和 y,汉明距离 d(x,y) 定义为:

其中:

  • n 是字符串的长度,
  • xi 和 yi 分别是 x 和 y 的第 i 个字符,
  • Ⅱ(⋅) 是指示函数(当条件成立时返回 1,否则返回 0)。
​3. 示例​
  • ​二进制字符串​:

    • x="10110", y="11110"
    • 比较每一位:
      • 第 1 位:1=1 → 相同
      • 第 2 位:0 != 1 → 不同(+1)
      • 第 3 位:1=1 → 相同
      • 第 4 位:1=1 → 相同
      • 第 5 位:0=0 → 相同
    • 汉明距离 d(x,y)=1​
  • ​ASCII 字符串​:

    • x="karolin", y="kathrin"
    • 比较每一位:
      • k = k → 相同
      • a = a → 相同
      • r ≠ t → 不同(+1)
      • o ≠ h → 不同(+1)
      • l = r → 不同(+1)
      • i = i → 相同
      • n = n → 相同
    • 汉明距离 d(x,y)=3
​4. 计算方法​
  • 逐位比较法 (适用于短字符串):
    • 直接遍历两个字符串的每一位,统计不同字符的数量。
  • 异或运算(XOR)​ (适用于二进制字符串):
    • 对两个二进制数进行按位异或,然后统计结果中 1 的个数(即 popcount 或 bit_count)。
​5. 代码实现(Python)​​
复制代码
def hamming_distance(x: str, y: str) -> int:
    if len(x) != len(y):
        raise ValueError("Strings must be of equal length")
    return sum(c1 != c2 for c1, c2 in zip(x, y))

# 示例
x = "10110"
y = "11110"
print(hamming_distance(x, y))  # 输出: 1
​6. 应用场景​
  1. 纠错编码(Error-Correcting Codes)​ :
    • 如汉明码(Hamming Code),用于检测和纠正数据传输中的错误。
  2. 模式识别(Pattern Recognition)​ :
    • 比较两个特征向量的相似度。
  3. 生物信息学(Bioinformatics)​ :
    • 比较 DNA 序列的相似性(如 SNP 分析)。
  4. 密码学(Cryptography)​ :
    • 衡量密钥或哈希值的差异。
​7. 扩展:加权汉明距离​

如果不同字符的"代价"不同,可以定义加权汉明距离​:

其中 wi​ 是第 i 位的权重。

​8. 相关概念​
  • 编辑距离(Levenshtein Distance)​ :
    • 允许插入、删除、替换操作,计算两个字符串的最小编辑步数。
  • Jaccard 相似度 :
    • 用于集合相似度计算,不要求等长。
​9. 总结​
特性 汉明距离 编辑距离
​输入要求​ 等长字符串 任意长度字符串
​操作​ 仅比较对应位 允许增删改
​应用​ 二进制/字符匹配 文本相似度

汉明距离是衡量等长字符串差异的基础工具,在计算机科学和工程领域有广泛应用。

相关推荐
特立独行的猫a9 分钟前
仓颉语言UI开发实战:我用仓颉写了个桌面版力扣
算法·leetcode·ui·tauri·仓颉·cj-tarui
艺杯羹9 分钟前
Windows跨平台编码地雷全解:从GBK静默崩溃到内核级原子写入防御
人工智能·python·桌面客户端
用户83562907805110 分钟前
使用 Python 在 Excel 中识别并高亮重复数据与唯一数据
后端·python
CCblandy10 分钟前
Agent 工具调用怎么编排?本机实测:并行只到 2.63 倍,慢的先发省 30ms,CPU 活加 worker 无效
人工智能·后端·python·性能优化
茉莉玫瑰花茶19 分钟前
GO [ 标准库 ]
开发语言·后端·golang
用户83562907805121 分钟前
使用 Python 在 Excel 中查找、替换数据并高亮显示
后端·python
GPU实战笔记25 分钟前
PyCharm 接云 GPU:远端项目连接与远程解释器别混为一谈
python·pycharm·ssh·远程开发·云gpu
y1su26 分钟前
Leetcode 动态规划 模板
java·数据结构·算法·leetcode·动态规划
半杯咖啡半行码31 分钟前
C++11核心特性详解:从C++11到C++20 的现代C++指南
开发语言·c++
范中勤44 分钟前
Python 协程(Coroutine)通俗讲解与技术原理:从 await 挂起到 Agent 高并发
python·agent·协程·并发编程·asyncio