日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

经典的大数据例题

發(fā)布時(shí)間:2024/4/11 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经典的大数据例题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言:

1、說(shuō)明:一般解決大數(shù)據(jù)問(wèn)題有兩個(gè)思路:

1)先將與這道題相關(guān)的所有的數(shù)據(jù)結(jié)構(gòu)進(jìn)行使用一遍,如果有合適的就直接進(jìn)行使用

2)如果不能直接使用,一般就要進(jìn)行哈希切分,然后再使用合適的數(shù)據(jù)結(jié)構(gòu)進(jìn)行問(wèn)題的解決

2、在這里我先來(lái)介紹一種常用于大數(shù)據(jù)問(wèn)題的方法:哈希切分
1)先估算出要切分的大小

2)然后使用哈希的除留余數(shù)法進(jìn)行各個(gè)數(shù)據(jù)的映射

經(jīng)典題:

1、給一個(gè)超過(guò)100G大小的log file,log中存在著IP地址,設(shè)計(jì)算法找到出現(xiàn)此數(shù)最多的IP地址?

思路分析:

1)要進(jìn)行哈希切分編號(hào),log file可以看做是字符串,利用哈希字符串轉(zhuǎn)換算法進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換成整型后,利用哈希函數(shù)進(jìn)行映射,同一IP地址肯定映射到同一編號(hào)中,

2)這里我們使用效率很快的哈希表,進(jìn)行此數(shù)的統(tǒng)計(jì),就可以找出出現(xiàn)此數(shù)最多的IP地址

2、與上題條件相同,如何找到topK的IP地址

思路分析:

1)要找到topK的IP地址,我們?nèi)绻苯舆M(jìn)行排序的話,那么有兩個(gè)問(wèn)題,第一就是內(nèi)存放不下,第二就是效率太慢

2)所以這我們可以建一個(gè)K大小的堆,那么建什么堆呢,這里建小堆比較好,因?yàn)閬?lái)一個(gè)數(shù)和進(jìn)行堆頂?shù)脑剡M(jìn)行比較,然后進(jìn)行向下調(diào)整,大的就下去了,因此最終統(tǒng)計(jì)的就是topK
3、給定100億個(gè)整數(shù),設(shè)計(jì)算法找到只出現(xiàn)一次的整數(shù)

思路分析:

1)100億個(gè)數(shù),無(wú)符號(hào)整型最多才42億多,因此我們首先要明白,這里有很多重復(fù)的數(shù),所以我們?cè)谶M(jìn)行空間的建立時(shí),只用分析42億多的就可以了,那么就是16G,這道題沒(méi)有規(guī)定要使用多大的內(nèi)存,但是如果我們直接建16G的,那也不可能,所以我們就利用位圖來(lái)進(jìn)行解決,那么整型是需要32位的,就需要大約500M的內(nèi)存就可以了

2)然后我們就可以進(jìn)行遍歷只出現(xiàn)一次的整數(shù)
4、給兩個(gè)文件,分別有100億個(gè)整數(shù),我們只有1G內(nèi)存,如何找到兩個(gè)文件的交集

思路分析:

1)文件進(jìn)行比較,用位圖顯然不能解決

2)肯定要進(jìn)行哈希切分,我們將兩個(gè)文件分別切分為1000個(gè)文件,先對(duì)文件A分的1000個(gè)文件里的整數(shù)進(jìn)行哈希分配,即取出來(lái)整數(shù)模除1000,使相同的整出進(jìn)入相同的文件,文件B切分的1000個(gè)文件進(jìn)行同樣的處理,然后分別拿A哈希切分好的第一個(gè)文件和B哈希切分好的第一個(gè)文件對(duì)比,找出交集存到一個(gè)新文件中,依次類推,直到2000個(gè)文件互相比較完。

5、1個(gè)文件有100億個(gè)int,1G內(nèi)存,設(shè)計(jì)算法找到出現(xiàn)次數(shù)不超過(guò)2次的整數(shù)

思路分析:

1)這里類似于第三題

2)但是要找出現(xiàn)次數(shù)不超過(guò)2次的整數(shù),我們可以將狀態(tài)位圖的位用兩位,因?yàn)槲覀兙捅硎救N狀態(tài),在,不在,重復(fù)。
6、給兩個(gè)文件,分別有100億個(gè)query,我們只有1G內(nèi)存,如何找到兩個(gè)文件的交集?分別給出精確算法和近似算法

@精確算法:

思路分析:

1)我們首先來(lái)看,100億個(gè)query(一般query就當(dāng)做字符串),如果我們假定這里的一個(gè)字符串大小是50,那么我們就需要500G大的內(nèi)存,顯然放不下,所以我們就要進(jìn)行哈希切分

2)這里我將它切分成1000份,那么每份的大小就是500M,

3)然后我們使用什么方法來(lái)進(jìn)行這道題的具體解決呢,我來(lái)用圖示說(shuō)明下:


@近似算法:

利用布隆過(guò)濾器:

經(jīng)過(guò)哈希切分后,將其中一個(gè)放到哈希表中然后讓B來(lái)進(jìn)行比對(duì)

7、如何擴(kuò)展BloomFilter使得它支持刪除元素的操作

思路分析:

1)首先我們知道

? ? ? *布隆過(guò)濾對(duì)于不存在的數(shù)是能進(jìn)行準(zhǔn)確判斷的,但是對(duì)于存在的數(shù)是不一定,因?yàn)闀?huì)出現(xiàn)誤判的情況

? ? ? *由于布隆的特點(diǎn),因此它在實(shí)現(xiàn)的時(shí)候,是有多個(gè)置位的,因此不同的數(shù)(或者是其它的類型)會(huì)出現(xiàn)置位的沖突,所以如果直接進(jìn)行刪除的話,就會(huì)影響其它的數(shù)


2)因此,這里我們可以想到一種解決辦法就是利用引用計(jì)數(shù)
8、如何擴(kuò)展BlooFilter使得它支持計(jì)數(shù)操作?

思路分析:

1)上題中我們知道引用計(jì)數(shù)可以使得布隆過(guò)濾器實(shí)現(xiàn)刪除操作,但是有問(wèn)題,如果我們使用引用計(jì)數(shù)的話,至少得4個(gè)字節(jié),而我們知道布隆過(guò)濾器的優(yōu)點(diǎn)有節(jié)省空間,這樣的話,就有點(diǎn)違背了,所以我們就放棄位圖,所以這里我們呢就要考慮使用樣的什么數(shù)據(jù)結(jié)構(gòu)

2)(以字符串來(lái)為例)這里我們依然用vector來(lái)存儲(chǔ)引用計(jì)數(shù),然后進(jìn)行哈希字符串轉(zhuǎn)換算法進(jìn)行轉(zhuǎn)換,讓轉(zhuǎn)換后對(duì)應(yīng)的整型數(shù)作為下標(biāo)自增,這里很明顯就不用位圖了,利用引用計(jì)數(shù)已經(jīng)完成了它的功能。

3)所以我們進(jìn)行刪除的時(shí)候,就將計(jì)數(shù)中大于等于1的進(jìn)行減減復(fù)位
9、給上千個(gè)文件,每個(gè)文件大小為1K-100M。給n個(gè)詞,設(shè)計(jì)算法對(duì)每個(gè)詞找到所有包含它的文件,你只有100K內(nèi)存

思路分析:

1)注:文件不能進(jìn)行切分

2)//給定的內(nèi)存很小,我們將比如說(shuō)90K大小的直接利用哈希表進(jìn)行做,

? ?*?用一個(gè)文件info 準(zhǔn)備用來(lái)保存n個(gè)詞和包含其的文件信息。
? ?* 首先把n個(gè)詞分成x份。對(duì)每一份用生成一個(gè)布隆過(guò)濾器(因?yàn)閷?duì)n個(gè)詞只生成一個(gè)布隆過(guò)濾器,內(nèi)存可能不夠用)。把生成的所有布隆過(guò)濾器存入外存的一個(gè)文件Filter中。
? ?*將內(nèi)存分為兩塊緩沖區(qū),一塊用于每次讀入一個(gè)布隆過(guò)濾器,一個(gè)用于讀文件(讀文件這個(gè)緩沖區(qū)使用相當(dāng)于有界生產(chǎn)者消費(fèi)者問(wèn)題模型來(lái)實(shí)現(xiàn)同步),大文件可以分為更小的文件,但需要存儲(chǔ)大文件的標(biāo)示信息(如這個(gè)小文件是哪個(gè)大文件的)。
? ?*對(duì)讀入的每一個(gè)單詞用內(nèi)存中的布隆過(guò)濾器來(lái)判斷是否包含這個(gè)值,如果不包含,從Filter文件中讀取下一個(gè)布隆過(guò)濾器到內(nèi)存,直到包含或遍歷完所有布隆過(guò)濾器。如果包含,更新info 文件。直到處理完所有數(shù)據(jù)。刪除Filter文件。

備注:
1:關(guān)于布隆過(guò)濾器:其實(shí)就是一張用來(lái)存儲(chǔ)字符串hash值的BitMap.
2:可能還有一些細(xì)節(jié)問(wèn)題,如重復(fù)的字符串導(dǎo)致的重復(fù)計(jì)算等要考慮一下。
10、有一個(gè)字典,包含N個(gè)英文單詞,現(xiàn)在任意給一個(gè)字符串,設(shè)計(jì)算法找到包含這個(gè)字符串的所有英文單詞。

思路分析:

1)這里可以用kmp算法或者字典樹(shù)

總結(jié)

以上是生活随笔為你收集整理的经典的大数据例题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。