文件中存储10亿个用户姓名,如何快速找到出现频率最高的前100名? [问题点数:40分]

Bbs1
本版专家分:0
结帖率 0%
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Blank
Github 绑定github第三方账户获取
Blank
红花 2014年9月 高性能开发大版内专家分月排行榜第一
Blank
黄花 2014年12月 高性能开发大版内专家分月排行榜第二
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Blank
Github 绑定github第三方账户获取
Bbs1
本版专家分:0
版主
找到100亿个URL中的重复URL以及搜索词汇的topK问题
有一个包含<em>10</em>0<em>亿个</em>URL的<em>文件</em>,假设每个URL占用64B,请找出其中所有重复的URL。这类问题一种解决方案(我只想到了这一种) 将<em>文件</em>通过哈希函数成多个小的<em>文件</em>,由于哈希函数所有重复的URL只可能在同一个<em>文件</em>中,在每个<em>文件</em>中利用一个哈希表做次数统计。就能<em>找到</em>重复的URL。这时候要注意的就是给了多少内存,我们要根据<em>文件</em>大小结合内存大小决定要分割多少<em>文件</em>topK问题和重复URL其实是一样的重复的多了
在存有10亿个数的文件找到最大的100万个数
这是《编程珠玑》中的一道题目。<em>10</em><em>亿个</em>整数,假设每个整数需要四个字节,如果使用排序的话,需要大约4G的内存,现在的很多pc都没有多这么内存,更不用说作者那个年代。 我们借助最小堆来解决这个问题。 主要步骤: 一、使用一个大小为一百万零一的整数数组来构建堆(堆的下标从1开始) 二、从<em>文件</em>中读取前一百万个数,每读入一个数,调用函数,保持其最小堆的性质,堆的根永远是堆中最小的元素。 三、从一百
实现一个位图、100亿个整数找出只出现一次的整数、找出现次数不超多2次的数
1.–实现一个位图。 位图特点: 节省空间 适合数据比较密集的情况 适合判断事件 是否 这样的问题 相关位运操作: & | ~ 代码实现:#include #includeusing namespace std;// //1.【基础题】--实现一个位图。 //位图特点: 节省空间,适合数据密集的情况 class BitSet {
100亿个数字找出最大的10
1、首先一点,对于海量数据处理,思路基本上是确定的,必须分块处理,然后再合并起来。 2、对于每一块必须找出<em>10</em>个最大的数,因为第一块中<em>10</em>个最大数中的最小的,可能比第二块中<em>10</em>最大数中的最大的还要大。 3、分块处理,再合并。也就是Google MapReduce 的基本思想。Google有很多的服务器,每个服务器又有很多的CPU,因此,<em>10</em>0<em>亿个</em>数分成<em>10</em>0块,每个服务器处理一块,1亿...
查询一个日志文件中访问次数最多前10个IP?
题目:查询一个日志<em>文件</em>中访问次数最多前<em>10</em>个IP? 第一步:按照IP进行将记录排序。 第二步:按照IP去重,并且显示重复次数 第三步:按照次数升序排列 第四步:显示前<em>10</em>行 cat log.txt|awk -F" " '{print &amp;1}' |sort|uniq -c|sort -nrt " "|awk -F" " 'print &amp;2' |head -<em>10</em> ...
海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些。         先拿<em>10</em>000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(<em>10</em>000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的<em>10</em>000个数就是所需的最大的<em>10</em>000个。建堆
程序员面试金典-----给定100亿个网址,找出重复的URL
1、题目描述 给定<em>10</em>0<em>亿个</em>网址,<em>如何</em>检测出重复的<em>文件</em>?这里所谓的“重复”是指两个URL完全相同。 2、思路 <em>10</em>0<em>亿个</em>网址(URL)要占用多少空间呢?如果每个网址平均长度为<em>10</em>0个字符,每个字符要占用4字节,则这份<em>10</em>0<em>亿个</em>网址的列表将占用约4兆兆字节(4TB)。在内存中可能放不下那么多数据。 不过,不防假装一下,这些数据真的奇迹般的放进了内存,毕竟先求解简化的题目是很有用的做法。对于此...
找到100亿个URL中重复的URL以及搜索词汇的top K 问题
前天去腾讯面试大数据开发,问到的题目,总结一下。 题目一、有一个包含<em>10</em>0<em>亿个</em>URL的大<em>文件</em>,假设每个URL占用16B,请找出其中所有重复的URL。 题目二、某搜索公司一天的<em>用户</em>搜索词汇是海量的百亿数据量,请设计一种求出每天最热top <em>10</em>0 词汇的可行办法。 题目一解法:        由于数据量很大,16*<em>10</em>0亿B = 1600亿Byte,约等于160G。<em>10</em>亿Byte约等于1G大小...
linux分析apache日志,如访问次数最多的前10个IP、访问超过100次的页面
apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前<em>10</em>个IP地址及访问次数。 既然是统计,那么awk是必不可少的,好用而高效。 命令如下: awk '{a[$1] += 1;} END {for (i in a) printf("%d %s\n", a[i], i);}' 日志<em>文件</em> | sort -n | tail 首先用awk统计出来一个列表
10亿个QQ号码,找出重复次数最多的那一个
hash取模,将号码分散在多个小<em>文件</em>里<em>存储</em>,然后分别对<em>文件</em>内号码排序,统计<em>出现</em>次数最多的那一个,最后对所有最多值取最大的那一个,为所求。
从一亿个数中找出最大的100个 或者n个
从一<em>亿个</em>数中找出最大的<em>10</em>0个 或者n个 用了个堆
海量数据选取重复次数最多的n个
最近刚换工作,面试的时候有一道题觉得很有意思,大致是通过web日志分析出网站最多的<em>10</em>条http请求的ip地址、页面等,我想这个可以归纳为海量数据选取重复次数最多的n个,跟网上看过的一题很类似:有<em>10</em><em>亿个</em>整数,要求选取重复次数最多的<em>10</em>0个整数。 现在把几种方法总结一下,以“有<em>10</em><em>亿个</em>整数,要求选取重复次数最多的<em>10</em>0个整数”为例 1.位图排序 阶段1:初始化一个空集合      fo
算法系列-大数据面试题-大文件中返回频数最高的100个词
1.题目描述 有一个1G大小的一个<em>文件</em>,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M,要求返回频数<em>最高的</em><em>10</em>0个词 2.思考过程 (1)参见我的其他大数据面试题博文。此处1G<em>文件</em>远远大于1M内存,分治法,先hash映射把大<em>文件</em>分成很多个小<em>文件</em>,具体操作如下:读<em>文件</em>中,对于每个词x,取hash(x)%5000,然后按照该值存到5000个小<em>文件</em>(记为f0,f1,...,
只用2GB的内存找出20亿个整数中找到出现次数最多的数
要求有一个包含20<em>亿个</em>32位整数的<em>文件</em>,从中<em>找到</em><em>出现</em>次数最多的数。首先先分析一下,32位int类型的数占4B,20<em>亿个</em>4B 约为 8GB,只用2GB肯定不够。所以我们肯定需要将这20<em>亿个</em>数哈希到不同的<em>文件</em>中,由于哈希函数的特性,对于相同的输入值,返回值也相同,所以不可能<em>出现</em>同一个值的数<em>出现</em>在不同的<em>文件</em>里,之后我们只需要在单个<em>文件</em>中,<em>找到</em>该<em>文件</em>中<em>出现</em>最多的数。将所有<em>文件</em>中<em>出现</em>次数最多的数都比较<em>找到</em>出
大数据处理之哈希表(二)--出现频率最多的top xxx 位
上篇文章中只是求了<em>出现</em>频次<em>最高的</em>值,可是大数据处理往往需求的是top <em>10</em> ,top <em>10</em>0或者某一段区间的数据。显然只定义一个Hash a是不能放下的。如果是求<em>出现</em>频次top<em>10</em>0呢?最起码定义 Hash arr[<em>10</em>0]吧。比如拿计数器<em>10</em>000长度和数据范围为32767来说。我们最少要分4次,分别是数据取余4后  0  1  2 3的四种情况第一次余数为0,即4的倍数这一组,我们是不是要先算...
获取一亿数据获取前100个最大值
获取一亿数据获取前<em>10</em>0个最大值
统计一TXT文档中单词出现频率,输出频率最高的10个单词
代码如下 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.uti
笔试题:海量日志中提取访问次数前100的IP
大数据时代是一个信息量爆炸的时代,利用数据分析将会产生不可估量的价值,基金,证券,电商以及现在越来越火的O2O。当然作为一个热点,企业的笔试与面试中当然少不了关于大数据的问题。 今天就写写之前的一道笔试题:每个<em>用户</em>访问,系统都会记录<em>用户</em>的IP到日志中,一个小时产生1G的日志<em>文件</em>,请分析日志<em>文件</em>获取当天访问次数前<em>10</em>0的IP(大概是这样)。 由于IP是32位的,最多有个2^32个IP,也...
10亿数中找出最大1000个数的算法C实现(简化版)
此处主要采用堆排序来实现。 typedef int ElementType; typedef struct { ElementType *r; int length; }SqList; #define N 20 #define M <em>10</em> void Heap
大数据:随机生成10万个整数找出出现次数前一百的数
<em>如何</em>找出大数据中<em>出现</em>次数最多的前n位数
微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字
/******************************************************************************* 文 件 名 : test<em>10</em>0.cpp 实现功能 : 微软面试题: 有<em>10</em>0万个数字(1到
100亿个整数中找出最大/最小的1000个整数
一句话总结:内存无法装下,用比较速度最快的数据结构。 先找最大的<em>10</em>00个整数 1、内存无法装下:先取出<em>10</em>01个整数,构建一个最小堆,堆顶永远是最小的整数。 2、比较:从剩余的整数中一次取出一个,跟最小堆堆顶相比,如果比堆顶小,就pass掉,接着取;如果比最小堆堆顶大,那么将之替换掉堆顶,然后调整最小堆 3、结果:<em>10</em>0<em>亿个</em>整数全部操作完后,抛开堆顶,剩下的<em>10</em>00个就是最大的<em>10</em>00个
典型的Top K算法 _找出一个数组里面前K个最大数_找出1亿个浮点数中最大的10000个_一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入内存.
Top K 算法详解 应用场景:         搜索引擎会通过日志<em>文件</em>把<em>用户</em>每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。         假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的<em>用户</em>越多,也就是越热门。),请你统计最热门的<em>10</em>个查询串,要求使用的内存不能超过1G。
Linux下统计文本文件中前n个出现频率最高的单词
关键脚本: [root@bogon tmp]# cat stat.sh  #!/bin/bash end=$1 #$1,第一个入参,表示统计<em>出现</em><em>频率</em><em>最高的</em>单词的个数的前n个 cat $2 | #$2,第二个入参,表示需要统计的<em>文件</em>名 #tr是sed的精简,可以用一个字符替换另一个字符或者删除重复的字符 #-c表示补集,即[a-z][A-Z]的补集,即非字母字符, #-
腾讯面试题:A.txt和B.txt两个文件,A有1亿个qq号,B有100万个,用代码实现交、并、差...
在STL中关于有序序列有这么四个算法: set_union(beg, end, beg, end2, dest);                    //求并集A∪B set_union(beg, end, beg, end2, dest, comp); template &amp;lt;class InputIterator1, class InputIterator2, clas...
怎么从10亿个查询词找出出现频率最高的10
参考网站:http://dongxicheng.org/big-data/select-ten-from-billions/ 很好的参考内容,知识层面相当深,不能复制粘贴直接提供相应的地址。
通过命令查找文件出现频率最高的前K个词
 使用linux命令或者shell实现:<em>文件</em>words存放英文单词,格式为每行一个英文单词(单词可以重复),统计这个<em>文件</em>中<em>出现</em>次数最多的前<em>10</em>个单词。 cat words.txt | sort | uniq -c | sort -k1,1nr | head -<em>10</em>   主要考察对sort、uniq命令的使用,相关解释如下,...
从1亿个ip中找出访问次数最多的IP
处理海量数据问题存在的原因就在于1)数据量太大,无法在短时间内解决;2)内存不够,没办法装下那么多的数据。 而对应的办法其实也就是分成1)针对时间,合适的算法+合适的数据结构来提高处理效率;2)针对空间,就是分而治之,将大数据量拆分成多个比较小的数据片,然后对其各个数据片进行处理,最后再处理各个数据片的结果。 原文中也给出一个问题,“从1<em>亿个</em>ip中访问次数最多的IP”,就试着来解决一下吧。
100亿条记录的文本文件,取出重复数最多的前10
http://www.oschina.net/question/163919_61165?sort=time&#answers
10亿数据中取最大的100个数据
思路1:根据<em>快速</em>排序划分的思想 (1)递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 (2)对(b,d]重复(1)操作,直到最右边的区间个数小于<em>10</em>0个。注意[a,b)区间不用划分 (3)返回上一个区间,并返回此区间的数字数目。接着方法仍然是对上一区间的左边进行划分,分为[a2,b2)b2(b2,d2]两个区间,取(b2,d2]区间。如果
10亿个数中找出最大的10000个数(top K问题)
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些。 先拿<em>10</em>000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(<em>10</em>000中最小的),将这个数替换堆顶,并调整结构使之仍然...
java一亿数字取前100个(3秒钟获取)
java一亿数字取前<em>10</em>0个(3秒钟获取) 速度非常快。 发出来给大家分享
【面试必备】如何10亿数中找出前1000大的数?
作者:channingbreeze | 微信公众号:互联网侦察小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司...
100万条记录的文本文件,取出重复数最多的前10
<em>10</em>0万条记录的文本<em>文件</em>,取出重复数最多的前<em>10</em>条。 示例文本: 098 123 234 789 …… 234 678 654 123 2. <em>10</em>0亿条记录的文本<em>文件</em>,取出重复数最多的前<em>10</em>条。 刚才是<em>10</em>0万的数据,你的计算机可以单批正常处理,现在有<em>10</em>0亿的数据,假设由于你的计算机内存、cpu限制,无法单批处理  …
网宿面试——有10T的IP地址数据,内存只有10M,怎么找出出现频率最大的那个IP
这种大数据的的题肯定是要分堆来做,再从堆中选出每个堆中最大的数,然后进行比较。1,首先就是<em>如何</em>进行分堆的问题,这边我们使用hash来分成n个<em>10</em>M的小<em>文件</em>,<em>10</em>T除以<em>10</em>M约等于<em>10</em>00000,所以使用hash(IP)%<em>10</em>00000,来分堆。2,从每个堆中选取<em>出现</em>次数最多的IP;3,从这<em>10</em>0000个IP中选择<em>出现</em>最多的IP即可。...
10G个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可
参考:http://hi.baidu.com/xzufpnrqufbavxq/item/eb6d77c72b25da06ac092f29 借鉴桶排序思想 第一步:因为整数为32位,我们可以按照整数的高16位划分桶进行计数,2^16=64k,即可划分成64k个桶,也就是大小为2^16的数组。这里存在一个问题,如果数组类型是int,能够计数的最大值是2^32=4G,而如果<em>10</em>G个整数完全相同,则i
找到100亿个url中重复的url以及搜索词汇的topk问题
1.哈希分流到多台机器 2.哈希表统计每个机器中的每个小<em>文件</em> 3.最小堆(想一想为什么是最小堆?)
100亿个整数,找出中位数
<em>10</em>0<em>亿个</em>整数,内存足够,<em>如何</em><em>找到</em>中位数?内存不足,<em>如何</em><em>找到</em>中位数? (1)当内存足够时:采用快排,<em>找到</em>第n大的数。 • 随机选取一个数,将比它小的元素放在它左边,比它大的元素放在右边 • 如果它恰好在中位数的位置,那么它就是中位数,直接返回 • 如果小于它的数超过一半,那么中位数一定在左半边,递归到左边处理(还是第几大) • 否则中位数一定在右半边,根据左半边的元素个数
数据结构(如何10亿数据中快速查找出重复的数据)
对于32位的计算机而言,只有2G的内存(2的三十一次方),而十亿大概是2的32次方。因此,不能将其直接放到内存中进行处理。 一个byte有八位,我们可以开辟长度为2的29次方的byte数组,利用位映射原理,将要处理的数对8进行除法取商,商作为byte数组的下标,数组<em>存储</em>的元素可以转化为八位二进制,若二进制数的第i位为一,则表示该数对8取模的值为i。如:        假设某数据为9。9=8*1+
100亿个32位整数中放到一个文件中,找出任一个重复出现的数
问题描述是这样的: 在一个<em>文件</em>中存放有<em>10</em>0<em>亿个</em>整数,
100亿条记录的文本文件中取出重复数最多的前10
场景哈希分治法 这是一个 ip 地址 127.0.0.1 假设有<em>10</em>0<em>亿个</em>这样的 ip 地址存在<em>文件</em>中 这个<em>文件</em>大小大约是 <em>10</em>0GB 问题:要统计出<em>10</em>0<em>亿个</em> ip 中,重复<em>出现</em>次数最多的前<em>10</em>个分析<em>10</em>0GB 几乎不可能一次加载进内存进行操作,所以必须要拆分 那么可以利用分治的思想,把规模大的问题化小,然后解决各个小的问题,最后得出结果。实现思路 ipv4 地址是一个 32 位的整数,
给出一个顺序文件,它最多包含40亿个随机排列的32位整数 问题:找出一个不在文件中的32位整数。...
[code=&quot;java&quot;] package com.myway.study; import java.util.ArrayList; import java.util.List; /** * 给出一个顺序<em>文件</em>,它最多包含40<em>亿个</em>随机排列的32位整数 问题:找出一个不在<em>文件</em>中的32位整数。 * User: zhangyong * Date: 14...
10亿个数选取重复次数最多的100个整数
有<em>10</em><em>亿个</em>整数,要求选取重复次数最多的<em>10</em>0个整数 要解答这个问题,首先要弄清楚下面几个条件。 (1)有内存限制吗? (2)整数的范围是多少?有符号,无符号,32位还是64位? (3)整数集的内容大吗?(即<em>出现</em>的整数空间的大小大吗?) (4)如果只需要求模糊解,怎么解? (5)求数组中的第k大元素? (6)相关问题:求一个整数列中<em>出现</em>次数最多的整数 (7)相关问题:有一个整数数组,
10 亿个数取中位数
<em>10</em> <em>亿个</em>数取中位数 1、取 16*<em>10</em>24 个数,生成一个 TreeMap 。取得最大值 max 和最小值 min。 2、构造一个<em>10</em>24个元素的计数数组 T[i],对最初的 <em>10</em>24 个数按区间计数; 对 min 和 max 进行 <em>10</em>24 个等分,各等分值为 N[i]。 当数据 N[a]...
给定包含4300000000个32位整数的顺序文件如何找到一个出现失少两次的整数
给定包含4300000000个32位整数的顺序<em>文件</em>,<em>如何</em>找出一个<em>出现</em>至少两次的整数? 一、位向量法 思路:考虑两个条件 1. 所有的整数都<em>存储</em>在顺序<em>文件</em>中,因此,读取<em>文件</em>的次数将明显影响算法的效率 2. 顺序<em>文件</em>中包含的整数个数为4300000000,如果全部读取放在内存中的话,必须要考虑内存空间因素。   解决方案: 由上面的问题,我们想到了Bit-Map,可以申请537500...
海量数据处理:有1亿个浮点数,找出其中最大的10000个
第一种方法是将数据全部排序,然后在排序后的集合中进行查找,最快的排序算法的时间复杂度一般为O(nlogn),例如<em>快速</em>排序.而在32位机器上,每个float类型占4B,1<em>亿个</em>浮点数就要占用400M的<em>存储</em>空间,对于一些可以内存小于400MB的计算机而言,显然是不能一次将全部数据读入内存进行排序的.其实即使内存能满足要求,该方法也不高效,因为题目的目的是寻找出最大的<em>10</em>000个数即可,而排序是将所有元素...
10亿个数中找出最大的10000个数之top K问题
    方法一、先拿<em>10</em>000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(<em>10</em>000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的<em>10</em>000个数就是所需的最大的<em>10</em>000个。建堆时间复杂度是O(mlogm),算法的时间复杂度为O(nmlogm)(n为<em>10</em>亿,m为<em>10</em>000)。    方法二(优化的方法):可以把所有<em>10</em><em>亿个</em>数据分组存放,比如分别放在<em>10</em>0...
大文本文件中找词频最高的10个词
http://www.cnblogs.com/orchid/archive/2012/04/22/2464511.html
分析一个文本文件中各个词出现频率,并把最高的10个词打印出来
软件工程课程第一次作业。 题目:    分析一个文本<em>文件</em>,统计各个词<em>出现</em>的<em>频率</em>,然后将<em>最高的</em><em>10</em>个词显示出来。文本<em>文件</em>在30k-300k之间。 分析:      第一阶段实现对英文单词的统计。     需要将文本存在.txt格式的<em>文件</em>中,用file 指针调用。 由于文本内容无法确定会用到多少个单词,所以采用链表进行<em>存储</em>分割后的每个单词。 ---------------------
面试题--给40亿个不重复的,没有排过序,给一个无符号整数,如何判断这个数在这40亿个数中
如果常规的想法是给这40亿数,放到一个很大的数组中,<em>快速</em>排序,然后采用二分查找,来判断这个数是否存在; 但是计算机的内存就是4G,大小差不多刚好是2^32大约为42亿左右,一个整形4个字节,40亿数大约需要16G个字节,在现实基本不可能实现,那么该<em>如何</em><em>存储</em>呢? 方法:位<em>存储</em> 一个整形32个位,16G个字节只需要500M就可以,然后设置比特位1表示这个数存在,0表示这个数不存在。#include
一亿数据获取最大值的前100位
两种思路: 1. 根据<em>快速</em>排序划分的思想  a. 假设数组为 array[N] (N = 1 亿),首先利用quicksort的原理把array分成两个部分,左边部分比 array[N - 1] (array中的最后一个值,即pivot) 大, 右边部分比pivot 小。然后,可以得到 array[array.length - 1] (即 pivot) 在整个数组中的位置,假设是 k.
统计英文文本中出现频率最高的10个单词
 在v_JULY_v的文章中<em>找到</em>了这个问题的解法后用C++实现了一下,发现C++的代码非常的简洁。主要用到了标准库中的hash_map,优先级队列priority_queue。        算法的思路是:从头到尾遍历<em>文件</em>,从<em>文件</em>中读取遍历到的每一个单词。把遍历到的单词放到hash_map中,并统计这个单词<em>出现</em>的次数。遍历hash_map,将遍历到的单词的<em>出现</em>次数放到优先级队列中。当优先级队列的元...
常见算法 - 求给定数组中出现频率最高的前n个数
(leetcode347):Given a non-empty array of integers, return the k most frequent elements.For example,Given [1,1,1,2,2,3] and k = 2, return [1,2].思路:(常规)遍历数组,记录数值及对应的<em>频率</em>,再排序找出前k个。            用map<em>存储</em>数值及对应<em>频率</em>...
Linux命令经典面试题:统计文件出现次数最多的前10个单词
使用linux命令或者shell实现:<em>文件</em>words存放英文单词,格式为每行一个英文单词(单词可以重复),统计这个<em>文件</em>中<em>出现</em>次数最多的前<em>10</em>个单词。 cat words.txt | sort | uniq -c | sort -k1,1nr | head -<em>10</em>   主要考察对sort、uniq命令的使用,相关解释如下,命令及参数的详细说明请自行通过man查看,简单介绍下以上指
100亿个数字中找出最大的10
<em>10</em>0<em>亿个</em>数字找出最大的<em>10</em>个 1、首先一点,对于海量数据处理,思路基本上是:必须分块处理,然后再合并起来。 2、对于每一块必须找出<em>10</em>个最大的数,因为第一块中<em>10</em>个最大数中的最小的,可能比第二块中<em>10</em>最大数中的最大的还要大。 3、分块处理,再合并。也就是Google MapReduce 的基本思想。Google有很多的服务器,每个服务器又有很多的CPU,因此,<em>10</em>0<em>亿个</em>数分成<em>10</em>0块,
上千万数据的IP取前100个出现次数最多的
一、思路: 首先上千万级别的数据量的<em>文件</em>,大概有几十G的大小(考虑到里面有重复<em>出现</em>的IP),内存肯定是不够用的。所以要拆分处理。大概分为如下三个步骤 1、大<em>文件</em>拆分小<em>文件</em> 所以要先把<em>文件</em>分为小<em>文件</em>,例如分为<em>10</em>0个<em>文件</em>。然后要有顺序的把IP分类存入小<em>文件</em>,这里用到了hash,IP对<em>10</em>0取余,并且保证相同IP在同一个<em>文件</em>中,分成了<em>10</em>0份,先对数据经过hash计算,然后让相同的值放入<em>10</em>0个...
用Python实现统计一篇英文文章内内个单词出现频率, 并返回频率最高的前十个单词及次数(标点符号可省略)
import re   with open('1.txt', 'r') as f:     dictResult = {}       # 每次读取一行的<em>文件</em>     while True:         line = f.readline()         if not line:             break         listMatch = re.findall('\w+',...
10亿个数中找出最大的10000个数(top K问题)
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些。先拿<em>10</em>000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(<em>10</em>000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的<em>10</em>000个数就是所需的最大的<em>10</em>000个。建堆时间复杂度是O(mlo
如何10 亿数中找出前 1000 大的数?
题目:<em>如何</em>在<em>10</em>亿数中找出前<em>10</em>00大的数? (1)最先想到的就是先排序,然后取前<em>10</em>00个数,或者部分排序,只排出前<em>10</em>00个就可(缺点:时间复杂度太高) (2)可以用分治法,这一点有点类似于快排中的partition操作,选一个随机数,然后对整个数据进行partition  如果说前一部分总数大于<em>10</em>00个,那就继续在前一部分进行Partition寻找。如果前一部分的数小于<em>10</em>0...
算法2— 一亿数据获取前100个最大值
刚刚在CSDN上看到一个网友利用最小堆实现 “ 获取一亿数据获取前<em>10</em>0个最大值” 。然后自己利用quicksort的原理也写了一个程序来解决那个问题。通过测试,基于quicksort原理的方法平均运行时间是1.264秒,基于最小堆方法的平均运行时间是0.288秒 (网友写的程序运行时间比我的大很多,0.288秒这个程序是我自己写的,如果测试网友写的基于minHeap的方法,运行时间是2.501秒
如何获取字符串中,出现频率最高的字符?
要求: 对String做扩展,实现如下方式获取字符串中<em>频率</em><em>最高的</em>字符 var str = 'ahbbccdeddddfg'; var ch = str.getMostOften(); console.log(ch) //<em>出现</em>最多的是d,<em>出现</em>了5次 思路:我们先声明一个空对象,然后遍历字符串,把字符串<em>出现</em>过的字母作为对象的属性,把字母<em>出现</em>过的次数,作为属...
【编程练习题】从一百亿条地址数据中获取数量最多的Top10【热搜】-- MapReduce
场景 哈希分治法 这是一个 ip 地址 127.0.0.1 假设有<em>10</em>0<em>亿个</em>这样的 ip 地址存在<em>文件</em>中 这个<em>文件</em>大小大约是 <em>10</em>0GB问题:要统计出<em>10</em>0<em>亿个</em> ip 中,重复<em>出现</em>次数最多的前<em>10</em>个 分析 <em>10</em>0GB 几乎不可能一次加载进内存进行操作,所以必须要拆分 那么可以利用分治的思想,把规模大的问题化小,然后解决各个小的问题,最后得出结果。 实现思路 ipv4 地址是一个...
100亿数据找出最大的1000个数字
<em>10</em>0亿数据找出最大的<em>10</em>00个数字
大数据面试题——如何从大量数据中找出高频词
问题描述: 有一个1GB大小的<em>文件</em>,<em>文件</em>里面每一行是一个词,每个词的大小不超过16B,内存大小限制为1MB,要求返回频数<em>最高的</em><em>10</em>0个词。 分析: 由于<em>文件</em>大小为1GB,而内存的大小只有1MB,因此不能一次把所有的词读入到内存中去处理,可以采用分治的方法进行处理:把一个<em>文件</em>分解为多个小的子<em>文件</em>,从而保证每个<em>文件</em>的大小都小于1MB,进而可以直接被读取到内存中处理。 解题思路: 1、遍历<em>文件</em>,...
面试笔试记录--在词队列中找出现次数最频繁的词(Python)
记录9.28笔试 题目是英文,大致意思是:在一个词队列中找出,<em>出现</em>次数最多的词。 语言 Python3.6 笔试记录 import time def sss(L,K): a = [] # 存放word的种类 b = [] # word对应的个数 while len(L)!=0:# 每次迭代都会删除一类word,直到词队列为空。 a.appe...
上千万或上亿数据(有重复),统计其中出现次数最多的N个数据. C++实现
上千万或上亿的数据,现在的机器的内存应该能存下。所以考虑采用hash_map/搜索二叉树/红黑树等来进行统计次数。然后就是取出前N个<em>出现</em>次数最多的数据了,可以用第2题提到的堆机制完成。 #include "IOSTREAM" #include #include #include using namespace std; int main(void) { //海量待统计数据 char
查找文本中n个出现频率最高的单词
#!/bin/bash end=$1 #S1是输出<em>频率</em>最高单词的个数 cat $2 | #是目标文本<em>文件</em>的名称 tr -cs "[a-z][A-Z]" "[\n*]" | #将文本<em>文件</em>以一行一个单词的形式显示 tr A-Z a-z | #将单词的大写字母转为小写字母 sort | #对单词排序 uniq -c | #对排序好的单词列表统计每一个单词<em>出现</em>的次数 sort -k1nr -k2 |
如何100亿个数字排序?
今天要给<em>10</em>0<em>亿个</em>数字排序,<em>10</em>0<em>亿个</em> int 型数字放在<em>文件</em>里面大概有 37.2GB,非常大,内存一次装不下了。那么肯定是要拆分成小的<em>文件</em>一个一个来处理,最终在合并成一个排好序的大<em>文件</em>。 实现思路 1.把这个37GB的大<em>文件</em>,用哈希分成<em>10</em>00个小<em>文件</em>,每个小<em>文件</em>平均38MB左右(理想情况),把<em>10</em>0<em>亿个</em>数字对<em>10</em>00取模,模出来的结果在0到999之间,每个结果对应一个<em>文件</em>,所以我这
怎么对10亿个电话号码进行去重
方法一: 通过哈希算法,将<em>10</em><em>亿个</em>电话号码按照哈希值落在多个<em>文件</em>中, 重复的电话号码有相同的哈希值,肯定位于一个<em>文件</em>中, 这样就可以分别对每个<em>文件</em>排序删除重复的电话号码。 方法二: 使用位图来进行处理。比如说这<em>10</em><em>亿个</em>数的范围为【0-<em>10</em>亿】,那么就申请一个<em>10</em>亿的数组, 数组类型为boolen,只有0和1,0表示没有,1表示有。 这样自然而然的就删掉了重复的部分。
42亿QQ,O(1)时间复杂度完成查找
一、问题描述:  1.在42<em>亿个</em>qq号码中,<em>如何</em>使用O(1)时间复杂度去查找一个QQ号是否存在。  2.qq号的位数小于13位,<em>存储</em>着42亿QQ号的内存不得超过600MB.二、位图排序思想  由于待排序的数据记录较多,我们单纯地使用常见的排序方法时间效率较低,运行时间会很长。而且内存空间有限(限制为1MB左右),所以我们不能同时把所有整数读入内存(如果每个整数使用7个字节来<em>存储</em>,那么1MB内存空间...
找出文件中最高频率的前k个单词
很久之前参加一个小公司实习的线下笔试,做了这个题目,感觉还蛮有意思的。想做个记录。 一、题目 Write a program for displaying the ten most frequent words in a file such that your program should be efficient in all complexity measures. 问题的关
100亿个数中找出最大的前K个数(海量TopK问题)
对于这个问题,可以有以下思考: 给了多少内存<em>存储</em>这<em>10</em>0<em>亿个</em>数据? 先思考:堆排序效率是nlogn,再思考:可以将这些数据切成等份,再从每一份中找出最大前k个数据,但是效率不高。那如果利用堆的性质呢? 小堆堆顶元素最小,先将前k个数建成小堆,那么堆顶元素就是最小的,k+1的数依次与堆顶元素进行比较,如果大于,则K+1与堆顶元素交换,依次循环直至所有数据全部比较完,那么这个堆里存放的是最大的前...
[python]使用Counter统计文章中出现频率最高的单词
利用collections中的Counter来统计一篇文章中<em>出现</em>次数最多的单词: #!/usr/bin/env python # -*- coding: utf-8 -*- """ Created on 4/21/16 @author: Jiezhi.G@gmail.com Blog: jiezhi.github.io Reference: https://docs.python.
给两个文件,分别有100亿个URL,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法。
思路分析1G内存为<em>10</em>亿字节,所以无法把<em>10</em>0亿直接载入内存,所以我们可以通过哈希与位图的结合来处理该问题。先哈希到位图上,在把俩个位图按位与求其交集。解法1.我们可以申请<em>10</em>0个vector空间,每一个vector空间保存初始化过的1<em>亿个</em>无符号整数。 2.用字符串哈希函数对每个url的MD5结果进行哈希,然后把字符串哈希函数得到的整数结果再进行二次哈希,每个整数都模上<em>10</em>0,把该结果作为vect
面试题:给40亿个不重复的无符号整数,没排过序,给一个无符号整数如何快速判断这个数是否在这40亿个数中
//**********************位图***********************//腾讯面试题:// 给40<em>亿个</em>不重复的无符号整数,没排过序,给一个无符号整数<em>如何</em>// <em>快速</em>判断这个数是否在这40<em>亿个</em>数中//解题思路://(1)直接存进内存//40<em>亿个</em>无符号数,如果放到内存,就需要开辟4*4G=16G的空间,因为数的范围不确定,所以//开辟尽可能大的空间来存放,需42亿9千万×4字
Linux作业(三)-shell统计某文章中出现频率最高的N个单词并排序输出出现次数
#!/bin/bash if [ $# -ne 2 -a $# -ne 1 ] ;then echo "usage: `basename $0 ` [n] input file " echo exit fi if [ $# -eq 1 ];then I_TOP=<em>10</em> I_FILE=$1 fi
通过堆排序从1亿个数中找到最小的100个数
package com.my.util; import java.util.Arrays; import java.util.Date; import java.util.Random; public class Top<em>10</em>0 { public static void main(String[] args) { find(); } public static void find(
[原创]从1亿个数据中找出前100个最大值
从一<em>亿个</em>数据中找出前<em>10</em>0个最大值 方法一: &amp;gt; 新建一<em>10</em>0个红黑树节点,将输入前<em>10</em>0个保存进去,然后全部插入红黑树T &amp;gt; 遍历剩下的所有输入,对每一个输入值,如果值大于红黑树中最小值,则删除最小值节点,然后修改被删除节点的值为当前输入,然后插入红黑树。 复杂度为n*lg(m), n为输入数据条数,m为输出数据条数 方法二:将红黑树替换成最小堆,每插入一条数据,只需要运行...
13、出现频率最高的前K个元素
(个人水平有限,请见谅!) 描述: 有一个不为空且仅包含正整数的数组,找出其中<em>出现</em><em>频率</em><em>最高的</em>前 K 个数,时间复杂度必须在 O(n log n) 以内。 输入: 一行数据包括两部分,一个正整数数组(数字间 ‘,’ 分隔)和一个正整数 K (1 ≤ K ≤ 数组长度),数组和 K 之间有一个空格。 输出: 输出包含前 K 个<em>出现</em><em>频率</em><em>最高的</em>数(<em>出现</em><em>频率</em>相同时,较小的数在前),用 ‘, ...
topK问题——统计一篇很长的英文文章中频次出现最高的10个单词
  上篇讲述了topK问题的N个数中最大的前K个数,本篇则讲述统计一篇很长的英文文章中频次<em>出现</em><em>最高的</em><em>10</em>个单词。   例题2:统计一篇很长的英文文章中频次<em>出现</em><em>最高的</em><em>10</em>个单词。 思路:  分治法 + hash + 小根堆 (1) 定义一个关联容器hash_map&amp;lt;string,int&amp;gt;,用于统计英文文章中每个单词<em>出现</em>的次数;定义一个vector&amp;lt;hash_map&amp;lt;...
只用2GB内存,在20亿个整数中找到出现次数最多的数
题目:         有一个包含20<em>亿个</em>全是32位整数的大<em>文件</em>,在其中<em>找到</em><em>出现</em>次数最多的数。限制内存只有2GB。 解法:         32位bit,占用4Byte,20亿,就是8GB大小。2GB内存,很明显,我们无法直接加载到内存。 所以继续是分而治之的思路,我们可以把这个大<em>文件</em>,hash成20个小<em>文件</em>,这样每个<em>文件</em>,加载到内存,只需要400mb。 我们可以先后加载每个小<em>文件</em>,计算...
统计一个文本出现频率最高的
原文地址:统计一个文本<em>出现</em><em>频率</em><em>最高的</em><em>10</em>个词作者:沸沸一、作业要求     在一个txt<em>文件</em>中统计其中<em>出现</em>最多的<em>10</em>词语,最好可以统计中文词语 二、实现方法     首先,建立一个word类,其中这个类的对象有两个属性,其中这个词语的值,以及这个值<em>出现</em>的次数。首先把这个<em>文件</em>中的所有的内容传输到一个缓存当中,然后每输出一个字母就<em>存储</em>到一个str中,当<em>出现</em>各种符号,以及空格的时候就认为这个单词的读取结
统计文件出现次数最多的前10个单词
cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort-k1nr|head -<em>10</em>0 统计<em>文件</em>中<em>出现</em>次数最多的前<em>10</em>个单词 使用linux命令或者shell实现:<em>文件</em>words存放英文单词,格式为每行一个英文单词(单词可以重复),统计这个<em>文件</em>中<em>出现</em>次数最多的前<em>10</em>个单词。 cat words.txt | sort
统计一篇英文文章中出现次数最多的10个单词
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparat
用java程序分析一个文本文件中各个词出现频率,并把频率最高的十个单词打印出来(一般的冠词,虚词除外)
你的
10亿个IP地址排序、10亿年龄排序
(一). 注意:IPV4 的IP地址2^32位约42<em>亿个</em>,占空间4G (二).哈希函数 1.哈希函数即散列函数 哈希函数的输入域可以是非常大的范围,但是输出域是固定范围。 2.哈希函数的性质: a.典型的哈希函数都有无线的输入值域  b.输入值相同时,返回值相同,返回值即哈希值  c.输入值不同时,返回值可能一样,也可能不一样  d.不同输入值得到的哈希值
布隆过滤器(Bloom Filter)(给两个文件,分别有100亿个字符串,我们只要1g的内存,如何找到两个文件的交集?分别给出精确算法和近似算法?)
  给两个<em>文件</em>,分别有<em>10</em>0<em>亿个</em>字符串,我们只要1g的内存,<em>如何</em><em>找到</em>两个<em>文件</em>的交集?分别给出精确算法和近似算法? 精确算法:   我们可以创建<em>10</em>00个<em>文件</em>,运用哈希函数先将<em>文件</em>1的字符串保存在对应的<em>文件</em>中,之后再<em>文件</em>2中取元素,通过哈希函数计算出哈希地址,去对应的<em>文件</em>里面找是否有与之相同的字符串。 近似算法:   我们可以使用位图的方法,通过一个函数将一个元素映射成一个位矩阵中的一个点,这样...
寻找TopN——在10亿数据中找到1000个最大的数
寻找TopN——在<em>10</em>亿数据中<em>找到</em><em>10</em>00个最大的数目录问题描述解法补充 目录 问题描述 <em>如何</em>从<em>10</em>亿数据中<em>找到</em>前<em>10</em>00大的数? 解法 针对该问题,给定一个数组data,从中找出前n个最大的数。 解题思路 先维护一个具有n个数的堆,然后调整该堆为小顶堆,即每个父节点都比其子节点小。然后从剩下的数组中逐一读取数据,将读取到的数据跟堆顶比较。如果该数比堆顶小,直接丢弃;如果该数比堆顶数大,则用该数替...
100亿个数中寻找中位数
题目: 在一个大<em>文件</em>中有<em>10</em>0<em>亿个</em>32位整数,乱序排列,要求找出中位数;内存限制为512M;请写出算法设计思路; 基本分析: (1)中位数的定义:一个给定排序好的序列,奇数个的话,我们就取中间的一个;偶数个的话,我们一般取中间两个数的平均值;因此对于本题,我们需得到中间的第50亿和第50亿+1这两个数; (2)首先512M的内存,如果都来装这个32位整数的话,可以<em>存储</em>2^(9+<em>10</em>
海量数据中找出出现次数最多的前10个URL
#include #include #include #include using namespace std;int main(void) { //海量数据 string a[5]={"ab","b","ccc","ab","ccc"}; int n=sizeof(a)/sizeof(a[0]); cou
Python 中找出字符串中出现频率最高的字母
发现一个学Python的好网站 https://py.checkio.org 第一题大概意思就是找出一个字符串中<em>出现</em><em>频率</em>最高字母 我的思路也是直接,弄个字典,遍历字符串,将键值对填进字典里,健就是字母,值就是<em>出现</em>了几次,再查下字典里最大的值即可。 上我的代码 import re, string def checkio(text): #先变小写再排序 text =&amp;quot;&amp;quot;.j...
10亿条记录排序
<em>10</em><em>亿个</em>字符串的排序问题 博客分类:  数据结构 <em>10</em><em>亿个</em>字符串排序  一、问题描述 有一个大<em>文件</em>,里面有十<em>亿个</em>字符串,乱序的,要求将这些字符串以字典的顺序排好序   二、解决思路         将大<em>文件</em>切割成小<em>文件</em>,每个小<em>文件</em>内归并排序;         对所有的小<em>文件</em>进行归并排序——多重归并排序   三、解决方案 3
经典面试题-出现最多的十个数
有1/<em>10</em>/<em>10</em>0 <em>亿个</em> 数/字符串(URL),<em>找到</em>其中<em>出现</em>次数最多的<em>10</em>个 数/字符串(URL)解决思路:    1.通过hash取模的方式分成电脑可以运行的数据大小;    2.在每一块中排序,然后使用一个最小堆维护<em>出现</em>次数最多的几个;    3.取所有的块中<em>出现</em>次数最后的十个 数/字符串。先运用hadoop中的mapreduce来解决一波--开始生成了<em>10</em><em>亿个</em>数的<em>文件</em> (大概6G多),然后放...
jquery/js实现一个网页同时调用多个倒计时(最新的)
jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js //js2 var plugJs={     stamp:0,     tid:1,     stampnow:Date.parse(new Date())/<em>10</em>00,//统一开始时间戳     ...
vc#编写的一个计算机小程序下载
初学者写的不好请多原谅!!! 界面设计的不好看,内容还可以,谢谢下载!!! 相关下载链接:[url=//download.csdn.net/download/syc574937516/2100343?utm_source=bbsseo]//download.csdn.net/download/syc574937516/2100343?utm_source=bbsseo[/url]
CISCO 设备 密码恢复 办法(包括路由器 交换机等)下载
CISCO 设备 密码恢复 办法 (包括路由器 交换机等) 相关下载链接:[url=//download.csdn.net/download/ak47qiang/2361437?utm_source=bbsseo]//download.csdn.net/download/ak47qiang/2361437?utm_source=bbsseo[/url]
VC++6.0 MFC做的防火墙系统设计下载
VC++6.0 MFC做的防火墙 1.添加规则 用户通过添加规则可以根据用户自己需要添加防火墙规则. 2.删除规则 用户通过删除规则删除不需要的防火墙规则. 3.安装规则 用户在添加好规则之后需要启用该规则的话就要使用该功能,即安装启用该规则. 4.卸载规则 用户卸载安装好的防火墙规则. 相关下载链接:[url=//download.csdn.net/download/QIQI410327952/2410028?utm_source=bbsseo]//download.csdn.net/download/QIQI410327952/2410028?utm_source=bbsseo[/url]
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 如何快速学python 如何快速学习python
我们是很有底线的