汉明距离

汉明距离

概念

1100 和 1010 的汉明距离为2,其实就是二进制异或后1的个数。

怎么求

首先,当然可以将两个数异或后,一个一个数1。。

或者是用n&(n-1)的技巧,就是执行n中1的个数次后,n&(n-1)为0。因为无论n是什么数,n&(n-1)的末位一定是0,想想也对,n的末尾要么是0要么是1,减一之后,进行与操作的话,末位肯定就是0了,而因为要减1,末尾前面的位肯定要退位,所以最终就会得到0

就是求1100和1010的汉明距离,先异或

 1100
^1010
-----
 0110

然后开始循环n&(n-1)

 0110
&0101
-----
 0100    一次
 
 0100
&0011
-----
 0000    两次

经过两次循环就得到了0,汉明距离就是这个2

def hanming(a, b):
    tmp = a ^ b
    hm_dis = 0
    while tmp:
        tmp = tmp & (tmp - 1)
        hm_dis += 1
    return hm_dis

原本只是想找怎么模拟输入。。

posted @ 2017-07-05 15:54  Nanrou  阅读(406)  评论(0编辑  收藏  举报