運用插值法解決靜態查詢問題

2021-08-23 13:22:22 字數 944 閱讀 6231

靜態查詢問題描述為:給定乙個整數和乙個陣列,查詢該整數在這個陣列中的位置或返回乙個不存在的標誌,在查詢過程中陣列中的資料是不變的。例如在乙個**號碼本裡查詢某乙個人。如果陣列中的資料是無序的,我們只能用順序查詢來檢查陣列中的每乙個值,直到找到乙個匹配的為止。如果陣列中的資料已經排過序,就可以使用二分搜尋來代替順序查詢。二分搜尋每次都是從給定查詢範圍的中間開始而不是從端點開始,這樣可以提高查詢效率。二分搜尋在查詢乙個有序的靜態陣列時很快,是我們經常使用的方法。但是如果我們要查詢的值在靠近端點的位置,這時再使用二分搜尋顯然是不明智的。這時就可以使用更快的一種查詢方法插值法。插值法不是簡單地使用中間值來查詢,而是要對查詢值所在的位置做乙個正確的猜測,來確定要查詢的一下項。

下面是插值法的boo實現:

import system

def interpolationsearch(obj as int, *args as (int)):

low = 0

high = args.length - 1

next as int

while low < high:

//to determine the position of the next item

next = low + ((obj - args[low]) / (args[high] - args[low])) * (high - low - 1)

if args[next] < obj:

low = next + 1

else:

high = next

if args[low] == obj:

return low

return -1

>>>a = array(range(3, 1000))

...>>>interpolationsearch(85, *a)

82>>>

上面在陣列a中查詢85所在的位置,返回82.

插值查詢的問題

對於插值查詢的效率很高,但是我發現乙個問題,就是在不連續的情況下,找 arrarr之間的數時應該是返回 1,但是出現了堆疊溢位異常 以下是 public static void main string args int i insertvalue arr,0,arr.length 1,50 syst...

二分查詢法與拉格朗日插值查詢法

define crt secure no warnings include include define n 1024 void search1 int a n int num 二分法插值查詢 else if num a zhong else if flag 1 void search2 int a...

VUE課程 7 解決插值表示式閃爍問題

vue中解決插值表示式閃爍問題,可以用v cloak指令,v cloak在css中用屬性選擇器設定為display none style 屬性選擇器 v cloak style div id p v cloak p div 在vue沒有被成功載入解析之前,檢視對應的標籤上帶了v cloak屬性 指令...