尋找——圖文翔解RadixTree(基數樹),radixtree基數

來源:互聯網
上載者:User

尋找——圖文翔解RadixTree(基數樹),radixtree基數


基數樹


對於長整型資料的映射,如何解決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個位元位作為樹節點即可)


插入:

我們在插入一個新節點時,我們根據資料的位元位,在樹中向下尋找,若沒有相應結點,則產生相應結點,直到資料的位元位訪問完,則建立分葉節點映射相應的對象。

刪除:

我們可以“惰性刪除”,即沿著路徑尋找到分葉節點後,直接刪除分葉節點,中間的非分葉節點不刪除。


應用

Radix樹在Linux中的應用:

Linux基數樹(radix tree)是將long整數鍵值與指標相關聯的機制,它儲存有效率,並且可快速查詢,用於整數值與指標的映射(如:IDR機制)、記憶體管理等。
IDR(ID Radix)機制是將對象的 身份鑒別號整數值ID與對象指標建立關聯表,完成從ID與指標之間的相互轉換。IDR機制使用radix樹狀結構作為由id進行索引擷取指標的稀疏數組,通過使用位元影像可以快速分配新的ID,IDR機制避免了使用固定尺寸的數組存放指標。IDR機制的API函數在lib/idr.c中實現。
Linux radix樹最廣泛的用途是用於 記憶體管理,結構address_space 通過radix樹跟蹤綁定到地址映射上的核心頁,該radix樹允許記憶體管理代碼快速尋找標識為dirty或writeback的頁。其使用的是資料類型unsigned long的固定長度輸入的版本。每級代表了輸入空間固定位元。Linux radix樹的API函數在lib/radix-tree.c中實現。(把頁指標和描述頁狀態的結構映射起來,使能快速查詢一個頁的資訊。)

Linux核心利用radix樹在檔案內位移快速定位檔案快取頁。 
Linux(2.6.7) 核心中的分叉為 64(2^6),樹高為 6(64位系統)或者 11(32位系統),用來快速定位 32 位或者 64 位元位移,radix tree 中的每一個葉子節點指向檔案內相應位移所對應的Cache項。

【radix樹為稀疏樹提供了有效儲存,代替固定尺寸數組提供了鍵值到指標的快速尋找。】 

後記

Radix樹與Trie樹的思想有點類似,甚至可以把Trie樹看為一個基為26的Radix樹。(也可以把Radix樹看做是Tire樹的變異)
Trie樹一般用於字串到對象的映射,Radix樹一般用於長整數到對象的映射。
trie樹主要問題是樹的層高,如果要索引的字的拼音很長很變態,我們也要建一個很高很變態的樹嗎?
radix樹能固定層高(對於較長的字串,可以用數學公式計算出其特徵值,再用radix樹儲存這些特徵值)


相關代碼可以參考

http://www.cnblogs.com/Bozh/archive/2012/04/15/radix.html



----------------------------------感謝您的訪問,希望對您有所協助。 歡迎大家關注、收藏以及評論。----------------------------------



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.