海量文本信息查Top-k】的更多相关文章

问题描述: 有1千万条短信,一条一行,有重复.在5分钟之内,找出重复出现的前10条. 方案一: 1.分组进行边扫描边建散列表.建立哈希表,使用头,尾和中间随便两个字节作为Hash Code, 插入到Hash table中,并记录其地址和重复次数. 2.hash code同且等长->判定为疑似相同.然后hash table统计重复次数. 3.用线性时间选择在O(n)级别上完成前10条的寻找. 方案二: 1.按照长度短->长进行处理. 2.按照长度进行分组,每组通过头尾中间粗略判断相等,找出每组的…
现有如下题目:有一个海量文本,存储的是汉语词语,要求从中找出前K个出现频率最高的词语,写出最优算法,兼顾时间和空间复杂度. 思路分析:熟悉搜索引擎的程序员,应该不是难题.用传统的HashMap是无法解决的,因为数据量非常庞大的时候,空间复杂度会导致程序运行时,频繁执行MinorGC和MajorGC,最终JVM会宕掉.之前写的字母排列算法的时候,当输出100多万条数据的时候,JVM就宕掉了,下面用自平衡的三叉树来解决此问题. 第一步:对文本进行排序和折中处理,更新文本,要要用到pinyin4j项目…
举例 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M.返回频数最高的100个词. 思路 首先把文件分开 针对每个文件hash遍历,统计每个词语的频率 使用堆进行遍历 把堆归并起来 具体的方案 1.分治: 顺序读文件中,对于每个词c,取hash(c)%2000,然后按照该值存到2000个小文件中.这样每个文件大概是500k左右. 注意: 如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过1M. 2.hash…
Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top 10) 问题分析:由于(1)输入的大量数据:(2)只要前K个,对整个输入数据的保存和排序是相当的不可取的. 可以利用数据结构的最小堆来处理该问题. 最小堆如图所示,对于每个非叶子节点的数值,一定不大于孩子节点的数值.这样可用含有K个节点的最小堆来保存K个目前的最大值(当然根节点是其中的最小数值). 每次有数据输入的时候可以先与根节点比较.若不大于根节点,则舍弃:否则用新数…
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些. 先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个.建堆时间复杂度是O(mlogm),算法的时间复杂度为O(nmlogm)(n为10亿,m为10000). 优化的方法:可以把…
题目: CVTE笔试题https://www.1024do.com/?p=3949 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节. 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个.一个查询串的重复度越高,说明查询它的用户越多,也就是越热门.),请你统计最热门的10个查询串,要求使用的内存不能超过1G.   思路:此题解题步骤可分为两步:1.统计每个“查询串”(下称为query)出现的次数  …
程序员编程艺术:第三章续.Top K算法问题的实现 作者:July,zhouzhenren,yansha.     致谢:微软100题实现组,狂想曲创作组.     时间:2011年05月08日     微博:http://weibo.com/julyweibo .     出处:http://blog.csdn.net/v_JULY_v .     wiki:http://tctop.wikispaces.com/. --------------------------------------…
1.top k问题 在海量数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最高的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题.例如,在搜索引擎中,统计搜索最热门的10个查询词:在歌曲库中统计下载最高的前10首歌等 2.实例 2.1从N个无序数中寻找Top-k个最小数 问题分析 针对海量数据的top k问题,这里实现了一种时间复杂度为O(Nlogk)的有效算法:初始时一次性从文件中读取k个数据,并建立一个有k个数的最大堆,代表目前选出的最小的k个数.然后…
bzoj 1269 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1269 大致思路: 用splay维护整个文本信息,splay树的中序遍历即为该文本. 收获: 1.可以先在文本开始和结尾个插入一个节点,然后每次操作都适当调整位置,这样可以减少特判(插入一段文本到0位置,在最后插入一段文本...) 2.查找一段文本[lf,rg],可以先找到位置为lf-1的节点(因为1,不用特判没有了),splay到根,再找到rg+1的节点,旋转到根的下面,…
pig里面有一个TOP功能.我不知道为什么用不了.有时间去看看pig源代码. SET job.name 'top_k'; SET job.priority HIGH; --REGISTER piggybank.jar; REGISTER wizad-etl-udf-0.1.jar; --DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader(); DEFINE SequenceFileLoader…