二分查詢之高階(插值查詢)

2021-10-24 13:11:17 字數 1077 閱讀 1013

1. 二分查詢即是折半查詢,即把資料分成2份進行比較判斷。(前提是有序列表)

二分查詢**

function

bsearch

(list,item)

else

if(guess>item)

else

}return

null

}

2. 如果要查詢的數十分接近於low端或者height端,那麼用四分查詢會比二分查詢更快(如何找到類似於二分或者四分的這個值?)

插值查詢**

function

interpolationsearch

(list,searchitem)

else

if(guess>searchitem)

else

}return

null

}

3. 插值查詢與二分查詢關鍵不同在於找mid值所用的公式

二分查詢:mid=low+(height-low)/2=(low+height)/2

插值查詢:mid=low+(height-low)*((item-list[low])/(list[height]-list[low]))

從而可知,當(item-list[low])/(list[height]-list[low])=1/2時就為二分查詢

插值查詢適用範圍

1.插值查詢的前提同樣是有序列表

2.而且列表中的值是均勻分布的,如果列表是 [1,2,3,1000,10000,100000] 這樣值不均勻分布的情況,則不適合

(插值查詢的本質就是用查詢值來推斷mid下標索引的位置)

二分查詢及插值查詢

二分查詢和插值查詢都是基於減而治之的原理 1 細節 二分查詢的範圍的下標 lo和hi代表 lo,hi 因此,選擇mid的時候,兩部分是 lo,mid 和 mid 1,hi 插值查詢的含義類似於在字典中確定乙個字母的範圍,比如選擇b的話,會在較前的頁碼處查詢,這裡,字母相當於陣列的下標,而頁碼相當於要...

二分查詢與插值查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。1 確定排序好的陣列的中間位置mid left right 2 left 0,right n 1 將陣列分為兩部分。2 用要t mid ...

查詢演算法之二分查詢 插值查詢

對半查詢和斐波那契查詢對於元素關鍵字的整體分布沒有要求,可以均勻分布,也可以不均勻分布。對於關鍵字分布不均勻且沒有規律的情況,確實很難找到更好的方法提高演算法的查詢效率 但是如果查詢序列的關鍵字分布均與,那麼是可以利用這種均勻性來提高演算法效率的,例如使用插值查詢。在關鍵字值分布均勻的情況下,使用插...