一、二叉樹實(shí)際應(yīng)用場(chǎng)景
1、哈夫曼編碼,來源于哈夫曼樹(給定n個(gè)權(quán)值作為n個(gè)葉子結(jié)點(diǎn),構(gòu)造一棵二叉樹,若帶權(quán)路徑長度達(dá)到最小,稱這樣的二叉樹為優(yōu)異二叉樹,也稱為赫夫曼樹(Huffman tree)。即帶權(quán)路徑長度最短的樹),在數(shù)據(jù)壓縮上有重要應(yīng)用,提高了傳輸?shù)挠行?,詳見《信息論與編碼》。
2、海量數(shù)據(jù)并發(fā)查詢,二叉樹復(fù)雜度是O(K+LgN)。二叉排序樹就既有鏈表的好處,也有數(shù)組的好處, 在處理大批量的動(dòng)態(tài)的數(shù)據(jù)是比較有用。
3、C++ STL中的set/multiset、map,以及Linux虛擬內(nèi)存的管理,都是通過紅黑樹去實(shí)現(xiàn)的。查找最大(最?。┑膋個(gè)數(shù),紅黑樹,紅黑樹中查找/刪除/插入,都只需要O(logk)。
4、B-Tree,B+-Tree在文件系統(tǒng)中的目錄應(yīng)用。
5、路由器中的路由搜索引擎。
延伸閱讀:
二、什么是哈希值(hash code)
哈希值是一個(gè)int類型的整數(shù)。每個(gè)元素都應(yīng)該有自己的哈希值,并且這個(gè)值是少數(shù)的。即滿足:
A.如果元素a與元素b相等,則元素a的哈希值與元素b的哈希值相等。
B.如果元素a與元素b不相等,則元素a的哈希值與元素b的哈希值不相等。
通常情況下,對(duì)于int,bool,double,string等語言自帶的類型都有自己的哈希值,可以用它們的哈希函數(shù)來獲取,不同語言的哈希函數(shù)可能會(huì)不同。
如果是用戶自己新建的類型,則需要提供計(jì)算此類型元素哈希值的哈希函數(shù)。
在哈希表中,我們是通過某元素的哈希值來查找、添加或刪除元素的。