string型哈希值的明氏距离比较
2014-09-26 13:58
169 查看
前一段时间在网上找以图搜图的资料,发现了感知哈希算法,得出的哈希值以字符串形式保存,我们管这种形式叫做哈希指纹。字符串中为十六进制数,需计算其二进制中的明氏距离,即二进制表示中不一样位数的个数。如下测试代码:
// test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; int LSH(string str1,string str2); int sub(char a,char b); int _tmain(int argc, _TCHAR* argv[]) { string str1 = "9e0f53"; string str2 = "0b672a"; cout<<"str1 = "<<str1.c_str()<<endl; cout<<"str2 = "<<str2.c_str()<<endl; int dis = LSH(str1,str2); cout<<"dis = "<<dis<<endl; int a; cin >> a; return 0; } int LSH(string str1,string str2) { //int L = sizeof(str1.c_str()); int L = str1.length(); cout<<"L = "<<L<<endl; int dis = 0; for(int i=0;i<L;i++) { dis += sub(str1[i],str2[i]); } return dis; } unsigned char char2hex(char a) { unsigned char t(0); switch(a) { case 'a': t = 10; break; case 'b': t = 11; break; case 'c': t = 12; break; case 'd': t = 13; break; case 'e': t = 14; break; case 'f': t = 15; break; default: t = a - '0'; break;; } return t; } int sub(char a,char b) { unsigned char a1 = char2hex(a); unsigned char b1 = char2hex(b); unsigned char c1 = a1^b1; cout<<"a1 = "<< (int)a1 <<endl; cout<<"b1 = "<< (int)b1 <<endl; //cout<<"c1 = "<< (int)c1 <<endl; int t(0); unsigned char tem(1); for(int i=0;i<8;i++) { if(c1&(tem)) t++; tem = tem<<1; } cout<<"t = "<<(int)t <<endl; return t; }
运行结果:
<img src="https://img-blog.csdn.net/20140926140419752?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGF1dF96amI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" style="font-family: Arial, Helvetica, sans-serif;" alt="" />
相关文章推荐
- 几种常见无线摄像头的传输距离比较
- 为什么本文中的代码在比较哈希值的时候,都是经过固定的时间才返回结果?
- HOW TO:使用 C# .NET 计算和比较哈希值
- 地图定位 - 定位,持续定位设置,比较两个位置的距离 地理编码 反地理编码
- 数据挖掘之曼哈顿距离、欧几里距离、明氏距离、皮尔逊相关系数、余弦相似度Python实现代码
- 计算两GPS点之间的距离(比较精确)
- js、jquery比较String型数字大小的时候应该注意的问题
- Patrick and Shopping(距离比较)
- Python “编辑距离”(Levenshtein distance)函数的比较
- 计算两GPS点之间的距离(比较精确)
- 【高端链路状态路由协议与低端距离矢量路由协议比较】
- 最短编辑距离算法(字符串比较)
- 比较字符串总结:如果计算两个字符串的相似度或者距离
- 明氏距离
- 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定
- knn距离公式比较
- 运行时间和当前时间比较,距离现在时间的分钟数。
- 距离矢量与链路状态路由协议比较
- 各地图gps坐标系统比较与转换以及经纬度距离计算MATLAB脚本
- 计算XY坐标距离,并且比较目标最近的距离