方法: 計數法
ip位址是32位的二進位制數,所以共有n=2^32=4g個不同的ip位址, 建立乙個unsigned count[n];的陣列,即可統計出每個ip的訪問次數,而sizeof(count) == 4g*4=16g, 遠遠超過了32位計算機所支援的記憶體大小,因此不能直接建立這個陣列.下面採用劃分法解決這個問題.假設允許使用的記憶體是512m, 512m/4=128m 即512m記憶體可以統計128m個不同的ip位址的訪問次數.而n/128m =4g/128m = 32 ,所以只要把ip位址劃分成32個不同的區間,分別統計出每個區間中訪問次數最大的ip, 然後就可以計算出所有ip位址中訪問次數最大的ip了.
因為2^5=32, 所以可以把ip位址的最高5位作為區間編號, 剩下的27為作為區間內的值,建立32個臨時檔案,代表32個區間,把相同區間的ip位址儲存到同一的臨時檔案中.
例如:ip1=0x1f4e2342
ip1的高5位是id1 = ip1 >>27 = 0x11 = 3
ip1的其餘27位是value1 = ip1 &0x07ffffff = 0x074e2342
所以把 value1 儲存在t***檔案中.
由id1和value1可以還原成ip1, 即 ip1 =(id1<<27)|value1
按照上面的方法可以得到32個臨時檔案,每個臨時檔案中的ip位址的取值範圍屬於[0-128m),因此可以統計出每個ip位址的訪問次數.從而找到訪問次數最大的ip位址
解題筆記(9) 提取某日訪問次數最多的那個IP
問題描述 從海量資料日誌中,提取出某日訪問次數最多的那個ip。思路 對於海量資料的處理,主要採取的策略就是分而治之,即縮減問題的規模,將乙個大的問題劃分成若干等價的小問題。然後解決這些小問題,最後將獲得的小問題解綜合起來,得出原問題的解。用到比較多的技術主要有雜湊 位圖 堆 trie樹 mapred...
提取出某日訪問百度次數最多的那個IP
方法 計數法 ip位址是32位的二進位制數,所以共有n 2 32 4g個不同的ip位址,建立乙個unsigned count n 的陣列,即可統計出每個ip的訪問次數,而sizeof count 4g 4 16g,遠遠超過了32位計算機所支援的記憶體大小,因此不能直接建立這個陣列.下面採用劃分法解決...
海量資料處理 找出現次數最多的那些
回憶一下tx的二面,有一道題是這樣的 假設有1kw個身份證號,以及他們對應的資料。身份證號可能重複,要求找出出現次數最多的身份證號。乙個很顯然的做法是,hash之,o n 搞定。這前提是記憶體中可以存下。如果是中國的13億人口,記憶體中存不下呢?借用磁碟,多次掃瞄?磁碟io的速度慢得能讓你瘋掉。這時...