查詢,二分法,雜湊表,雜湊函式

2021-10-05 23:00:13 字數 2170 閱讀 5608

利用設定哨兵的方法,將第乙個元素設定為要比較的值,這樣可以減少幾次判斷

/* 暴力搜尋的方法 */

intsequetialsearch

(int

*a,int n,

int key)

return i;

}

如果事先再儲存的過程中,就已經時有序的了,那麼可以使用二分法查詢binary search 二分法查詢的判斷次數,只需要完成 log(n)+1次的判斷,就可以找到關鍵值。

#include

/* 二分法查詢 */

intbinarysearch

(int

*a,int len,

int key)

else

if(key > a[mid]

)else

}return-1

;}intmain()

;int key =6;

printf

("%d"

,binarysearch

(a,10

, key));

return0;

}

二分法查詢的改進版本可有插值法和斐波那契查詢,可以應對要查詢的值在很靠近兩邊的位置時,減少查詢的次數

根據雜湊函式,雜湊函式,建立出關鍵碼對應的儲存位置,雜湊表是一塊連續儲存的空間,這塊空間叫做雜湊表或者雜湊表,關鍵碼對應的位址叫做雜湊位址。

目的是為了讓雜湊表分布的更均勻,設計合理的雜湊函式

f(key) = a * key + b

但是需要實現知道關鍵字的分布情況,一般不這樣使用

f(key) = key mod p (p <= m)

通常p的值選擇為不大於表長度m的最大質數(素數)

分為內消解方法和外消解方法兩種

線性探測法:在原雜湊函式的位置上加上正數線性偏移:

f(key) = (f(key) + d) mod p (d = 1,2,3,…,m-1)

二次探測法:線性探查只能往後探測,如果衝突位置的前面有空餘,也可以使用

f(key) = (f(key) + d) mod p (d = 12, -12, 22, -22, … q2, -q 2 q < m/2)

再雜湊法:在衝突的位置再利用乙個新的雜湊函式

f(key) =rh(key) rh代表乙個新的雜湊方法,例如基數轉換,摺疊法,平方取中

公共溢位區法:在雜湊表的外部單獨申請一塊儲存區域,當雜湊衝突時,將值順序的儲存在溢位區內,在衝突資料較少的情況下,效能還是非常高的。

當負載因子的值越大,衝突發生的可能性越高,因此探查就不是o(1)的時間複雜度了,當a < 0.7是,雜湊的查詢,插入和刪除可以看作是常量複雜度。

雜湊查詢和二分法

第一步,讓陣列元素全部為零 第二部,輸入資料,並建立資料與陣列元素的關係,建立直接關係 第三步 查詢 有乙個資料字典,裡面存有n個數字 n 100000 小明現在接到乙個任務,這項任務看起來非常簡單 給定m個數字,分別查詢這m個數字是否出現在字典之中 但是考慮到資料量的問題,小明找到了善於程式設計的...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...