前言
汉明距离表示两个(
相同长度
)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。
在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。
例如:
- “wised” 与 “roses” 之间的汉明距离是 3
- 010001 与 100000 之间的汉明距离是 3
这里以计算两个整数的汉明距离为例。
实现代码
<script>
const hammingDistance = (num1,num2) => ((num1 ^ num2).toString(2).match(/1/g) || '').length;
document.write(hammingDistance(17,32));//3
//17的二进制数: 010001;32的二进制数:100000
</script>
总结
- 计算两个整数的汉明距离主要步骤:
Use XOR operator (^) to find the bit difference between the two numbers, convert to a binary string using toString(2). Count and return the number of 1s in the string, using match(/1/g)
通过异或运算计算两个数在二进制上的差异,将其转为二进制字符串,匹配字符串中"1"的个数
- 在JavaScript中使用异或(^)运算符返回的值为十进制数,如(17 ^ 32)返回49;
- 异或操作:
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:
二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)。
- 注意使用match方法时可能返回null