算法 大数据

一、大数据相关概念

1.1 哈希函数

散列函数,输入域可以是很大的范围, 输出域是固定范围
性质:

  • 典型的哈希函数拥有无限的输入值域
  • 输入值相同时,返回值一样
  • 输出值不同时,返回可能一样
  • 不同输入值的得到的哈希值,整体均匀的分布在输出入s上。

第四点是评价哈希函数优劣的关键
经典的哈希算法:MD5和SHA1算法

1.2 Map-Reduce

  • Map阶段:把大任务分成小任务
  • Reduce阶段:子任务并发处理,然后合并结果
    难点:工程上的处理
  • 备份的考虑
  • 系统对用户的透明,即用户在终端使用感觉是在一台电脑上操作
  • 任务分配策略与任务进度的跟踪的细节设计,节点状态的呈现
  • 多用户权限的控制

二、经典例题

2.1 用Map-Reduce方法统计一篇文章内个单词出现的个数

预处理

  1. 去掉文章的标点符号
  2. 对连字符的处理
  3. 对于缩写的处理
  4. 大小写的处理
  • 预处理的结果是得到只包含单词之后的文本

思路:

  • Map阶段:
    每个单词生成词频为1的记录,一个单词可能有多个词频为1的记录,此时还未合并
    通过哈希函数得到每个单词的哈希值,并根据该值分成若干组任务
    每个子任务中包含若干种单词,但同一种单词不会分配进不同的子任务中
  • Reduce阶段
    对同一组任务的相同种类的单词进行合并,最后将所有记录统一合并。

2.2 常见海量处理题目解题关键

  • 1.分而治之,大任务分成小任务
  • 2.常用的hashmap和bitmap

2.3 对10亿个IPV4的ip地址进行排序,每个ip只会出现一次

IPV4大概与32亿个:

思路:

  • ip地址转换为对应的整数,每个整数4字节,需要4G的内存进行排序

优化的思路:
申请长度为2的32次方的bit位的数组,空间约为512mb,数组的下标代表一个IP地址,将10亿个IP对应的数组中的位置由0变成1,便利时,输出数据为1的下标+1就是排序后的结果。

2.4 对10亿人的年龄进行排序

年龄的范围在0~200,需要长度为200的数组,结合桶排的思路

2.5 有一个包含20个亿个全是32位整数的大文件,在其中找到出现次数最多的数,内存限制2G

  • 哈希表疏统计内存不够

思路:

  • 使用哈希函数进行分流,分成许多小文件
  • 对每个小文件用哈希表进行统计
  • 对每个小文件出现最多次数进行比较,得出次数最多的数

2.6 40亿个无符号整数,求找出没出现过的任意一个整数,最多使用10mb内存

划分空间,在用bitmap进行统计

2.7 某搜索公司每天的数据百亿词汇,求找到最热的词汇

  • 哈希分流,分成几个文件到n个机器
  • 内存不够再进行哈希分流。分成n个小文件,对每个小文件进行词频统计
  • 建立记录后,利用小根堆进行Top100的筛选
  • 小根堆筛选的过程:
    取100个数建立小堆,最小的数在最上面,然后依次遍历剩下的数,比根大的话,替换掉根,再调整小根堆,直到遍历结束。

2.8 工程师常使用服务器集群来设计和实现数据缓存,其中一种策略是: 无论是添加、查询还是删除数据,都先将数据的id通过哈希函数转换成一个哈希值,即为key; 如果目前机器有N台,则计算key%N的值,这个值就是该数据所属的机器编号,无论是添加、删除还是查询操作,都只在这台机器上进行。请分析这种策略可能出现的问题,以及提出改进的方案。

问题:增加和删除数据,数据迁移的代价很大,需要重新对数据进行取余运算

  • 一致性哈希算法
    数据和机器形成一个环,数据由顺时针顺序最近的机器来处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值