海量数据处理
时光耗子_hzh
码农
展开
-
海量数据处理(一)哈希分治
海量数据处理有很多种方法,如哈希分治、simhash、外排序、多层划分等。本文将讨论哈希分治哈希分治的核心是hash_map,hash_map和map类似,不过hash_map能够创造出对象而map不能。对内存中查找数据,hash_map比较适合在内存中查找。当然,这不是重点。一个很典型的题:如果有两个500G的文件,里面放着若干IP地址,要求查找出出现频率原创 2017-05-04 22:17:33 · 825 阅读 · 0 评论 -
海量数据处理(二) 位图
位图就是用一个bit为来标记某个元素对应的value,key是元素,构成键值对。由于使用了bit这个最小单位,所以能够极大的节省内存。 很简单的一个例子,比如现在要对从含有1~100的无序不重复数组排序,那么我们可以申请一个大小为2^7个bit的数组(也就是128个bit,合16个字节,有一些内存浪费),将其所有置为0。遍历这个无序数组,bit[ arr[i] ] = 1。最后遍历原创 2017-05-06 18:57:10 · 242 阅读 · 0 评论 -
海量数据处理(三) T树
T树是一种树形结构,典型应用是统计,排序,查找大量数据。核心是空间换时间。 结合闫蔚敏的书,我对它的理解是这样的T树" TITLE="海量数据处理(三) T树" /> 举个例子,比如现在有个含有若干QQ号的文件,现在给你一个QQ号,要你在这个文件里找出文件里是否有给你的QQ号,如果有,输出位置。如果没有,输出-1。(假设内存能够容纳下这个文件) QQ号可能存在的位数是6原创 2017-05-06 18:57:13 · 359 阅读 · 0 评论 -
海量数据处理(四) simhash
如果有一天,你向优酷传了一个记录着你和我当天一起去长城玩的小视频(假设其大小为1G)。在你传完以后,我也传了一个和你一模一样的视频。但是我一点击上传,几秒钟就现设上传成功。这是为什么呢。这就是这这会要讨论的simhash算法。 simhash过程一共有5个步骤,分词,hash,加权,合并,降维。 第一步分词。假设现在给一个句子:我今天有课。再给一个句子:我明天有课。很明显这两个句子原创 2017-05-06 18:57:16 · 351 阅读 · 0 评论