算法:hamming 海明距离(汉明距离):Java实现

本文介绍了信息论中的汉明距离概念,它是衡量两个等长二进制字符串间差异的指标,通过计数对应位置上不同字符的数量来定义。文章还详细解释了汉明距离在通信、信号处理和编码理论中的应用,并提供了一个使用异或运算和位操作来高效计算汉明距离的算法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在信息论中,两个等长二进制字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。例如,1011101 与 1001001 之间的汉明距离是 2。

        汉明距离是以理查德·卫斯里·汉明的名字命名的,汉明在误差检测与校正码的基础性论文中首次引入这个概念。在通信中累计定长二进制字中发生翻转的错误数据位,所以它也被称为信号距离。汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。它是用来衡量2个二进制码字之间的相似程度的。

实现:

    public int hammingDistance(int x, int y) {
        int hamming = x ^ y;
        int cnt = 0;
        while(hamming > 0){
            hamming = hamming & (hamming - 1);
            cnt++;
        }
        return cnt;
    }

异或知道是获取不同的,如果不同就是1,。

接下来的循环体:

首先要明白一个原理:如果一个数中只有一个1,那么将它减1后,原来1的位置变为0,比1所在位置低的位置全部变为1。

比方说原来是1000,则1000-1=0111,这样,1000&0111=0。

如果有多个1,则高位1是不会变的。比如111000-1=110111。高位的11没有动,只有低4位的1000变成了0111.

所以hamming & (hamming - 1)的意思就是将最低位的1置0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值