• <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
            <2012年10月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            常用鏈接

            留言簿(2)

            隨筆檔案

            文章檔案

            網頁收藏

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

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

            根據這個問題我們來計算下內存的占用,4G=2^32大概是40億*8大概是340億,n=50億,如果按出錯率0.01算需要的大概是650億個bit。現在可用的是340億,相差并不多,這樣可能會使出錯率上升些。另外如果這些urlip是一一對應的,就可以轉換成ip,則大大簡單了。

            問題實例:
            1).海量日志數據,提取出某日訪問百度次數最多的那個IP。

            IP的數目還是有限的,最多2^32個,所以可以考慮使用hash將ip直接存入內存,然后進行統計。

            問題實例:

            1)已知某個文件內包含一些電話號碼,每個號碼為8位數字,統計不同號碼的個數。

            8位最多99 999 999,大概需要99m個bit,大概10幾m字節的內存即可。

            2)2.5億個整數中找出不重復的整數的個數,內存空間不足以容納這2.5億個整數。

            將bit-map擴展一下,用2bit表示一個數即可,0表示未出現,1表示出現一次,2表示出現2次及以上。或者我們不用2bit來進行表示,我們用兩個bit-map即可模擬實現這個2bit-map。

            問題實例:
            1)100w個數中找最大的前100個數。

            用一個100個元素大小的最小堆即可。

            問題實例:
            1).2.5億個整數中找出不重復的整數的個數,內存空間不足以容納這2.5億個整數。

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

            2).5億個int找它們的中位數。

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

            實際上,如果不是int是int64,我們可以經過3次這樣的劃分即可降低到可以接受的程度。即可以先將int64分成2^24個區域,然后確定區域的第幾大數,在將該區域分成2^20個子區域,然后確定是子區域的第幾大數,然后子區域里的數的個數只有2^20,就可以直接利用direct addr table進行統計了。

            問題實例:
            1).有一個1G大小的一個文件,里面每一行是一個詞,詞的大小不超過16個字節,內存限制大小是1M。返回頻數最高的100個詞。

            這個數據具有很明顯的特點,詞的大小為16個字節,但是內存只有1m做hash有些不夠,所以可以用來排序。內存可以當輸入緩沖區使用。

            問題實例:
            1).有10個文件,每個文件1G, 每個文件的每一行都存放的是用戶的query,每個文件的query都可能重復。要你按照query的頻度排序 。

            2).1000萬字符串,其中有些是相同的(重復),需要把重復的全部去掉,保留沒有重復的字符串。請問怎么設計和實現?

            3).尋找熱門查詢:查詢串的重復度比較高,雖然總數是1千萬,但如果除去重復后,不超過3百萬個,每個不超過255字節。

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

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

            3. 有一個1G大小的一個文件,里面每一行是一個詞,詞的大小不超過16個字節,內存限制大小是1M。返回頻數最高的100個詞。
            解法一:跟2類似,只是不需要排序,各個文件分別統計前100,然后一起找前100。

            posted on 2011-03-14 14:25 鷹擊長空 閱讀(1225) 評論(0)  編輯 收藏 引用
            久久久久亚洲AV无码去区首| 99久久亚洲综合精品网站| 亚洲精品蜜桃久久久久久| 久久久久久国产精品无码下载| 久久人人爽人人人人片av| 精品久久久无码中文字幕| 亚洲精品tv久久久久| 色88久久久久高潮综合影院| 9191精品国产免费久久| 久久A级毛片免费观看| 久久亚洲欧洲国产综合| 国产高清美女一级a毛片久久w| 狠狠色丁香婷婷久久综合不卡| 欧美粉嫩小泬久久久久久久 | 久久中文娱乐网| 三级韩国一区久久二区综合| 日日噜噜夜夜狠狠久久丁香五月| 97久久婷婷五月综合色d啪蜜芽 | 国产高清国内精品福利99久久| 国产精品视频久久| 国产成年无码久久久免费| 国产aⅴ激情无码久久| 亚洲AV乱码久久精品蜜桃| 精品综合久久久久久888蜜芽| 中文成人无码精品久久久不卡| 伊人色综合九久久天天蜜桃| 国色天香久久久久久久小说| 精品国产乱码久久久久久郑州公司 | 久久中文字幕一区二区| 久久99精品九九九久久婷婷| 亚洲va久久久久| 久久精品国产福利国产琪琪| 精品久久久久久久| 久久无码一区二区三区少妇| 精品熟女少妇AV免费久久| 日本道色综合久久影院| 久久综合九色综合欧美就去吻| 久久香蕉国产线看观看精品yw | 久久国产精品一区| 中文字幕乱码人妻无码久久| 久久免费高清视频|