【演算法 in python】查詢演算法
阿新 • • 發佈:2018-11-07
1. 順序查詢
無序序列or順序序列
時間複雜度:O(n)
ASL = (n+1)/2
def search(arr, a):
for i in range(len(arr)):
if arr[i] == a:
return i
return -1
2. 二分查詢
順序序列
時間複雜度:O()。
比較次數:a < < b, 最多比較b次(未找到),最少比較a次。
ASL =
#若未找到,則返回需要插入target的位置 def bisearch(arr, target): l = 0 r = len(arr) -1 while l < r: mid = int((l+r)/2) if arr[mid] == target: return mid if arr[mid] < target: l= mid + 1 if arr[mid] > target: r = mid - 1 return r
3. 插值查詢
順序序列
類似於二分查詢,但是mid值的選擇是自適應的,公式為:, 即考察target是更靠左,還是更靠右。對於表長大,分佈均勻的查詢來說,插值要優於二分。
def search(arr, target): l = 0 r = len(arr) - 1 mid = int(l + (r-l)*((target-arr[l])/(arr[r]-arr[l]))) if arr[mid] == target: return mid if arr[mid] < target: l = mid + 1 if arr[mid] > target: r = mid - 1 return -1
4. 斐波那契查詢
類似於二分
5. 雜湊查詢
即python中的字典,速度最快,用空間換時間。