相似度计算——汉明距离

汉明距离,又称编辑距离,是一种衡量两个等长字符串之间的不同之处的度量方法,它在信息论和计算机科学领域中有着广泛的应用。

汉明距离的发展及介绍

汉明距离是由理查德·汉明(Richard Hamming)在1950年提出的,用于衡量两个等长字符串之间的不同之处。它在错误检测和纠正编码、网络编码、密码学等领域有着广泛的应用。汉明距离的概念也被应用于DNA序列分析、图像处理、语音识别等领域。

汉明距离的原理及计算方式

汉明距离的计算方式很简单,它是通过对比两个等长字符串对应位置上的字符来计算的。如果两个字符串在相同位置上的字符不同,那么它们之间的汉明距离就会加一。字符串之间的相似度越高,对应的汉明距离越小。

换句话说,两个字符串的汉明距离就是将字符串其对应位置上的不同字符的个数加起来。

例如,现在有两个十进制数a=93b=73,如果将这两个数用二进制表示的话,即a=0b1011101b=0b1001001,这两者的汉明距离为2,因为它们中有两个字符不一致,即在第三和第五个位置上的字符不同。

在计算汉明距离时,我们的目标是计算两个字符串对应位不同的字符个数,因此可以使用异或运算。

异或 运算的规则是相同为0,不同为1

我们可以计算c = a XOR b,再去统计c中出现1的个数和,这个就是a和b的汉明距离。

c++ 复制代码
class Solution {
public:
    int hammingDistance(int x, int y) {
        int c = x^y;
        int d = 0;
        while(c) {
            if(c & 1) d++;
            c = c>>1;
        }
        return d;
    }
};

上面的代码通过与运算和移位运算实现,但还有种优化方案,拿c = 0b00101000举例,c-1=0b00100111,再进行与运算c&(c-1),这个时候倒数最后一个1被消掉,此时还剩下一个1,再进行一次这样的操作,将1全部消掉。这样计算我们只执行了两次,而上面的操作执行了8次。

c++ 复制代码
class Solution {
public:
    int hammingDistance(int x, int y) {
        int c = x^y;
        int d = 0;
        while(c) {
            d++;
            c &= (c-1);
        }
        return d;
    }
};

明白了汉明距离原理的友友,可以做下这个题:汉明距离

汉明距离的应用场景

汉明距离在很多领域都有着广泛的应用。

在通信领域,汉明距离被用来检测和纠正传输中出现的错误。

在编码理论中,汉明距离被用来评估纠错码的性能。

此外,汉明距离还被用于模式识别、数据挖掘、文本相似度计算等方面。

汉明距离在密码学中的应用

在密码学中,汉明距离被用来衡量两个密文之间的相似度。它可以被用来判断密文是否被篡改或者被破解。此外,汉明距离还被用来衡量密钥的相似度,评估密码系统的安全性。

如在 SRAM PUF 计算时,通过片内汉明距离可以判断SRAM 上电序列之的稳定性,或通过片间汉明距离判断SRAM PUF作为物理指纹的独特性。

总结

汉明距离不仅是一种简单而有效的度量方法,还在信息论和计算机科学领域中有着广泛的应用。它不仅在通信、编码、模式识别等领域发挥着重要作用,还在密码学中有着重要的应用价值。

相关推荐
TL滕16 小时前
从0开始学算法——第二十天(简易搜索引擎)
笔记·学习·算法
cpp_250116 小时前
P8723 [蓝桥杯 2020 省 AB3] 乘法表
数据结构·c++·算法·蓝桥杯·题解·洛谷
再__努力1点17 小时前
【76】Haar特征的Adaboost级联人脸检测全解析及python实现
开发语言·图像处理·人工智能·python·算法·计算机视觉·人脸检测
溟洵17 小时前
【算法C++】链表(题目列表:两数相加、两两交换链表中的节点、重排链表、合并 K 个升序链表、K 个一组翻转链表7)
数据结构·c++·算法·链表
_OP_CHEN17 小时前
【C++数据结构进阶】玩转并查集:从原理到实战,C++ 实现与高频面试题全解析
数据结构·c++·算法
gugugu.17 小时前
算法:hot100---128. 最长连续序列
算法
天呐草莓17 小时前
支持向量机(SVM)
人工智能·python·算法·机器学习·支持向量机·数据挖掘·数据分析
zore_c17 小时前
【数据结构】队列——超详解!!!(包含队列的实现)
c语言·网络·数据结构·c++·笔记·算法·链表
小杰帅气17 小时前
智能指针喵喵喵
开发语言·c++·算法
智驱力人工智能17 小时前
守护生命的水上之眼 无人机人员落水检测系统的技术攻坚与应用实践 无人机溺水识别 山区水库无人机落水检测系统 水域安全无人机部署指南
大数据·人工智能·算法·安全·无人机·边缘计算