關於二分法:
二分法使用要求
待查詢的資料集必須有序
二分法的缺陷
針對開頭結尾的資料 查詢效率很低
常見演演算法的原理以及虛擬碼
二分法、冒泡、快拍、插入、堆排、桶排、資料結構(連結串列 約瑟夫問題 如何連結串列是否成環)
現在我們有個需求查詢列表中某個資料值
l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]
其實我們很多方法解決這個需求
- for迴圈的話訓話次數太多影響效率
- 二分法不斷對資料集進行二分切做割
但是接下來用以上提到的兩種方法實現我們們得需求吧!!!!
for迴圈
l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]
for i in l1:
if i == 987:
print('對了')
else:
print('不是')
二分法
l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]
def get_target_num(l1, target_num):
if len(l1) == 0:
print('sry, can not find')
return
middle_index = len(l1) // 2
if target_num > l1[middle_index]:
right_l1 = l1[middle_index + 1:]
print(right_l1)
return get_target_num(right_l1, target_num)
elif target_num < l1[middle_index]:
left_l1 = l1[:middle_index]
print(left_l1)
return get_target_num(left_l1, target_num)
else:
print('good for you')
get_target_num(l1, 987)