上QQ阅读APP看书,第一时间看更新
4.1.3 编程实现——计算汉明距离
汉明距离是二进制运算在工业上的一种应用。汉明距离经常用于信息传输纠错、图片相似度分析、数据编码抗干扰性分析等场景。
汉明距离的定义非常简单,对于两个二进制数,汉明距离是指其对应位上不一致的位的个数。例如,二进制数1010与二进制数1111的从右向左第1位和第3位数字不同,因此其汉明距离为2。现在输入两个整数,计算它们之间的汉明距离。
汉明距离是以理查德·卫斯里·汉明的名字命名的,其在信号误差检测和校正码相关的论文中首次引入这个概念,在通信工程中具有重要意义。汉明距离描述了从一个信号变成另一个信号所需要做的最小操作,目前在图片处理相关应用中,比较汉明距离也是一种常用的图片相似度算法。
要解决本题,还是要从二进制位运算的性质入手,汉明距离的值实际上就是两个二进制数不同位的个数。我们知道,位运算中的异或运算可以将两个二进制数所有不同的位强制置为1,相同的位强制置为0,因此我们可以使用异或运算来将所有不同的位标记出来,之后只需要计算结果中为1的二进制位的个数即可,这个过程可以借助与运算和位移运算实现。
示例代码如下:
如以上代码所示,通过与1进行与运算可以快速地判断二进制数字的最低位是否为1,借助循环右移运算,可以方便地获取到二进制数值中1的个数。