2、有一篇英文文章(也就是說每個單詞之間由空格分隔),請找出「csdn」著個單詞出現的次數,要求效率最高,並寫出演算法的時間級。
3.假設有1kw個身份證號,以及他們對應的資料。身份證號可能重複,要求找出出現次數最多的身份證號。
1.對於第一道題目可以發現如果一次讀入那麼機器的記憶體肯定是受不了的,因此我們只有想其他方法解決,解決方式為了高效還是得符合一定的該概率解決,結果並不一定準確,但是應該可以作對大部分的資料。
(1.我們可以把1億個浮點數分組為100w個一組,這樣就分為了100個組,第一次在每個組中找出最大的1w個數,第二次查詢的時候就是100w個數中再找出最大的1w個數。
ps:100w個數中再找出最大的1w個數用類似快排的思想搞定。
2.第二道題目可以把單詞看成乙個n進製數,csdn相當於('c'-'a')*n^3+('s'-'a')*n^2+('d'-'a')*n+('n'-'a'),然後查詢這個數出現的次數就是答案,也可以建立一顆字典樹,然後去計數!
ps:n可以取32,64等
3.簡單進行hash搞定,o(n),如果資料量再擴大我就不知道怎麼搞了,用磁碟的話,io資料是接受不了的
4.hash,然後建立hash[103][100]的節點的表,每次找出出現次數最少的進行替換。
tags - 海量資料 , 處理
*在處理海量資料時hash + 索引 + 倒排非常有用,在記憶體空間較小的情況下多通道排序也非常有用!另外,在遇到海量資料求高頻問題時,還可以採用取樣的手段來處理。
*對於第一道的思路一種更效率是: 1、讀入的頭10000個數,直接建立二叉排序樹。o(1) 2、對以後每個讀入的數,比較是否比前10000個數中最小的大。(n次比較)如果小的話接著讀下面的數。o(n) 3、如果大,查詢二叉排序樹,找到應當插入的位置。 4、刪除當前最小的結點。 5、重複步驟2,直到10億個數全都讀完。 6、按照中序遍歷輸出當前二叉排序樹中的所有10000個數字。 基本上演算法的時間複雜度是o(n)次比較 演算法的空間複雜度是10000(常數)
海量資料排序演算法
題目 有100萬無序資料,要求從小到大排序。但是每次記憶體只能排序1萬條資料。1.因為每次只能處理1萬條資料,所以要分組處理,我們將100萬資料分成100組 2.因為每組資料都是無序的,所以我們使用平均時間複雜度較好的演算法。3.當我們分組排序完成後,我們要排序1萬條資料就會簡單很多了。我們一共要取...
演算法 海量資料
目錄 公共部分 王道程式設計師求職寶典 兩個檔案共同的url hash 分治 頻率最高 王道程式設計師求職寶典 按頻率排序多個檔案中的query記錄 hash 分治 王道程式設計師求職寶典 找出檔案中頻率最高的100個詞 top k hash 分治 中位數 bat面試經典題 100億個整數的中位數 ...
Java往Excel寫入海量資料
最近需要往excel寫入海量資料,大約10w筆左右 超過6萬會新建乙個sheet再寫 開始使用poi的包,寫1w筆左右就out of memory了 後來換用jxl,寫1.8w筆左右報out of memory 我機器配置pentium r d 3ghz,雙核,記憶體1g 考慮到分批次寫是否會好一些...