利用設定哨兵的方法,將第乙個元素設定為要比較的值,這樣可以減少幾次判斷
/* 暴力搜尋的方法 */
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 ...