• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 42  文章 - 3  trackbacks - 0
            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(2)

            隨筆檔案

            文章檔案

            網(wǎng)頁(yè)收藏

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            問(wèn)題實(shí)例:給你A,B兩個(gè)文件,各存放50億條URL,每條URL占用64字節(jié),內(nèi)存限制是4G,讓你找出A,B文件共同的URL。如果是三個(gè)乃至n個(gè)文件呢?

            根據(jù)這個(gè)問(wèn)題我們來(lái)計(jì)算下內(nèi)存的占用,4G=2^32大概是40億*8大概是340億,n=50億,如果按出錯(cuò)率0.01算需要的大概是650億個(gè)bit。現(xiàn)在可用的是340億,相差并不多,這樣可能會(huì)使出錯(cuò)率上升些。另外如果這些urlip是一一對(duì)應(yīng)的,就可以轉(zhuǎn)換成ip,則大大簡(jiǎn)單了。

            問(wèn)題實(shí)例:
            1).海量日志數(shù)據(jù),提取出某日訪(fǎng)問(wèn)百度次數(shù)最多的那個(gè)IP。

            IP的數(shù)目還是有限的,最多2^32個(gè),所以可以考慮使用hash將ip直接存入內(nèi)存,然后進(jìn)行統(tǒng)計(jì)。

            問(wèn)題實(shí)例:

            1)已知某個(gè)文件內(nèi)包含一些電話(huà)號(hào)碼,每個(gè)號(hào)碼為8位數(shù)字,統(tǒng)計(jì)不同號(hào)碼的個(gè)數(shù)。

            8位最多99 999 999,大概需要99m個(gè)bit,大概10幾m字節(jié)的內(nèi)存即可。

            2)2.5億個(gè)整數(shù)中找出不重復(fù)的整數(shù)的個(gè)數(shù),內(nèi)存空間不足以容納這2.5億個(gè)整數(shù)。

            將bit-map擴(kuò)展一下,用2bit表示一個(gè)數(shù)即可,0表示未出現(xiàn),1表示出現(xiàn)一次,2表示出現(xiàn)2次及以上。或者我們不用2bit來(lái)進(jìn)行表示,我們用兩個(gè)bit-map即可模擬實(shí)現(xiàn)這個(gè)2bit-map。

            問(wèn)題實(shí)例:
            1)100w個(gè)數(shù)中找最大的前100個(gè)數(shù)。

            用一個(gè)100個(gè)元素大小的最小堆即可。

            問(wèn)題實(shí)例:
            1).2.5億個(gè)整數(shù)中找出不重復(fù)的整數(shù)的個(gè)數(shù),內(nèi)存空間不足以容納這2.5億個(gè)整數(shù)。

            有點(diǎn)像鴿巢原理,整數(shù)個(gè)數(shù)為2^32,也就是,我們可以將這2^32個(gè)數(shù),劃分為2^8個(gè)區(qū)域(比如用單個(gè)文件代表一個(gè)區(qū)域),然后將數(shù)據(jù)分離到不同的區(qū)域,然后不同的區(qū)域在利用bitmap就可以直接解決了。也就是說(shuō)只要有足夠的磁盤(pán)空間,就可以很方便的解決。

            2).5億個(gè)int找它們的中位數(shù)。

            這個(gè)例子比上面那個(gè)更明顯。首先我們將int劃分為2^16個(gè)區(qū)域,然后讀取數(shù)據(jù)統(tǒng)計(jì)落到各個(gè)區(qū)域里的數(shù)的個(gè)數(shù),之后我們根據(jù)統(tǒng)計(jì)結(jié)果就可以判斷中位數(shù)落到那個(gè)區(qū)域,同時(shí)知道這個(gè)區(qū)域中的第幾大數(shù)剛好是中位數(shù)。然后第二次掃描我們只統(tǒng)計(jì)落在這個(gè)區(qū)域中的那些數(shù)就可以了。

            實(shí)際上,如果不是int是int64,我們可以經(jīng)過(guò)3次這樣的劃分即可降低到可以接受的程度。即可以先將int64分成2^24個(gè)區(qū)域,然后確定區(qū)域的第幾大數(shù),在將該區(qū)域分成2^20個(gè)子區(qū)域,然后確定是子區(qū)域的第幾大數(shù),然后子區(qū)域里的數(shù)的個(gè)數(shù)只有2^20,就可以直接利用direct addr table進(jìn)行統(tǒng)計(jì)了。

            問(wèn)題實(shí)例:
            1).有一個(gè)1G大小的一個(gè)文件,里面每一行是一個(gè)詞,詞的大小不超過(guò)16個(gè)字節(jié),內(nèi)存限制大小是1M。返回頻數(shù)最高的100個(gè)詞。

            這個(gè)數(shù)據(jù)具有很明顯的特點(diǎn),詞的大小為16個(gè)字節(jié),但是內(nèi)存只有1m做hash有些不夠,所以可以用來(lái)排序。內(nèi)存可以當(dāng)輸入緩沖區(qū)使用。

            問(wèn)題實(shí)例:
            1).有10個(gè)文件,每個(gè)文件1G, 每個(gè)文件的每一行都存放的是用戶(hù)的query,每個(gè)文件的query都可能重復(fù)。要你按照query的頻度排序 。

            2).1000萬(wàn)字符串,其中有些是相同的(重復(fù)),需要把重復(fù)的全部去掉,保留沒(méi)有重復(fù)的字符串。請(qǐng)問(wèn)怎么設(shè)計(jì)和實(shí)現(xiàn)?

            3).尋找熱門(mén)查詢(xún):查詢(xún)串的重復(fù)度比較高,雖然總數(shù)是1千萬(wàn),但如果除去重復(fù)后,不超過(guò)3百萬(wàn)個(gè),每個(gè)不超過(guò)255字節(jié)。

            1. 給你A,B兩個(gè)文件,各存放50億條URL,每條URL占用64字節(jié),內(nèi)存限制是4G,讓你找出:A,B文件共同的URL。 
            解法一:Hash成內(nèi)存大小的小塊文件,然后分塊內(nèi)存內(nèi)查交集。
            解法二:Bloom Filter(廣泛應(yīng)用于URL過(guò)濾、查重。參考http://en.wikipedia.org/wiki/Bloom_filterhttp://blog.csdn.net/jiaomeng/archive/2007/01/28/1496329.aspx

            2. 有10個(gè)文件,每個(gè)文件1G, 每個(gè)文件的每一行都存放的是用戶(hù)的query,每個(gè)文件的query都可能重復(fù)。要你按照query的頻度排序。
            解法一:根據(jù)數(shù)據(jù)稀疏程度算法會(huì)有不同,通用方法是用Hash把文件重排,讓相同query一定會(huì)在同一個(gè)文件,同時(shí)進(jìn)行計(jì)數(shù),然后歸并,用最小堆來(lái)統(tǒng)計(jì)頻度最大的。
            解法二:類(lèi)似1,但是用的是與簡(jiǎn)單Bloom Filter稍有不同的CBF(Counting Bloom Filter)或者更進(jìn)一步的SBF(Spectral Bloom Filter,參考http://blog.csdn.net/jiaomeng/archive/2007/03/19/1534238.aspx
            解法三:MapReduce,幾分鐘可以在hadoop集群上搞定。參考http://en.wikipedia.org/wiki/MapReduce

            3. 有一個(gè)1G大小的一個(gè)文件,里面每一行是一個(gè)詞,詞的大小不超過(guò)16個(gè)字節(jié),內(nèi)存限制大小是1M。返回頻數(shù)最高的100個(gè)詞。
            解法一:跟2類(lèi)似,只是不需要排序,各個(gè)文件分別統(tǒng)計(jì)前100,然后一起找前100。

            posted on 2011-03-14 14:25 鷹擊長(zhǎng)空 閱讀(1237) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久午夜电影网| 久久九九有精品国产23百花影院| 国产ww久久久久久久久久| 久久久久国产一级毛片高清版| 久久亚洲欧美日本精品| 99久久国产宗和精品1上映| 国产精品久久久久久久久鸭| 亚洲精品综合久久| 久久久久久免费一区二区三区| 久久伊人色| 色综合久久久久| 看久久久久久a级毛片| 久久久久久久久久久免费精品| 无遮挡粉嫩小泬久久久久久久| 久久久99精品成人片中文字幕| 漂亮人妻被黑人久久精品| 亚洲欧美成人久久综合中文网| 国产欧美久久一区二区| 久久亚洲精品人成综合网| 国产精品99久久久精品无码 | 久久精品国产亚洲Aⅴ蜜臀色欲| 国产精品久久久久免费a∨| 久久亚洲国产成人精品无码区| 久久se精品一区精品二区| 韩国免费A级毛片久久| 久久精品国产乱子伦| 日韩精品无码久久一区二区三| 久久国产精品久久精品国产| 色婷婷综合久久久久中文 | 欧洲精品久久久av无码电影 | 日本久久久久久久久久| 97精品国产97久久久久久免费 | 亚洲中文久久精品无码ww16| 亚洲精品乱码久久久久久不卡| 精品久久久久久无码国产| 国产精品日韩深夜福利久久| 色噜噜狠狠先锋影音久久| 草草久久久无码国产专区| 久久精品国产亚洲精品| 欧美色综合久久久久久| 久久久久久久综合狠狠综合|