1.順序查詢
全域性遍歷搜尋匹配,暴力檢索,不提倡。
2.二分查詢
常見的二分查詢就是二叉樹的性質,每次都查詢剩餘的一半。所以它的事件複雜度也即是o(logn)。雖然二分查詢演算法的效率很高(這也是二分查詢演算法被廣泛應用的原因),但是前提就是說查詢的序列:有序。在需要頻繁進行插入或者刪除操作的資料記錄中使用二分查詢演算法效率不是很高,因為還要維持資料的有序還需要額外的排序開銷。
3.二分查詢變種
1.插值查詢演算法
變種的地方主要在於mid值的計算方法。在有序序列當中,當我們所要查詢的value偏小或者偏大,如果再用二分就會造成開銷的過大。所以插值查詢演算法當中mid值的計算方法就是將其更偏向查詢值value,已達到更高的效率。
二分查詢中mid值計算:
插值查詢演算法中mid值計算:
2.斐波拉契數列查詢,根據**分割法來查詢關鍵值,效率比二分法還是要高一些。在該演算法中的mid值接為:
//順序查詢
intsequencesearch
(string str,
char value)}}
//折半查詢(二分查詢)
intbinarysearch
(string str,
char value)
}//插值查詢(基於二分查詢)自適應二分查詢
intinsertionsearch
(string str,
char value)
}// 也可用遞迴
//斐波那契查詢
void
fibonacci
(int
* f)
/*定義斐波那契數列*/
const
int max_size =20;
//斐波那契陣列的長度 /*構造乙個斐波那契陣列*/
intfibonaccisearch
(int
*arr,
int key,
int length)
//a為要查詢的陣列,n為要查詢的陣列長度,key為要查詢的關鍵字
int* temp;
//將陣列a擴充套件到f[k]-1的長度
temp =
newint
[f[k]-1
];memcpy
(temp, arr, length *
sizeof
(int))
;for
(int i = length; i < f[k]-1
; i++
)while
(low <= high)
else
if(key > temp[mid])}
delete temp;
return-1
;}intmain()
;int length =
sizeof
(a)/
sizeof
(int);
int key =
500;
int index =
fibonaccisearch
(a, key, length)
; cout << key <<
" is located at : "
<< index;
return0;
}
演算法學習 之查詢
順序查詢 假設靜態查詢表的順序儲存結構為 typedef struct sstable int search seq sstable st,keytype key search seq 比較無監視哨的查詢演算法 int location sstable st elemtype e location ...
經典演算法學習 雜湊查詢
雜湊查詢也稱為雜湊查詢。所謂的雜湊其實就是在記錄的儲存位置和記錄的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到給定值的對映f key 若查詢集合中存在這個記錄,則必定在f key 的位置上。雜湊技術既是一種儲存方法,也是一種查...
演算法學習之折半查詢
二分查詢又稱折半查詢 優點 比較次數少,查詢速度快,平均效能好 缺點 要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。折半查詢流程 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將...