1. 程式人生 > >圖文詳解Radix樹

圖文詳解Radix樹

基數樹

對於長整型資料的對映,如何解決Hash衝突和Hash表大小的設計是一個很頭疼的問題。
radix樹就是針對這種稀疏的長整型資料查詢,能快速且節省空間地完成對映。藉助於Radix樹,我們可以實現對於長整型資料型別的路由利用radix樹可以根據一個長整型(比如一個長ID)快速查詢到其對應的物件指標。這比用hash對映來的簡單,也更節省空間,使用hash對映hash函式難以設計,不恰當的hash函式可能增大沖突,或浪費空間。

radix tree是一種多叉搜尋樹,樹的葉子結點是實際的資料條目。每個結點有一個固定的、2^n指標指向子結點(每個指標稱為槽slot,n為劃分的基的大小)

插入、刪除

radix Tree(基數樹) 其實就差不多是傳統的二叉樹,只是在尋找方式上,利用比如一個unsigned int的型別的每一個位元位作為樹節點的判斷。
可以這樣說,比如一個數1000101010101010010101010010101010,那麼按照Radix 樹的插入就是在根節點,如果遇到0,就指向左節點,如果遇到1就指向右節點,在插入過程中構造樹節點,在刪除過程中刪除樹節點。如果覺得太多的呼叫Malloc的話,可以採用池化技術,預先分配多個節點。
(使用一個位元位判斷,會使樹的高度過高,非葉節點過多。故在實際應用中,我們一般是使用多個位元位作為樹節點的判斷,但多位元位會使節點的子節點槽變多,增大節點的體積,一般選用2個或4個位元位作為樹節點即可)