数据结构(6) -- 查找
查找表:用于查找的數據集合
對查找表的四種操作:
-
查詢某特定元素是否在查找表中
-
檢索滿足條件的某個特定的數據元素的各種屬性
-
在查找表中插入一個數據元素
-
刪除一個數據元素
靜態查找表:沒有插入,刪除操作的查找表。查找方法:順序查找、折半查找、散列查找
動態查找表方法:二叉排序樹的查找(二叉平衡樹、B樹)、散列查找
平均查找長度:,n是查找表的長度。P_{i}是查找第i個元素的概率,C_{i}是找到第i個數據所需進行的比較次數,是查找表的長度。是查找第個元素的概率,是找到第個數據所需進行的比較次數
順序查找:
-
一般線性表的順序查找
?
-
缺點:當n較大時,平均查找長度較大,效率低
優點:對數據元素存儲沒有要求
-
有序表的順序查找
折半查找:
-
折半查找過程可以用判定樹表示。圓形結點是一個記錄,值為關鍵字值。葉節點是方形,表示查找不成功的情況。查找成功時查找長度是根節點到目的結點路徑上的結點數;不成功是根節點到失敗節點父節點的路徑上的結點數。
-
折半查找法查找給定值的比較次數最多不會超過樹的高度。
-
折半查找時間復雜度O(log2n)
-
折半查找只適合線性表的順序存儲結構,不適合鏈式存儲,且要求元素按關鍵字有序
-
分塊查找:
-
查找表分若干子塊,塊內元素可以無序,但塊之間有序。第一個塊中關鍵字小于第二塊中所有記錄關鍵字,以此類推。再建立一個索引表,索引表中每個元素含有各塊最大關鍵字和各塊第一個元素的地址,索引表按關鍵字有序排列。
B樹
-
所有結點的孩子結點數的最大值稱B樹的階m
-
若根節點不是終端結點,至少2棵子樹,1個關鍵字
-
除根節點外的所有非葉節點至少 天花板(m/2)棵子樹,天花板(m/2)-1 個關鍵字
-
B樹是所有結點的平衡因子均等于0的多路查找樹
-
一棵包含n個關鍵字,高度為h,階數為m的B樹:
-
B樹插入后小于m則直接插入,插入后大于m-1,則需分裂。(最多m-1——
-
B樹刪除用到最少天花板(m/2)-1個關鍵字
-
B樹不支持順序查找
-
每個結點關鍵字個數范圍:
-
B樹葉節點個數對應查找失敗的情況,n個關鍵字,失敗的可能性n+1種
B+樹
-
每個分支最多m棵子樹
-
非根葉節點至少兩棵子樹,其他至少天花板(m/2)棵子樹。
-
結點的子樹個數與關鍵字個數相等
-
B+樹支持順序查找
-
葉節點包含全部關鍵字及指向相應記錄的指針,葉節點中將關鍵字按大小順序排列。分支結點只包含它的各個子節點中關鍵字的最大值和指針。
-
每個結點關鍵字個數范圍:
-
B+樹非葉節點不含有關鍵字對應記錄的存儲地址
-
B+樹中,無論查找成功與否,每次查找都是一條從根節點到葉節點的路徑
散列表
散列函數把查找表中的關鍵字映射成該關鍵字對應的地址的函數
沖突:兩個或兩個以上的不同關鍵字映射到同一地址
同義詞:發生碰撞的關鍵詞
散列表:根據關鍵字直接進行訪問的數據結構,查找時間復雜度O(1),與表中元素個數無關
常用散列函數:
-
直接定址法
-
除留余數法
-
數字分析法
-
平方取中法
-
折疊法
處理沖突的方法:
-
開放定址法
-
線性探測法
-
平方探測法
-
再散列法
-
偽隨機序列法
-
-
拉鏈法
散列表查找效率取決于3個因素:散列函數、處理沖突的方法、裝填因子
裝填因子:
,表中記錄樹n、散列表長度m
散列表的平均查找長度依賴于裝填因子α,不直接依賴m或n。α越大,表越滿
總結
以上是生活随笔為你收集整理的数据结构(6) -- 查找的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构(5) -- 图
- 下一篇: 数据结构(7)—— 排序总结