二分查詢演算法,是常見的搜尋演算法之一,適用於有序的序列,通過將序列不斷的對折分為區間,從而確定查詢值是否存在,優點是速度快。
首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
使用python遞迴實現其演算法:
def binary_search(items: list, item: str) -> float:
if not len(items):
return false
if item > items[-1]:
return false
elif item < items[0]:
return false
n = len(items) // 2
if items[n] == item:
return true
else:
if items[n] < item:
return binary_search(items[n:], item)
else:
return binary_search(items[:n], item)
二分查詢是應用在資料量較大的場景中,如一些的rgb陣列操作中,典型的是在滑塊驗證中使用二分法來確定最佳距離。
def match(self, target, template):
img_rgb = cv2.imread(target)
img_gray = cv2.cvtcolor(img_rgb, cv2.color_bgr2gray)
template = cv2.imread(template,0)
run = 1
w, h = template.shape[::-1]
print(w, h)
res = cv2.matchtemplate(img_gray,template,cv2.tm_ccoeff_normed)
# 使用二分法查詢閾值的精確值
l = 0
r = 1
while run < 20:
run += 1
threshold = (r + l) / 2
print(threshold)
if threshold < 0:
print('error')
return none
loc = np.where( res >= threshold)
print(len(loc[1]))
if len(loc[1]) > 1:
l += (r - l) / 2
elif len(loc[1]) == 1:
print('目標區域起點x座標為:%d' % loc[1][0])
二分法查詢是基於有序 專題系列 二分查詢
這個題比較簡單,二分查詢的問題,一開始出錯了,進了迴圈出不來,是因為當mid mid大於x的時候,賦值right應該是mid 1,而不是mid,因為它是向下取整的,所以是mid 1一定是小於等於開方數字的,其次就是二分的時候向右取一位,再就是要用longlong型別,否則會溢位。class solu...
二分法查詢是基於有序 201,查詢順序查詢
查詢演算法中順序查詢算是最簡單的了,無論是有序的還是無序的都可以,也不需要排序,只需要乙個個對比即可,但其實效率很低。我們來看下 1public static int search1 int a,int key 6 return 1 7 如果找到就返回查詢的數所在陣列中的下標,如果沒找到就返回 1。...
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...