C++:汉明距离的实现

绪:

汉明距离是一种权衡特征距离的计较方式,

其本家儿要思惟是找到两个特征之间的差别巨细,也可以说是相似性;

汉明距离是以理查德·卫斯里·汉明的名字定名的,汉明在误差检测与校正码的根本性论文中初次引入这个概念。

用来权衡2个二进制码字之间的相似水平的。

东西/原料

  • C++编译器

方式/步调

  1. 1

    汉明距离界说:

    从二进制上讲是:两个等长字符串的二进制对应位不不异的位个数;

    例如:

    “toned”和”roses”的汉明距离是3。

    1011101和1001001的汉明距离是2。

    2173896和2233796的汉明距离是3。

  2. 2

    汉明距离的意义:

    对于二进制字符串a和b来说,

    汉明距离等于a^b中1的数量,又叫做汉明权重。

    长度为n的二进制字符通同过汉明距离组成了一个怀抱空间(metric space),

    称汉明立方(Hamming Cube);

    下图给出了在hypercube中:

    0100→1001 (红色)的汉明距离是 3;

    0110→1110 (蓝色)的汉明距离是 1;

  3. 3

    汉明距离实现思绪:

    ①将两个给心猿意马的数进行异或(^)运算后保留在变量a中,

    则汉明距离就是二进制a中1的个数;

    ②当a不为0时,和0x01进行按位与(&)运算,若是成果为1,则统计变量加一

    ③将a右移一位,反复第02步

  4. 4

    代码:

    //汉明距离计较

    int hamDist(char *a, char *b)

    {

           int dist = 0;

           while (*a && *b)

           {

                  dist += (*a != *b)?1:0;//异或

                  *a++;

                  *b++;

           }

           return dist;

    }

    int main()

    {

           char *a,*b;//字符指针

           a = "0000100100000001";

           b = "0010100001100100";

           int dist = hamDist(a,b);

           printf("%d\n",dist);

           getchar();

           return 0;

    }

  5. 5

    计较两个整数的二进制汉明距离;

    Wegner (1960)给出了一种计较汉明权重(即计较给心猿意马整数的二进制暗示中1的个数)的算法,经由过程频频查找并消弭最低的非零位来实现。

    基于此利用C说话实现的计较汉明距离的算法如下:

    //while轮回的次数就是汉明距离;

    //计较汉明距离

    unsigned int value = a^b;

    int GetHammingWeight(unsigned int value)

    {

           if(value == 0)

                  return 0;

           int a = value;

           int b = value -1;

           int c = 0;

           int count = 1;

           while(c = a & b)

           {

                  count++;

                  a = c;

                  b = c-1;

           }

           return count;

    }

  6. 6

    汉明距离的应用:

    汉明距离本家儿要应用在通信编码范畴上,用于拟定可纠错的编码系统。

    在机械进修范畴中,汉明距离也经常被用于作为一种距离的怀抱体例;

注重事项

  • C++汉明距离的实现;计较给心猿意马整数的二进制暗示中1的个数
  • while轮回的次数就是汉明距离;
  • 发表于 2018-05-08 00:00
  • 阅读 ( 972 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

联系我们:uytrv@hotmail.com 问答工具