海量数据的常见处理方法:
Hash方法:
解决 哈希冲突的方法:
Bit-map方法:
布隆过滤器:
倒排索引
外排序法:
Trie树
Trie树
堆:
桶方法:
桶排序及相关应用题目
MapReduce方法:
Top K问题:
理论上的常见方法:
实际中常见场景的解决方案:
利用MapReduce框架:
常见的一些Top K 问题:
具体解决方案请看解法
https://blog.csdn.net/hitxueliang/article/details/52153476 BAT相关面试题
《程序员面试经典指南》---左神
问题1 :只用2GB内存在20亿个整数中找到出现次数最多的数字
解法:用哈希函数将大文件分成几个小文件 -----分别找到出现次数最多的数----最后进行汇总
问题2: 40亿个非负整数中找到没出现的数字
解法:
1 内存限制1GB : 直接使用bit Map 遍历整数 将下标对应值置 0/ 1 最终再遍历bitArr 若存在值为0 的 刚好就是没出现过的数字
2 内存限制10MB:
1) 第一次遍历 长度为64的整型数组 统计每个区间内数字的量(理论上应该为 M)
2) 进行1)之后 肯定存在区间k 计数小于应有数量M 则进行第二次遍历
申请长度为 M 的bit Map数组---再遍历所有数字 但只关注落在此区间内的数字num
bitArr [num-M*k] 置为1 最终存在为0 的值就是 第i个位置 值为 M*k +i .
哈希表:
bit Map
两次遍历:
问题 3:找到100亿个URL中重复的URL 以及搜索词汇的top k 问题:
解法:
1 找重复问题 :哈希函数进行分流 ---哈希表词频统计
2 top k :哈希函数分流--分治法--哈希表词频统计--小根堆(top k大---外排序
补充问题:
哈希分流到
问题4:40亿个非负整数中找到出现两次的数和所有数的中位数
解法 :
1 首次使用bitArr的两位来表示一个数字的词频 00 --->01 10 11 最终遍历查找10的即可
2 中位数:
ps: 1GB 10亿 1MB 百万 1k 千 2进制的计算~
1GB=1024MB 1MB=1024=2(10) KB 1KB=1024Byte
补充问题:
一致性哈希算法的原理:
智能推荐
海量数据处理
文章目录 一、计算容量 二、拆分 三、解决思路之分而治之/Hash映射 + Hash统计 + 堆/快速/归并排序 1、海量日志数据,提取出某日访问百度次数最多的那个IP 2、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。 3、给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同...
海量数据处理
一、计算容量 1个整数占4byte,1亿个整数占4*10^8byte 大概为 400 MB; 二、拆分 可以将海量数据拆分到多台机器上和拆分到多个文件上: 如果数据量很大,无法放在一台机器上,就将数据拆分到多台机器上。这种方式可以让多台机器一起合作,从而使得问题的求解更加快速。但是也会导致系统更加复杂,而且需要考虑系统故障等问题; 如果在程序运行时无法直接加载一个大文件到内存中,就将大文件拆分成小...
海量数据处理
海量数据处理 基本方法 针对海量数据的处理,可以使用的方法非常多,常见的方法有Hash法、Bit-map法、Bloom filter法、数据库优化法、倒排索引法、外排序法、Trie树、堆、双层桶法以及MapReduce法。 Hash法 Hash也被称作散列,它是一种映射关系,即给定一个数据元素,其关键字为key,按一个确定的哈希函数Hash计算出hash(key),把hash(key)作为关键字k...
海量数据处理
海量数据处理:是针对数据量较大,导致内存不足或十分占内存的情况而有的解决算法 1 给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 【问题分析】 (1)日志文件一般为一行一条日志,并且有一定的格式,每一条日志中含一个IP地址,我们可以看一下这个笔记的日志信息,简单有一个认识: (2)日志文件共100G,占用内存过大,可以尝试对100...
海量数据处理
常用的几种方法: 1、分治法/Hash映射 + hash_map a、将海量数据通过Hash映射为若干的小文件; b、利用hash_map对每个小文件进行统计(key为数据内容,value为出现次数); 2、Bloom Filter Bloom Filter是一种允许有少量错误的数据判重或者集合求交集的方法。 具体内容以及公式参考博客Bloom Filter 算法简介 (增加 Cou...
猜你喜欢
海量数据处理
1)给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 初步分析: 100G普通机器内存中肯定是放不下的,目前使用的IP地址相当于一个32位的字符串,所以我们考虑切分,假设有1G可用内存我们切分为100份,那我们需要把这100个文件全部遍历,每一次出现的IP地址进行统计,最后找出出现次数最多的IP地址,此办法可行但是效率不高。 优化: 把这32位...
海量数据处理
1)给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址 2)与上题条件相同,如何找到top K的IP? 3)给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确 算法和近似算法! 4)给上千个文件,每个文件大小为1K—100M。给n个词,设计算法对每个词找到所有包含它的文件,你只有1...
海量数据处理
1、 海量日志数据,提取出访问次数最多的IP 2^10 = 1024 = 1k 千 2^20 = 1M 百万 2^30 = 1G 十亿 2^32 = 4G 传统方法:分治 + Hash (1)一行一行处理日志,提取出IP,并对IP进行Hash取1024的模,也就是将 2^32 = 4G 个IP 分散到 1024 个小文件中,每个文件中包含的IP不超过 4M 个,一个文件的大小应该不会超过内存的限制...
学习路由技术的第二节课
这是学习H3C Cloud Lab的第二节课。 上一节课呢,我学习了如何安装并且成功运行H3C模拟器。 第二节课进行学习交换机和终端配置。 以我们尊敬的专业老师的项目为例。 在启动设备后双击就可直接进入命令行终端。 按下tabulator键就可以补全命令。 输入system-view进入系统视图, interface进入接口配置模式。 line命令进入用户配置模式。 输入vlan就可以对vlan进...
FPGA作业3.2:通过例化设计3-8译码器
1.点击file-new project wizard新建工程,工程名字为“lab22”,然后next-next,选择cyclone旗下的EP3C16F484芯片,点击next,,再点击finish完成工程的创建。 2.点击file-new新建verilog HDL file,输入程序代码,以“lab22.v”的名字保存,如图所示: 然后右键&ldq...