汉明距离

simhash进行文本查重

孤人 提交于 2019-12-06 14:05:13
http://blog.csdn.net/lgnlgn/article/details/6008498 有1亿个不重复的64位的01字符串,任意给出一个64位的01字符串f,如何快速从中找出与f汉明距离小于3的字符串? 大规模网页的近似查重 主要翻译自WWW07的 Detecting Near - Duplicates for Web Crawling WWW上存在大量内容近似相同的网页,对搜索引擎而言,去除近似相同的网页可以提高检索效率、降低存储开销。 当爬虫在抓取网页时必须很快能在海量文本集中快速找出是否有重复的网页。 论文主要2个贡献: 1. 展示了simhash可以用以海量文本查重 2. 提出了一个在实际应用中可行的算法。 两篇文本相似度普遍的定义是比较向量化之后两个词袋中词的交集程度,有cosine,jaccard等等 如果直接使用这种计算方式,时间空间复杂度都太高,因此有了simhash这种降维技术, 但是如何从传统的向量相似度能用simhash来近似,论文没提,应该是有很长一段推导要走的。 Simhash 算法 一篇文本提取出内容以后,经过基本的预处理,比如去除停词,词根还原,甚至chunking,最后可以得到一个向量。 对每一个term进行hash算法转换,得到长度f位的hash码,每一位上1-0值进行正负权值转换,例如f1位是1时,权值设为 +weight,

461 汉明距离

孤者浪人 提交于 2019-12-05 03:47:59
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/hamming-distance 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 题解: java Integer的位与运算方法: class Solution { public int hammingDistance( int x, int y) { return Integer.bitCount(x^y); } } 题解2: class Solution { public int hammingDistance( int x, int y) { int cnt= 0 ; while (x!= 0 ||y!= 0 ){ if ((y& 1 )!=(x& 1 )) cnt++; x>>= 1 ; y>>= 1 ; } return cnt; } } 来源: https://my.oschina.net/u/4133432/blog

2.2.4 纠错码【译】

我只是一个虾纸丫 提交于 2019-12-01 18:41:21
计算机内存偶尔会因为电线上的电压电流,宇宙射线或其他因素而犯错。为了防止这些错误,一些内存使用了侦错码或纠错码。当使用这些编码时,额外的位会以特殊的方式附加到每个内存字上。当从内存读出一个字时,通过检查这些额外的位来确认是否有错误发生。 为了理解怎样处理错误,有必要近距离看看错误到底是什么样子的。假设一个内存字包括m位数据,我们会加上r位的冗余或校验。假设总长度是n(n=m + r)。一个包括m位数据和r位校验的n位单元通常被称作n位码字。 任意给出两个码字,比如,10001001和10110001,找出有几个对应位不同是可能的。上面的例子有3位不同。为了找出几位不同,只要按位计算两个码字的异或,然后统计结果中1的数量就好了。两个码字中不同的比特位数称作汉明距离(Hamming,1950)。意思是,如果两个码字的汉明距离是d,它们的互相转化需要d位错误。比如,码字11110001和00110000的汉明距离是3,因为把一个转化成另一个需要有3位的错误。 有一个m位的内存字,所有2^m个位图都是合法的,考虑到位校验时的计算方式,只有2^n个码字是可用的。如果读取内存时出现了未验证的码字,计算机就知道发生了内存错误。给出计算校验位的算法,构建一个完整的合法码字列表是可能的,然后从这个列表中找出汉明距离最小的两个码字。这个距离就是整组编码的汉明距离。

汉明重量

萝らか妹 提交于 2019-11-30 19:42:25
https://baike.baidu.com/item/%E6%B1%89%E6%98%8E%E9%87%8D%E9%87%8F/7110799?fr=aladdin 汉明重量是 一串符号中非零符号的个数 。因此它等同于同样长度的全零符号串的 汉明距离 。在最为常见的 数据位 符号串中,它是1的个数。 来源: https://www.cnblogs.com/mjn1/p/11637882.html

461. 汉明距离(Hamming Distance)leetcode

时光毁灭记忆、已成空白 提交于 2019-11-29 05:13:22
首先附上题目链接: https://leetcode-cn.com/problems/hamming-distance/ 一:题目 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。    简单说明 :这里就是要我们求两个数对应的二进制,有多少个位置的1是单独的,这里的单独意思是指两个数在某个位置是(0,1)形式存在,那这个1就是单独的。        需要注意的是它给的x,y的范围,所以我们的变量只需要 int 就行了。 二:方法(c++)   1:方法一:直接移位,每次取两个的最后一位进行判断     这种二进制的题目,首先想到的就是能不能移位和亦或,或,与等操作。这里将每个数的最后一位比较,若是一个为0,一个为1则计数。 int count=0; while(x!=0||y!=0) { if((x&1)!=(y&1)) { count++; } x>>=1; y>>=1; } return count ;   2:方法二:汉明重量加汉明距离     这里首先需要介绍这两个概念。 汉明重量 :某个数二进制中1的数量

LeetCode 461. 汉明距离

ⅰ亾dé卋堺 提交于 2019-11-27 04:40:13
题目链接: https://leetcode-cn.com/problems/hamming-distance/ 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。 1 int hammingDistance(int x, int y){ 2 int a1[100]; 3 int a2[100]; 4 int t1=0,t2=0; 5 while(x){ 6 a1[t1++]=x%2; 7 x/=2; 8 } 9 while(y){ 10 a2[t2++]=y%2; 11 y/=2; 12 } 13 for(int i=0;i<t1/2;i++){ 14 int t=a1[i]; 15 a1[i]=a1[t1-i-1]; 16 a1[t1-i-1]=t; 17 } 18 for(int i=0;i<t2/2;i++){ 19 int t=a2[i]; 20 a2[i]=a2[t2-i-1]; 21 a2[t2-i-1]=t; 22 } 23 int sum=0; 24 if(t1>=t2){ 25 for(int i

利用word分词来计算文本相似度

懵懂的女人 提交于 2019-11-27 01:11:16
word分词 提供了多种文本相似度计算方式: 方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度 实现类: org.apdplat.word.analysis.CosineTextSimilarity 用法如下: String text1 = "我爱购物"; String text2 = "我爱读书"; String text3 = "他是黑客"; TextSimilarity textSimilarity = new CosineTextSimilarity(); double score1pk1 = textSimilarity.similarScore(text1, text1); double score1pk2 = textSimilarity.similarScore(text1, text2); double score1pk3 = textSimilarity.similarScore(text1, text3); double score2pk2 = textSimilarity.similarScore(text2, text2); double score2pk3 = textSimilarity.similarScore(text2, text3); double score3pk3 = textSimilarity.similarScore

461 汉明距离

浪子不回头ぞ 提交于 2019-11-25 22:36:50
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y,计算它们之间的汉明距离。 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y = 4 输出: 2 解释: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 上面的箭头指出了对应二进制位不同的位置。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/hamming-distance 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 题解: java Integer的位与运算方法: class Solution { public int hammingDistance( int x, int y) { return Integer.bitCount(x^y); } } 题解2: class Solution { public int hammingDistance( int x, int y) { int cnt= 0 ; while (x!= 0 ||y!= 0 ){ if ((y& 1 )!=(x& 1 )) cnt++; x>>= 1 ; y>>= 1 ; } return cnt; } } 来源: oschina 链接: https://my.oschina.net/u