海量數據處理(三) T樹

T樹是一種樹形結構,典型應用是統計,排序,查找大量數據。核心是空間換時間。

 

結合閆蔚敏的書,我對它的理解是這樣的

海量數據處理(三) <wbr>T樹

 

舉個例子,比如現在有個含有若干QQ號的文件,現在給你一個QQ號,要你在這個文件裏找出文件裏是否有給你的QQ號,如果有,輸出位置。如果沒有,輸出-1。(假設內存能夠容納下這個文件)

 

QQ號可能存在的位數是6位—13位,每一位存在的可能性爲0~9,那麼我們可以建一個T樹,第一層爲位數,有8個元素,這八個元素指向不同的數組。第二層有10個元素,代表着第一位的0~910個元素又指向不同的數組,第三層也是10個元素,也是代表着第二位的0~9。以此類推。從第六層開始數組要增加一個元素(因爲這個QQ號就匹配成功了,放一個標誌位)。這樣一來,建樹成功。然後就開始查找。查找結果寫入文件,則道題就解決了。

 

CSDN上還有一種處理辦法:他建立了一個聯合體,裏邊還包含兩個結構體,分別包含了分支結構和節點結構。與上文的我的相比,它的架構更加豐滿些。建樹的時候能夠直接把該字符串放進樹裏。

該結構體如下

typedef struct TrieNode

{

NodeKind kind;

Union

{

struct {KeyType K; Record *infoptr;} lf;//葉子節點

struct {TrieNode *ptr[27]; int num;} bh;//分支節點

};

}TrieNode,*TrieTree

 

我們可以看到,在整個查找的過程中,最壞情況下的時間複雜度爲O(l)l代表着樹的深度。

 

繼續討論。如果給出1000W個查詢串,每個查詢串的字節數爲1~255,但是去除重複和,只有300W個。現在要求統計出最熱門的10個查詢串,使用空間不能超過1G

 

步驟一:先建立T樹,然後遍歷一遍。若沒有出現這其標誌位置爲0,最後用小根堆進行排序。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章