万变不离其宗之海量数据下的算法问题处理思路

本文介绍 万变不离其宗之海量数据下的算法问题处理思路

万变不离其宗之海量数据下的算法问题处理思路

本文由在当地较为英俊的男子金天大神原创,版权所有,欢迎转载,但请保留这段版权信息,多谢合作,有任何疑问欢迎通过微信联系我交流:jintianiloveu

海量数据下的算法问题

本文开篇就引入了一个很重要的问题,海量数据处理下的算法问题。这个不管是在求职还是在以后的工作中都是必须会碰到的问题。因此,我在这里单独开文一篇为大家讲解这一系列问题的缘起缘消。让大家不至于在海量数据中迷失自我。

既然是万变不离其宗,那么肯定所有的问题都可以追本溯源,返璞归真为几类具有共同特性的问题。这里,我们先列举出来,所有的海量数据算法问题,其实都可以被归纳成为这么几类: top K问题, **重复问题 **, 排序问题。这三大问题,来头可不一般,你能遇到的所有大数据海量数据问题,不外呼这三类。

先祭大杀器

在正式记录这三大问题之前,我必须得有必要祭出几个大杀器,这些方法在处理大数据问题上是通用的,也就是说这些方法都是最基本的套路,但是我尽量不研究的非常复杂。

位图法

咋一看,这个名字很简单,但是实际上可不是这样的,这个方法的思想非常牛逼。我们从这么一个问题来看,假如有2.5亿个int的整数,给你一个整数,让你来判断一下,这个整数是否在这2.5亿个整数之中。要求速度尽可能的快,你会怎么办呢?
很多人会说,我会非常机智的遍历一遍这些整数,如果没有一样的就不存在如果有就存在。没错,这没有错,但是假如又来了一个整数,又让你判断有没有在里面,这个时候你又得遍历一遍。这是非常不科学的做法。这个时候我们的位图法就牛逼的出现了。
位图法比较适合于判断是否存在这样的问题,元素的状态比较少,元素的个数比较多的情况之下。那么具体咋么做呢,这样,非常简单明了就是,2.5亿个整数里面,我维护一个长度等于最大整数值得字符串,每个整数是否存在我就在该整数对应的位置置为1,比如,有{2, 4, 5, 6, 67, 5}这么几个整数,我维护一个 00...0000 67位的字符串。但是,如果你不知道整数的最大值,你至少需要一个长度232的字符串,因为整数的最大值就是232,(int占4个字节,因此是32位),那这就最少是512M内存,从char的长度算内存会算吧,直接*8/2^20 就是M的单位。那这么说来就可以理解位图法了。

top K问题

首先让我们来研究一下top k问题。杀器已经寄出,接下来我记录几个经典的大数据问题:

  1. 有1000万个身份证号以及他们对应的数据,身份证号可能重复,找出出现次数最多的身份证号。
  2. 有10000000个记录,这些查询串的重复度比较高,如果除去重复后,不超过3000000个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。请统计最热门的10个查询串,要求使用的内存不能超过1GB。
  3. 有10个文件,每个文件1GB,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。按照query的频度排序。
  4. 有一个1GB大小的文件,里面的每一行是一个词,词的大小不超过16个字节,内存限制大小是1MB。返回频数最高的100个词。
  5. 提取某日访问网站次数最多的那个IP。
  6. 10亿个整数找出重复次数最多的100个整数。
  7. 搜索的输入信息是一个字符串,统计300万条输入信息中最热门的前10条,每次输入的一个字符串为不超过255B,内存使用只有1GB。

这些问题怎么解答,我们一起来慢慢思考吧,先放在这里。

重复问题

重复问题包括去重,寻找共同的重复元素,等都是这个问题。同样的,这里也先把问题归并出来:

  1. 例如,已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。
  2. 10亿个正整数,只有1个数重复出现过,要求在O(n)的时间里找出这个数。
  3. 给定a、b两个文件,各存放50亿个url,每个url各占用64B,要求在O(n)的时间里找出a、b文件共同的url。
  4. 给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

在这些问题里面,最简单最重要的就是去重问题,我吃完饭之后继续写。比如给你一个wifi密码字典,里面重复的密码会大大增加无用功,你得去掉,但是一个字典少则上万多则上千亿,非常大的数据,你怎么去重?
终于吃完饭了,我们继续。
刚才看到了一个看上去十分可行的方法:

如果数据无法一次性读入内存,那么可以,首先设定一个hash函数,把每一行的字符串映射成为一个0-n(什么函数这么牛逼请告诉我),然后把文件分拆成为比如500个小文件,那么重复的字符串一定在相同的小包中,这个时候就可以对每个小包进行去重,方法很简单,一行命令sort foo1.txt|unique ,对所有的小包去重之后再合并起来就可以得到一个大文件啦。(话说把所有小文件合并到大文件有简单的可行方案否?)

总的来说,解决海量数据中的重复问题无外乎两大法宝:

  1. 分治法,hash到小文件,化整为零,各个击破;
  2. 位图法,这个貌似只适合于整数场合?比如电话号码,身份证号之类的?
  3. BloomFilter算法这里就不一一介绍了,这个算法比较高端。

那最后看来,比较可行的还是分而治之比较靠谱一些。

排序问题

最后是海量数据的排序问题。这个我就不一一说了。。。
下一个博客,我将会实际的实战一下,用这些方法处理实际的大数据问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 教你如何迅速秒杀掉:99%的海量数据处理面试题 本文经过大量细致的优化后,收录于我的新书《编程之法》第六章中,新书...
    Helen_Cat阅读 7,399评论 1 39
  • 摘要:本文将向您讲述诸多数据处理面试题以及方法的总结。 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出...
    拾壹北阅读 1,690评论 0 28
  • 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 此题,在我之前的一篇文...
    零一间阅读 912评论 0 5
  • 关于海量数据处理问题,通过最近的面试可以看出这是一个经常会问的问题。本篇文章基于实际的面试问题,总结关于海量数据处...
    Ruheng阅读 5,230评论 1 45
  • 在实际的工作环境下,许多人会遇到海量数据这个复杂而艰巨的问题,它的主要难点有以下几个方面: 一、数据量过大,数据中...
    零一间阅读 1,735评论 0 10