public class HammingDistance {
public static void main(String[] args) {
int dis = hammingDistance03(1,4);
System.out.println(dis);
}
//根据汉明重量的思路,比较每一个二进制位看看是否相同
public static int hammingDistance(int x, int y) {
int dis = 0;
int mask = 1;
for (int i = 0; i < 32; i ++) {
if ((x & mask) != (y & mask)) {
dis ++;
}
mask <<= 1;//如 0000 0000 0000 0000 0000 0000 0000 0001--> 0000 0000 0000 0000 0000 0000 0000 0010 不断的左移一位
}
return dis;
}
//思路2:内置计算等于 1 的位数函数
public static int hammingDistance02(int x, int y) {
return Integer.bitCount(x ^ y);//计算x 异或 y 的 1 的位数
}
//思路3:移位方法,汉明距离就是x ^ y 的结果它的二进制表示1的个数
public static int hammingDistance03(int x, int y) {
int xor = x ^ y;
int dis = 0;
while (xor != 0) {
if (xor % 2 == 1) {
dis += 1;
}
xor >>= 1;//右移一位
}
return dis;
}
//思路4:布赖恩·克尼根算法
public static int hammingDistance04(int x, int y) {
int xor = x ^ y;
int dis = 0;
while (xor != 0) {
dis ++;
xor = xor & (xor - 1);//消除xor最右边的1,跳过 两个1 中间的0
}
return dis;
}
}
汉明距离的4种思路及JAVA代码
最新推荐文章于 2023-11-12 11:41:20 发布