绪:
汉明距离是一种权衡特征距离的计较方式 ,
其本家儿要思惟是找到两个特征之间的差别大小 , 也可以说是相似性;
汉明距离是以理查德·卫斯里·汉明的名字定名的 , 汉明在误差检测与校正码的根本性论文中初次引入这个概念 。
用来权衡2个二进制码字之间的相似水平的 。
文章插图
需要这些哦
C++编译器
方式/
1汉明距离界说:
从二进制上讲是:两个等长字符串的二进制对应位不不异的位个数;
例如:
“toned”和”roses”的汉明距离是3 。
1011101和1001001的汉明距离是2 。
2173896和2233796的汉明距离是3 。
文章插图
2汉明距离的意义:
对于二进制字符串a和b来说 ,
汉明距离等于a^b中1的数量 , 又叫做汉明权重 。
长度为n的二进制字符通同过汉明距离组成了一个怀抱空间(metric space) ,
称汉明立方(Hamming Cube);
下图给出了在hypercube中:
0100→1001 (红色)的汉明距离是 3;
【C++:汉明距离的实现】0110→1110 (蓝色)的汉明距离是 1;
文章插图
3汉明距离实现思绪:
①将两个给定的数进行异或(^)运算后保留在变量a中 ,
则汉明距离就是二进制a中1的个数;
②当a不为0时 , 和0x01进行按位与(&)运算 , 若是成果为1 , 则统计变量加一
③将a右移一位 , 反复第02步
文章插图
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计较两个整数的二进制汉明距离;
Wegner (1960)给出了一种计较汉明权重(即计较给定整数的二进制暗示中1的个数)的算法 , 经由过程频频查找并消弭最低的非零位来实现 。
基于此利用C说话实现的计较汉明距离的算法如下:
推荐阅读
- C++:queue队列的使用
- 在Windows映射通过绘制直线来查找两个空间距离
- 下载、安装Visual C++6.0中文版
- dev c++怎么修改简体中文
- 如何在visual studio2015 中配置编写C、C++程序
- ps里如何距离文字外缘做描边
- 怎样解决手机距离传感器异常
- 如何连接wifi
- word编号与后面文本间的距离太大怎么调整
- CDT 在Eclipse For Mac环境下安装C/C++插件