64. 海明距离(Hamming Distance)
【本文链接】
http://www.cnblogs.com/hellogiser/p/hamming-distance.html
【介绍】
在信息领域,两个长度相等的字符串的海明距离是在相同位置上不同的字符的个数,也就是将一个字符串替换成另一个字符串需要的替换的次数。
例如:
xxxxyy和xxxxzz的海明距离是2;
111100 和 111111 的海明距离是2;
对于二进制数字来说,海明距离的结果相当于a^b结果中1的个数。
【字符串】
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/*
version: 1.0 author: hellogiser blog: http://www.cnblogs.com/hellogiser date: 2014/5/30 */ // hamming distance of two strings unsigned hamdist(const char *str1, const char *str2) { // aaabb aaacc if (str1 == NULL || str2 == NULL) return 0; int len1 = strlen(str1); int len2 = strlen(str2); if (len1 != len2) return 0; unsigned dist = 0; while(*str1 && *str2) { dist += (*str1 != *str2) ? 1 : 0; str1++; str2++; } return dist; } |
【数字】
C++ Code
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/*
version: 1.0 author: hellogiser blog: http://www.cnblogs.com/hellogiser date: 2014/5/30 */ // hamming distance of two integer 0-1 bits unsigned hamdist(unsigned x, unsigned y) { // 11111 11100 unsigned dist = 0, val = x ^ y; // XOR // Count the number of set bits while(val) { ++dist; val &= val - 1; } return dist; } |
【参考】
http://blog.csdn.net/fuyangchang/article/details/5637464
http://en.wikipedia.org/wiki/Hamming_distance
http://my.oschina.net/u/1401481/blog/223223
【本文链接】