海量数据处理问题https://www.pianshen.com/article/4806585395/

  
 
 

技术标签: top k  海量数据处理  

 
 

 

海量数据的常见处理方法:

 

 

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

 

 

补充问题:

 

 

 

 

一致性哈希算法的原理:

一致性哈希算法具体应用场景及原理

 

 
 
版权声明:本文为博主原创文章,遵循  CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
 
 

智能推荐

a8e241d0388c78aec427f1e9511c4e4d.png

海量数据处理

文章目录 一、计算容量 二、拆分 三、解决思路之分而治之/Hash映射 + Hash统计 + 堆/快速/归并排序 1、海量日志数据,提取出某日访问百度次数最多的那个IP 2、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。 3、给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同...

32084eee58bb320c1341333d5f25c24d.png

海量数据处理

一、计算容量 1个整数占4byte,1亿个整数占4*10^8byte 大概为 400 MB; 二、拆分 可以将海量数据拆分到多台机器上和拆分到多个文件上: 如果数据量很大,无法放在一台机器上,就将数据拆分到多台机器上。这种方式可以让多台机器一起合作,从而使得问题的求解更加快速。但是也会导致系统更加复杂,而且需要考虑系统故障等问题; 如果在程序运行时无法直接加载一个大文件到内存中,就将大文件拆分成小...

b7714a284b2580869a51e95569abdc71.png

海量数据处理

海量数据处理 基本方法 针对海量数据的处理,可以使用的方法非常多,常见的方法有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...

807a84bd0579c97f543e8617c2e1d01a.JPEG

海量数据处理

常用的几种方法: 1、分治法/Hash映射 + hash_map a、将海量数据通过Hash映射为若干的小文件; b、利用hash_map对每个小文件进行统计(key为数据内容,value为出现次数);   2、Bloom Filter Bloom Filter是一种允许有少量错误的数据判重或者集合求交集的方法。 具体内容以及公式参考博客Bloom Filter 算法简介 (增加 Cou...

 

猜你喜欢

886474c7838e2d56ef7c6e1350c969eb.png

海量数据处理

1)给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 初步分析: 100G普通机器内存中肯定是放不下的,目前使用的IP地址相当于一个32位的字符串,所以我们考虑切分,假设有1G可用内存我们切分为100份,那我们需要把这100个文件全部遍历,每一次出现的IP地址进行统计,最后找出出现次数最多的IP地址,此办法可行但是效率不高。 优化: 把这32位...

c09d8aba4bffb1e53d6e2f1e132f894c.png

海量数据处理

1)给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址 2)与上题条件相同,如何找到top K的IP? 3)给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确  算法和近似算法! 4)给上千个文件,每个文件大小为1K—100M。给n个词,设计算法对每个词找到所有包含它的文件,你只有1...

6062ea8aca321cfede1f2523867ce371.png

海量数据处理

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 个,一个文件的大小应该不会超过内存的限制...

20d6420b22a4cda9a0f596cfd616dca4.png

学习路由技术的第二节课

这是学习H3C Cloud Lab的第二节课。 上一节课呢,我学习了如何安装并且成功运行H3C模拟器。 第二节课进行学习交换机和终端配置。 以我们尊敬的专业老师的项目为例。 在启动设备后双击就可直接进入命令行终端。 按下tabulator键就可以补全命令。 输入system-view进入系统视图, interface进入接口配置模式。 line命令进入用户配置模式。 输入vlan就可以对vlan进...

43b76d23c3e07386b193322a2a959521.png

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...

 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值