数据结构——查找:折半查找、二叉查找(排序)树、平衡二叉树
?
七大查找算法:https://www.cnblogs.com/zhang-qc/p/8745153.html
學習的地址 https://www.bilibili.com/video/av27831455?p=20
關于查找表:
上面,靜態查找表,找的過程中不改變表。動態查找表,過程中表會變。
靜態查找表,對確定的數據元素關系的表查找,不一定是線性表。
關于查找:
上面,概率相同。 ?我們可以改變元素的排列順序,可能比較次數會少一點。
平均查找長度,表征效率的問題。
下面為順序查找:順序查找適合于存儲結構為順序存儲或鏈接存儲的線性表,時間復雜度為O(n)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
折半查找(二分查找):(數據要先有序才行,如果是無序的則要先進行排序操作。)
最大比較次數就是 log2n
下面2種查找方法(斐波那契查找和插值查找),思想和上面類似,都是按照某個函數給元素分段。
斐波那契查找:二分查找的一種提升算法,通過運用黃金比例的概念在數列中選擇查找點進行查找,要求開始表中記錄的個數為某個斐波那契數小1,及n=F(k)-1;開始將k值與第F(k-1)位置的記錄進行比較(及mid=low+F(k-1)-1)。如果>,low=mid+1,k-=2;如果<,high=mid-1,k-=1。
差值查找:基于二分查找算法,將查找點的選擇改進為自適應選擇,mid=low+(key-a[low])/(a[high]-a[low])*(high-low),適合表長較大,而關鍵字分布又比較均勻的查找表
分塊查找:又稱索引順序查找,它是順序查找的一種改進方法。
下圖,三個子表,第三個子表的數都大于第二個子表的數都大于第一個子表的數。
中間表,第一行是這段子表中最大的數。第二行是子表第一個元素的位置。
二叉查找(排序)樹:先看根節點,再往左右的一邊,再看子樹的根節點,再左右,再根......
類似于折半查找。
?
下圖,先構造二叉排序樹,再查找。
第一個數就是樹的根節點,
平衡二叉樹
平衡因子:左子樹的深度減去右子樹的深度
平衡二叉樹:平衡因子為-1, 0, 1
平衡二叉樹上所有結點的平衡因子只可能是 -1,0 或 1。
下圖關于平衡因子,指的是平衡二叉樹的平衡因子。
動態平衡要求的是要在插入是,時刻保持樹的平衡性。
如果在AVL樹中進行插入或刪除節點,可能導致AVL樹失去平衡,這種失去平衡的二叉樹可以概括為四種姿態:LL(左左)、RR(右右)、LR(左右)、RL(右左)。AVL樹失去平衡之后,可以通過旋轉使其恢復平衡。
平衡二叉樹的構造:左旋、右旋、左右旋、右左旋
- 平衡查找樹之2-3查找樹(2-3 Tree)
2-3查找樹能保證在插入元素之后能保持樹的平衡狀態,最壞情況下即所有的子節點都是2-node,樹的高度為lgn,從而保證了最壞情況下的時間復雜度。
https://www.cnblogs.com/yangecnu/p/Introduce-2-3-Search-Tree.html
上面鏈接,其中,根節點分裂?的小節?的圖是錯誤的,關于根節點分裂參看
https://blog.csdn.net/u011337574/article/details/80710824
- 平衡查找樹之紅黑樹(Red-Black Tree)
在2-3查找樹基礎上改進的紅黑樹
https://zhuanlan.zhihu.com/p/55255223?edition=yidianzixun&utm_source=yidianzixun&yidian_docid=0L8RqVEX
- B樹和B+樹(B Tree/B+ Tree)
介紹:https://www.e-learn.cn/content/qita/809639
?
樹表查找總結:
二叉查找樹平均查找性能不錯,為O(logn),但是最壞情況會退化為O(n)。在二叉查找樹的基礎上進行優化,我們可以使用平衡查找樹。平衡查找樹中的2-3查找樹,這種數據結構在插入之后能夠進行自平衡操作,從而保證了樹的高度在一定的范圍內進而能夠保證最壞情況下的時間復雜度。但是2-3查找樹實現起來比較困難,紅黑樹是2-3樹的一種簡單高效的實現,他巧妙地使用顏色標記來替代2-3樹中比較難處理的3-node節點問題。紅黑樹是一種比較高效的平衡查找樹,應用非常廣泛,很多編程語言的內部實現都或多或少的采用了紅黑樹。
除此之外,2-3查找樹的另一個擴展——B/B+平衡樹,在文件系統和數據庫系統中有著廣泛的應用。
?
哈希查找:空間換時間,map的本質就是Hash表
?
例題
?
?
總結
以上是生活随笔為你收集整理的数据结构——查找:折半查找、二叉查找(排序)树、平衡二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构——图:极大小连通子图、图的存储
- 下一篇: 数据结构——排序:插入排序、选择排序、交