相似度计算——汉明距离

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

汉明距离的发展及介绍

汉明距离是由理查德·汉明(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作为物理指纹的独特性。

总结

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

相关推荐
passer__jw76728 分钟前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
Ocean☾35 分钟前
前端基础-html-注册界面
前端·算法·html
顶呱呱程序43 分钟前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
爱吃生蚝的于勒1 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~1 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
王哈哈^_^2 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
星沁城2 小时前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
脉牛杂德2 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz2 小时前
STL--哈希
c++·算法·哈希算法
kingmax542120082 小时前
初三数学,最优解问题
算法