這個是一系列問題,網際網路公司,一些基本的功能都已經做的很完善了,海量資料處理成為重點的問題,也是面試筆試中常考的題目。主要參考
1.分而治之/hash對映 + hash統計 + 堆/快速/歸併排序
hash對映很重要,分類後的資料不會分散,某乙個類別的資料會全部在一起。用hash_map統計的速度要比map的速度快,因為hash_map沒有自動排序的功能。
典型的題目為,海量資料,求出前k個出現次數最多的。
時間複雜度為o(n) + n'*o(logk),(n')為去重後的資料量。
2.雙層桶劃分
其實也是分而治之的一種,只是比較特殊的分法。ps:分而治之只是一種思想,方法根據具體問題而不同。
典型題目為:第k大,中位數,不重複或重複的數字(ps:注意是數字,演算法的導論有)
乙個數字整數的個數最多為2^32個,那麼可以抓住數的特性來分,分出來的區域是有大小的,那麼可以先統計區域數的個數,而不用排序(關鍵是不用比較),先確定數(如中位數)在哪個區域,可以再分區域,然後在在這個區域裡面找出這個數。
3.bloom filter/bitmap
這個bloom filter 有點不懂了,不過bitmap還是挺簡單的。
典型題目:
一、找出n多數中不重複的整數。可用兩位表示乙個整數,(因為要有三種狀態00,這個數沒有出現(ps:找出沒有出現的數也是乙個考點)01,這個數出現一次。10,這個數出現兩次或多次。11無意義。)也可以說找出n多數目中出現兩次的數,或大於兩次的數。出現多次就要用給多的bit位了,其實原理都一樣。
二、給出n多數,有給出m多數,判斷m個數裡面哪個出現在n多數裡面了,同理。如果特別多,先分,在判斷。
4.trie樹/資料庫/倒排索引/外排序/mapreduce/b樹、b+樹、b*樹、r 樹。
trie樹的典型應用就是漢語分詞,而b樹和各種b樹的變形都是應用在資料庫上比較多,b類樹的高度底,查詢次數少,讀取硬碟次數少。
5.對於數字與的技巧
n多的數字,都是一對一對出現的,即每個數字都有副本,現在假如告訴有乙個數字只有乙個,找出這個單個的數字,可以用數字的「與」操作,把所有的數字與操作後得到的就是那個要找的數字,這樣的數字空間複雜度只有o(1)。如果有兩個這樣的數字,那麼可以把這批數字分類,兩個不同的數字,那麼32位中肯定有一位或者多位是不同的,那麼可以按照這個特點把數字分成兩類,分好後就成了解決兩個只有乙個單個數字的問題了。關鍵是如何找到這個不同的位,可以先把所有的數字與,得出來的有有1的位即是這兩個待求數字的不同位了,隨便找出乙個來就可以分類了~與操作是個解決數字問題的乙個技巧
海量資料問題總結
這個是一系列問題,網際網路公司,一些基本的功能都已經做的很完善了,海量資料處理成為重點的問題,也是面試筆試中常考的題目。主要參考 1.分而治之 hash對映 hash統計 堆 快速 歸併排序 hash對映很重要,分類後的資料不會分散,某乙個類別的資料會全部在一起。用hash map統計的速度要比ma...
海量資料分析問題總結
1 給 個超過100g 的log file,log中存著ip位址,設計演算法找到出現次數最多的ip位址?第一題 首先我們的思路就是利用雜湊進行檔案的切分,我們把100g大小的logfile分為1000份,那麼下來差不多沒乙個檔案就是100m左右,然後再利用雜湊函式除留餘數的方法分配到對應的編號檔案中...
海量資料問題
1 檔案太大,100g,肯定不可能一次載入到記憶體進行處理,這裡就必須將檔案進行切割了,可是依據哪種方法進行切割呢?假設只是從前到後等份切割的話,將檔案切割n份 切割的份數依據所給的記憶體大小 第乙份中假設ip位址為a出現次數最多,第二份中b出現的次數最多,這樣比較出來,假設a比b大,那得出的結果就...