在信息论中,两个等长二进制字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。例如,1011101 与 1001001 之间的汉明距离是 2。
汉明距离是以理查德·卫斯里·汉明的名字命名的,汉明在误差检测与校正码的基础性论文中首次引入这个概念。在通信中累计定长二进制字中发生翻转的错误数据位,所以它也被称为信号距离。汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。它是用来衡量2个二进制码字之间的相似程度的。
实现:
public int hammingDistance(int x, int y) {
int hamming = x ^ y;
int cnt = 0;
while(hamming > 0){
hamming = hamming & (hamming - 1);
cnt++;
}
return cnt;
}
异或知道是获取不同的,如果不同就是1,。
接下来的循环体:
首先要明白一个原理:如果一个数中只有一个1,那么将它减1后,原来1的位置变为0,比1所在位置低的位置全部变为1。
比方说原来是1000,则1000-1=0111,这样,1000&0111=0。
如果有多个1,则高位1是不会变的。比如111000-1=110111。高位的11没有动,只有低4位的1000变成了0111.
所以hamming & (hamming – 1)的意思就是将最低位的1置0.
版权声明:本文为xiao1_1bing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。