当前位置: 首页 > news >正文

⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Hamming Distance

Hamming Distance(汉明距离)是用于衡量两个等长字符串在相同位置上不同字符的个数的度量。它通常用于比较两个二进制字符串或编码序列的差异。

定义

给定两个长度相同的字符串 A A A B B B,它们的汉明距离 D ( A , B ) D(A,B) D(A,B) 是在相同位置上字符不同的位置的数量。

示例

  1. 二进制字符串:
    • A=1011101
    • B=1001001
    • 汉明距离 D ( A , B ) = 2 D(A,B)=2 D(A,B)=2(第3位和第5位不同)。
  2. 字符串:
    • A=“karolin”
    • B=“kathrin”
    • 汉明距离 D ( A , B ) = 3 D(A,B)=3 D(A,B)=3(第3、4、5位不同)。

应用

  • 错误检测与纠正:在通信和编码理论中,汉明距离用于检测和纠正数据传输中的错误。
  • 生物信息学:用于比较 DNA 序列的相似性。
  • 机器学习:在分类算法中,用于计算样本之间的距离。

计算步骤

  • 比较两个字符串的每一位。
  • 统计不同位的数量。
  • 返回统计结果作为汉明距离。

公式

对于长度为 n n n 的两个字符串 A A A B B B,汉明距离为:
D ( A , B ) = ∑ i = 1 n δ ( A i , B i ) D(A,B)= ∑_{i=1}^n δ(A_i ,B_i) D(A,B)=i=1nδ(Ai,Bi)
其中, δ ( A i , B i ) δ(A_i ,B_i ) δ(Ai,Bi) 是指示函数,当 A i ≠ B i A_i \neq B_i Ai=Bi 时为1,否则为0。

461. Hamming Distance

The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, return the Hamming distance between them.

Example 1:

Input: x = 1, y = 4
Output: 2
Explanation:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑
The above arrows point to positions where the corresponding bits are different.

Example 2:

Input: x = 3, y = 1
Output: 1

C++ 实现

int hammingDistance(int x, int y) {
    int xor_result = x ^ y;  // 异或操作
    int distance = 0;
    
    // 统计 xor_result 中 1 的个数
    while (xor_result != 0) {
        distance += xor_result & 1;  // 检查最低位是否为 1
        xor_result >>= 1;  // 右移一位
    }
    
    return distance;
}

复杂度分析

这个算法的时间复杂度为 O ( l o g   n ) O(log\, n) O(logn),其中 n n nxy 的最大值。

相关文章:

  • 如何解决Redis的缓存雪崩、缓存击穿、缓存穿透?
  • 前端UI编程基础知识:基础三要素(结构→表现→行为)
  • CNN-BiLSTM、BiLSTM、CNN多变量时间序列光伏功率预测Matlab
  • SpringCloud一些基础概念(自用扫盲)
  • Pytest自动化测试框架pytest-xdist分布式测试插件
  • 医院HIS系统的安全解决方案
  • 医药制造行业现状 医药制造行业内检实验室LIMS
  • 蓝桥杯备考:set容器用法(lower_bound)---营业额统计
  • 30、Vuex 为啥可以进行缓存处理
  • ES6回顾:闭包->(优点:实现工厂函数、记忆化和异步实现)、(应用场景:Promise的then与catch的回调、async/await、柯里化函数)
  • 二进制求和(js实现,LeetCode:67)
  • 如何在宝塔mysql修改掉3306端口
  • 数据库系统概念全面解析
  • 【从零开始学习计算机科学】数据库系统(五)DBMS查询处理
  • 高德爬取瓦片和vue2使用
  • 【ubuntu】——wsl中使用windows中的adb
  • 深度学习项目--基于DenseNet网络的“乳腺癌图像识别”,准确率90%+,pytorch复现
  • Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
  • Spring Boot(十六):使用 Jenkins 部署 Spring Boot
  • 51单片机的keil c51软件安装教程
  • 试点首发进口消费品检验便利化措施,上海海关与上海商务委发文
  • 时隔三年,俄乌直接谈判重启
  • 特朗普称即将与伊朗达成核协议,外交部:中方愿继续发挥建设性作用
  • 一种声音·阿甘本|即将到来的中世纪;“新”与“旧”……
  • 铁路端午假期运输火车票今日开售,12306提升应对超大规模并发访问需求能力
  • 中国进出口银行:1-4月投放制造业中长期贷款超1800亿元