幾課很重要的樹


線性數據結構——鏈表、堆棧和隊列


二叉樹嚴格控制了每個結點最多只能有兩個後繼結點(簡稱“兒子”)控制了這樣的結構之後,這棵樹就比普通的樹簡單很多

二叉樹(Binary Tree)


我們再用二叉樹來做點有意義的事情,比如說保持結構裏面結點的大小順序等等,於是我們就有一個更實用的樹結構:二叉查找樹(Binary Search Tree) 


在二叉樹的基本定義上,二叉查找樹有一層更深的定義:左兒子的元素大小嚴格小於父結點,右兒子的元素大小嚴格大於父結點。這樣的話,進行搜索的時候,從根結點出發,如果想要找的元素比這個結點小,向左搜,否則向右搜。這樣的搜索效率竟然可以控制到平均O(log n)!實在是太快了!

不過,O(log n)的效率僅限於一棵比較隨機的二叉查找樹,如果一棵二叉查找樹,兒子永遠比父親大,那麼就會變成一條直線,效率也是隻有O(n)而已。那麼效率就變得很虛無飄渺了。

幸好,偉大的計算機科學家們在二叉查找樹的基礎上,加上了自動平衡的算法,因此創造出AVL樹(AVL Tree)

最佳二叉排序樹通常用於存儲構造後就不經常改動的靜態字典;對於動態字典,在進行元素的插入和刪除操作時,爲了能夠較快地對二叉排序樹進行調整,通常不要求二叉排序樹調整到“最佳的”檢索效率,而是希望達到“較佳”的狀態。

保持二叉排序樹平衡的一個有效方法,即構造平衡二叉排序樹,又稱AVL樹。平衡二叉排序樹具有下列性質∶每個結點左、右子樹深度之差的絕對值不超過1。結點右子樹深度與左子樹深度之差定義爲該結點的平衡因子,平衡二叉排序樹中每個結點的平衡因子只能是1、0或-1。


n個結點的AVL樹的高度一定是O(log n)

檢索,插入,刪除的效率是O(log 2 n)

適用於組織較小的,內存中的目錄




AVL樹的平衡條件是:左兒子高度與右兒子高度相差不超過1,上圖則是給出了平衡算法。告訴大家該怎麼樣對樹進行旋轉,而得到一棵新的平衡樹。

AVL樹的效率已經非常可觀了,平衡之後整棵樹的訪問效率爲O(log n),插入移除效率O(log n),可謂十分迅速!

但是人們總是不知足的,與其通過分析樹本身結構來調整,倒不如自己創建標記,再根據標記來調整,減少旋轉次數!於是紅黑樹(Red Black Tree)就此誕生:

紅黑樹比AVL數更快


hash表:

hashing定義了一種將字符組成的字符串轉換爲固定長度(一般是更短長度)的數值或索引值的方法,稱爲散列法,也叫哈希法。由於通過更短的哈希值比用原始值進行數據庫搜索更快,這種方法一般用來在數據庫中建立索引並進行搜索,同時還用在各種解密算法中。


堆:


堆特點:堆頂元素是整個序列最大或者最小的元素。


堆排序:


堆排序例題:



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