20210708-每日一题-汉明距离
汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。
这里用1和4做例子讲解:
1 --> 00000001
4 --> 00000100
两个十进制的数转换为二进制后,对应位不同的只有两个位,所以汉明距离为2
1. 第一种解法(移位实现位计数)
解析:
异或运算:当两位相同时为0,否则为1

移位运算:消失位补0

判断最后以为是否为1,如果为1,则计数器+1;
每一次操作后都向右移一位,只到为0
java例子:
1 public int hammingDistance(int x, int y) { 2 //两个数先异或运算后在与1做&位运算,运算后在进行左移,直到为0 3 int z = x ^ y; 4 int sum = 0; 5 while (z > 0){ 6 sum += z & 1; 7 z = z >> 1; 8 } 9 return sum; 10 }
运行结果:
输入:x=1,y=4

2. 第二种解法
java例子:
1 /** 2 * 最原始的方式 3 * @param x int 4 * @param y int 5 * @return count 6 */ 7 public int hammingDistance2(int x, int y) { 8 int count=0; 9 if(x==y) { 10 return 0; 11 } 12 while(x!=0||y!=0){ 13 if(x%2!=y%2){ 14 count++; 15 } 16 x=x/2; 17 y=y/2; 18 } 19 return count; 20 }
运行结果:

本文来自博客园,作者:EchoLv,转载请注明原文链接:https://www.cnblogs.com/lvdeyinBlog/articles/14987162.html

浙公网安备 33010602011771号