汉明距离

距离计算方法总结

不想你离开。 提交于 2020-03-31 05:17:34
距离计算方法总结   在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。   本文的目的就是对常用的相似性度量作一个总结。 本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5. 标准化欧氏距离 6. 马氏距离 7. 夹角余弦 8. 汉明距离 9. 杰卡德距离 & 杰卡德相似系数 10. 相关系数 & 相关距离 11. 信息熵 1. 欧氏距离 (Euclidean Distance) 欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。 (1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离: (2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离: (3)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的欧氏距离:   也可以用表示成向量运算的形式: (4)Matlab计算欧氏距离 Matlab计算距离主要使用pdist函数。若X是一个M×N的矩阵,则pdist(X)将X矩阵M行的每一行作为一个N维向量,然后计算这M个向量两两间的距离。 例子:计算向量(0,0)、(1,0)、(0,2

汉明校验码

妖精的绣舞 提交于 2020-03-24 23:54:55
首先放个图,为汉明码中信息位N与校验位K的位数关系: 2^(K-1)>=N+K+1 码距:一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。 以汉明校验码中的偶校验为例,若汉明码最高位号为m,最低位号为1,即有Hm、Hm-1、Hm-2···H2、H1。 一、 编码规则为: ⑴每个校验位Pi在汉明码中被分到位号2^(i-1)的位置上,其余各位为信息位。 ⑵汉明码的每一位Hi有多个校验位校验,其关系式是 被校验的每一位位号等于校验它的各校验位的位号之和 。 ⑶在增大码距时,应使所有编码的码距尽量均匀的增大,以保证对所有代码的检测能力平衡的提高。 二、 校验规则为: ⑴当S5~S1为00000时,表明无错。 ⑵当S5~S1中仅有一位不为0时,表明是某一校验位出错或者是3位汉明码同时出错。由于3位同时出错的情况很少,故通常认为是某一位出错,出错位是该Si对应的Pi位。 ⑶当S5~S1中有2位不为0时,表明是两位汉明码同时出错,此时只能发现错误,但无法确定出错位置。 ⑷当S5~S1中有3位不为0时,表明1位信息位出错或3位汉明码同时出错,由于3位同时出错的情况很少,故通常认为是某一位信息位出错。出错位的位号由S5~ S1 的4位代码值指明,此时不仅能检查出一位错,而且能够准确的定位

461. 汉明距离

北战南征 提交于 2020-03-07 02:59:42
https://leetcode-cn.com/problems/hamming-distance/ # define LL long long class Solution { public : int hammingDistance ( int x , int y ) { LL t = x ^ y ; LL ans = 0 ; while ( t ) { ans + = 1 ; t = t & ( t - 1 ) ; } return ans ; } } ; 补一张真值表 另外学到了一个 x & (x-1)的妙用 x-1会使得x的最右边的1变为0 x & (x-1) 假如x只有一个1,那么结果就是0了 class Solution { public : int hammingDistance ( int x , int y ) { x = x ^ y ; //异或,只留下两者不同的位数为1 y = 0 ; while ( x ) { y ++ ; x = x & ( x - 1 ) ; } return y ; } } ; python的实现一样的 class Solution : def hammingDistance ( self , x : int , y : int ) - > int : x = x ^ y ans = 0 while ( x ) : ans += 1

汉明距离计算,非字符串

给你一囗甜甜゛ 提交于 2020-02-28 10:43:26
public int hammingDistance(int x, int y) { int hamming = x ^ y; int cnt = 0; while(hamming > 0){ hamming = hamming & (hamming - 1); cnt++; } return cnt; } char[] strChars = str.toCharArray(); char[] targetChars = target.toCharArray(); int count = 0; for (int i = 0; i < 1280; i++) { if (strChars[i] == targetChars[i]) { count++; } } return 1280-count; 来源: 51CTO 作者: shaiberni 链接: https://blog.51cto.com/1348916/2474162

力扣 OJ 461. 汉明距离

时光总嘲笑我的痴心妄想 提交于 2020-02-08 15:47:19
题目: 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。 代码: class Solution { public: int hammingWeight(uint32_t n) { int ans = 0; while (n) { n ^= (n&(-n)); ans++; } return ans; } int hammingDistance(int x, int y) { return hammingWeight(x^y); } }; 来源: CSDN 作者: csuzhucong 链接: https://blog.csdn.net/nameofcsdn/article/details/104220900

461. 汉明距离

流过昼夜 提交于 2020-01-23 13:12:57
两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y ,计算它们之间的汉明距离。 注意: 0 ≤ x , y < 231. 示例: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。 思路: 异或后通过移位计算1的个数。 题解: class Solution { public : int sum = 0 ; int hammingDistance ( int x , int y ) { x = x ^ y ; while ( x > 0 ) { if ( x & 1 ) { sum ++ ; } x >>= 1 ; } return sum ; } } ; 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/hamming-distance 来源: CSDN 作者: acticn 链接: https://blog.csdn.net/acticn/article/details/104074745

LeetCode 461 ----- 汉明距离

删除回忆录丶 提交于 2020-01-18 03:10:15
LeetCode 461 ----- 汉明距离 题目描述 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 思路 异或:相同的为0,不同的为1 将两个数做异或运算,计算1的个数即可。 实现 /** * Author: lisiyu * Created: 2019/12/30 */ public class HammingDistance461 { public int hammingDistance ( int x , int y ) { return Integer . bitCount ( x ^ y ) ; } } 来源: CSDN 作者: 鱼语雨06 链接: https://blog.csdn.net/lsy18392609095/article/details/103763439

python、Scala 实现汉明距离

时光总嘲笑我的痴心妄想 提交于 2020-01-11 03:07:22
1.什么是汉明距离? 两个整数对应二进制位不同位置的数目。例如0001与1010之间对应二进制位不同位置数目是3;0001与0101之间对应二进制位不同位置数目是1. def hammingDistance(self, x: int, y: int) -> int: bx = bin(x).replace("0b", "") by = bin(y).replace("0b", "") lx = len(bx) ly = len(by) lenth = 0 ix, iy = 0, 0 i, j, n = 0, 0, 0 if lx < ly: lenth = ly while ix < (ly-lx): bx = "0" + bx ix += 1 else: lenth = lx while iy < (lx-ly): by = "0" + by iy += 1 while i<lenth and j<lenth: if bx[i] == by[j]: i+=1 j+=1 else: n = n+1 i += 1 j += 1 return n Scala实现汉明距离(主要考察逻辑运算) object Solution { def hammingDistance(x: Int, y: Int): Int = { var v:Int = x^y var n = 0 while(v !=

Hamming code-汉明码(中文)

谁都会走 提交于 2019-12-25 22:19:12
汉明码 维基百科,自由的百科全书 本文提供 了参考文献列表 ,但 其来源尚不清楚, 因为它 没有足够的 内联引文 。 请 通过 引入 更精确的引用 来帮助 改进 本文 。 ( 2013年3月 ) ( 了解如何以及何时删除此模板消息 ) 二进制汉明码 海明(7,4)代码( r = 3 ) 而得名 理查德·汉明 分类 类型 线性块代码 块长 2 - [R - 1 ,其中 [R ≥2 讯息长度 2 r − r − 1 率 1 − r / (2 r − 1) 距离 3 字母大小 2 符号 [2 r − 1,2 r − r − 1,3] 2 代码 性质 完美的代码 v Ť Ë 在 电信中 , 汉明码 是一类 线性纠错码 。 汉明码最多可以检测两位错误或纠正一位错误,而无需检测未纠正的错误。 相反,简单的 奇偶校验码 不能纠正错误,并且只能检测到奇数个错误位。 汉明码是 完美的代码 ,也就是说, 汉明码 的 块长 和 最小距离 为三 ,可以实现最高 的编码 率 。 [1] 理查德·汉 明( Richard W. Hamming) 于1950年发明了汉明代码,作为一种自动纠正 打孔卡 引入的错误的方法 读者。 Hamming在他的原始论文中阐述了他的总体思想,但特别关注了 Hamming(7,4) 代码,该代码将三个奇偶校验位添加到四个数据位。 [2] 用 数学 术语来说

汉明嵌入

纵饮孤独 提交于 2019-12-17 09:53:24
汉明嵌入简介:http://blog.csdn.net/definewl/article/details/41217441 汉明嵌入:http://blog.csdn.net/yylgg0922/article/details/47284879 汉明距离:http://blog.sina.com.cn/s/blog_663457ed01017bry.html 合集: http://github.com/vd001/Dancing-around-hamming-distance Dancing-around-hamming-distance Collection of various code snippets using hamming distance for image retrival. http://www.cs.toronto.edu/~norouzi/research/mlh/ Minimal Loss Hashing for Compact Binary Codes. http://www.cs.toronto.edu/~norouzi/research/mih/ Fast Exact Search in Hamming Space with Multi-Index Hashing. https://github.com/kevinlin311tw/caffe