常用查找算法


 

 

原文出處:http://www.cnblogs.com/yw09041432/p/5908444.html

常用查找算法

1.順序查找

2.二分查找

3.差值查找

4.肥婆那楔查找

5.樹表查找

6.分塊查找

7.哈希查找

查找:根據給定的某個值,在查找表中確定一個其關鍵字等於給定值得數據元素(或記錄)。

查找算法分類:

1.靜態查找和動態查找

  動態查找指查找表中有刪除和插入操作的表。

2.無序查找和有序查找

  無序查找:被查找數列有序無序均可

  有序查找:被查找數列必須有序

1.順序查找

基本思想:順序查找也稱為線性查找,屬於無序查找算法。從線性表的一端開始,順序掃描,依次將掃描到的節點關鍵字與給定值進行比較,若相等則表示查找成功;若

相等表示查找成功;若掃描結束風沒有找到關鍵字等於K的節點,表示查找失敗。

順序查找的時間復雜度為O(n)。

2.二分查找

基本思想:也稱為折半查找,屬於有序查找算法。用給定值K先與中間節點的關鍵字比較,中間節點把線性表分成兩部分;

若相等則查找成功;若不相等,再根據K與該中間節點關鍵字的比較結果確定下一步查找那個子表,這樣遞歸進行,直到

查找結束發現表中沒有這樣的節點。

二分查找算法在 最壞情況下的比較次數是log2(n+1),期望時間復雜度為O(log2n)

注:折半查找的前提條件是需要有序表順序存儲,對於靜態查找表,依次排序后不再變化,折半查找能得到不錯的效率。但對於需要頻繁執行插入或刪除操作的數據集來說,維護有序的排序會帶來不小的工作量,這種情況下就不建議使用折半查找算法了。

3.插值查找

在基於二分查找的分析下,每次的比較節點都是中間位置,mid=(low+high)/2  => mid=low+1/2(high-low);

這樣通過改進可以取相對key值有關聯關系的節點,mid=low+(key-a[low])/(a[high]-a[low])*(high-low);取得的比值會明顯更加接近key所在位置。

基本思想:這樣二分查找算法,將查找點的選擇改進為自適應選擇,可以提高查找效率。同樣的是這個算法的前提也是基於有序序列上面的。

注意:插值算法多適用於關鍵字分布比較均勻的查找表中。

4.斐波那楔查找

基於以上二分查找和插值查找,這個算法是對比較節點一個特殊的情況,通每次將比較的點作為黃金分割點

5.樹表查找

基本思想:二叉查找樹是對待查找的數據進行生成樹,確保樹的左分支的值小於右分支的值,然后再就和每個節點的父節點進行比較,查找最合適的范圍。這個算法的查找效率很高,

但是如果使用這種查找方法要首先創建樹。

二叉查找樹的復雜度為O(logn),但是在最壞的情況下,比如單支樹,結構退化為一個鏈表相應的復雜度為O(n)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM