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     }

 运行结果:

 

posted @ 2021-07-08 17:23  EchoLv  阅读(130)  评论(0)    收藏  举报