二分法查詢是基於有序 python實現二分查詢演算法

2021-10-14 03:35:13 字數 1873 閱讀 4212

二分查詢演算法,是常見的搜尋演算法之一,適用於有序的序列,通過將序列不斷的對折分為區間,從而確定查詢值是否存在,優點是速度快。

首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

使用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...