日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

查找——图文翔解RadixTree(基数树)

發布時間:2023/12/13 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 查找——图文翔解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

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


----------------------------------

總結

以上是生活随笔為你收集整理的查找——图文翔解RadixTree(基数树)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。