資料結構與演算法 搜尋(二分法)

2022-06-21 09:36:09 字數 1645 閱讀 2837

搜尋是在乙個專案集合中找到乙個特定專案的演算法過程。搜尋通常的答案是真的或假的,因為該專案是否存在。 搜尋的幾種常見方法:順序查詢、二分法查詢、二叉樹查詢、雜湊查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

first = 0 # 子串行的頭下標

last = len(alist)-1 # 子串行的尾下標

while first <=last :

mid = (first+last)//2 # 子串行下標的中間數

if alist[mid] == item:

return true

elif alist[mid] >item :

last = mid -1 # mid 已經判過了所以尾部-1

else:

first = mid + 1 # mid 已經判過了所以頭部+1

return false

testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,45]

print(binary_search(testlist, 3))

print(binary_search(testlist, 45))

false

true

def binary_search(alist, item): 

# 該遞迴的終止條件

if len(alist) == 0:

return false

else:

mid = (len(alist)-1)//2 # 取子串行下標的中間數

if alist[mid] == item:

return true

elif alist[mid] < item:

return binary_search(alist[mid+1:], item)

else:

return binary_search(alist[:mid], item) # 切片右邊為開區間,相當於取mid-1

testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,45]

print(binary_search(testlist, 3))

print(binary_search(testlist, 42))

false

true

資料結構與演算法 二分法查詢

資料結構與演算法 二分法查詢 查詢的陣列必須是有序的 可以和氣泡排序合起來用 使用二分法查詢能提高查詢效率 每次查詢砍掉一半的資料量,2 n 資料量,n就是二分法查詢的次數 普通二分法查詢,返回索引 lst 0 1,2 3,4 5,6 7,8 9,10 11,12 13,14 15,16 17,18...

搜尋 二分法

input 待搜尋目標整數,目標陣列 output 找到目標整數的索引,找不到則 1 constraints 目標陣列有序排列 公升降序 二分法搜尋思想 舉例說明 你是個摸牌高手,不用掀開麻將只需用手摸就能摸出牌面,桌面扣著80個麻將牌,不同的是麻將上刻的是80個1到500的公升序不連續數字,形如 ...

二分法,二分搜尋

二分法是乙個應用很廣泛的演算法 好吧,剛說出這句話的時候,我查了一下資料,發現我了解的應用寥寥無幾.ok,既然不知道,那就下次補充把。咱們直接進入主題。二分法 bisection method 是一種方程式根的近似值求法。演算法 若要求已知函式f x 0的值則 1.先找出乙個區間 a,b 使得f a...