大量資料的問題

2022-02-05 14:07:10 字數 971 閱讀 1773

這些問題一般有著記憶體限制,使用hashmap和位**決不實際。

1.只用2gb內存在20億個整數中找到出現次數最多的數?

將20億個整數的大檔案用hash函式分為16小檔案(這個時候同乙個數一般分到了同乙個小檔案上,小檔案的數最好不要超過2億),這個時候每個小檔案用hash函式計算出現次數,這個時候得到16個數為各自檔案下出現最多,再比較得到這16個數出現最多的那個,就是我們想要的。

2.40億個非負整數中找到沒出現的數?

32位無符號整數的範圍是0-4294967295,存在於乙個檔案上,最多使用乙個g的記憶體(所有不出現的數),或者說限制為10m的記憶體(乙個未出現的數)。

好比將他們分了64個區間,乙個區間應該有67108864,將這個些數遍歷,先申請乙個長度64的整數陣列,統計在區間i 上的個數,遍歷完之後,再遍歷區間陣列,少於67108864的拿出來找缺失的j,接著做67108864的點陣圖陣列,再遍歷一遍0-4294967295,不在區間j的忽略,沒有置1的自然就是缺失了,這時要找的是67108864*i+j。

3.找到100億個url中重複的url以及搜尋詞彙的topk問題?

這個都是建立在資料量很大的情況下,一般做法劃分小檔案或多個機器上,就是通過雜湊函式來劃分,能保證相同的資料放到相同的機器或檔案上,然後在小檔案或機器上使用雜湊函式統計,小根堆排序top100,然後把不同機器的top100進行外排序或繼續使用小根堆。

4.40億個非負整數中找到出現次數兩次的數和所有數的中位數?

如果有1g的記憶體,就開個大位圖陣列長度為80億,第一遇到num就見bitarr[num*2+1]和bitarr[num*2]設定01,下一次10,第三次或多次都是11,這個遍歷bitarr時10的就是要找的,如果在記憶體上有限制的話,就要分區間處理。找中位數也如果,分區間處理,通過累加每個區間的出現的次數,找到中位數落在那個區間,再對這個區間做詞頻統計。

WPF Datagrid 大量資料載入問題

需求 自定義datagrid樣式載入大量資料,至少5000條,載入速度的快慢統計?第一步 自定義datagrid樣式 這個就不多說了,可以參照以下這篇部落格,什麼都有,根據自己想要的樣式修改就行 第二步 載入大量資料 問題 由於樣式太多,大量資料載入時,渲染會變得特別慢,5000條資料載入畫面就需要...

大量資料處理問題

1.根據快速排序劃分的思想 1 遞迴對所有資料分成 a,b b b,d 兩個區間,b,d 區間內的數都是大於 a,b 區間內的數 2 對 b,d 重複 1 操作,直到最右邊的區間個數小於100個。注意 a,b 區間不用劃分 3 返回上乙個區間,並返回此區間的數字數目。接著方法仍然是對上一區間的左邊進...

Intent傳大量資料導致的崩潰問題

崩潰exception transactiontoolargeexception 其實用intent傳值,是有乙個最大的資料限制的,這個限制,不同的手機上不太一樣.當我們覺得乙個資料實在特別大 比如乙個很大的bitmap 的時候,就別用intent來傳值了.解決方案 static 靜態變數 單例持久...