有序表查詢 插值查詢

2022-03-16 11:57:58 字數 842 閱讀 2391

插值查詢和折半查詢的思想是一樣的,其**機構也基本和折半查詢相同:

//折半查詢

public int binary_search(int a, int n, int key)

else if(key > a[mid])

else return mid;

} return 0;

}

但是我們可能會碰到這種情況,要在取值範圍0-10000之間100個元素從小到大均勻分布的陣列中查詢5,那麼這個時候我們肯定考慮從陣列下表較小的開始從查詢而不是從中間的5000開始查詢。

所以對於中間值下標的確定,mid=low

+hig

h22l

ow+h

igh​

=low+122

1​(high - low)

將上述公式中122

1​優化為:key

−a[l

ow]a

[hig

h]−a

[low

]a[h

igh]

−a[l

ow]k

ey−a

[low

]​則mid=key

−a[l

ow]a

[hig

h]−a

[low

]a[h

igh]

−a[l

ow]k

ey−a

[low

]​(high - low)

其時間複雜度和折半查詢相同,但是對於表比較大,且關鍵字分布比較均勻的查詢表來說,其平均效能優於折半查詢。對於分布極端不均勻的資料,用插值並不合適。

有序表查詢 插值查詢

插值查詢和折半查詢的思想是一樣的,其 機構也基本和折半查詢相同 折半查詢 public int binary search int a,int n,int key else if key a mid else return mid return 0 但是我們可能會碰到這種情況,要在取值範圍0 100...

查詢 插值查詢

插值查詢 插值查詢法的演算法思想 插值查詢法其實就是折半查詢法的加強優化版,它對mid的演算法進行了重新的規定,使此查詢法的效率更高。mid low high low key a low a high a low 插值查詢法的演算法可描述如下 int search keytype key,int n...

查詢 插值查詢

問題描述 通過插值查詢,查詢乙個數在給定陣列中是否存在,若存在找到位置索引,不存在返回 1 給定陣列中的數值都不相等 演算法實現 privat int interpolationsearch int arr,int lo,int hi,int key int mid lo hi lo key arr...