二分法

英击长空發表於2024-04-01

關於二分法:

二分法使用要求
待查詢的資料集必須有序

二分法的缺陷
針對開頭結尾的資料 查詢效率很低

常見演演算法的原理以及虛擬碼
二分法、冒泡、快拍、插入、堆排、桶排、資料結構(連結串列 約瑟夫問題 如何連結串列是否成環)

現在我們有個需求查詢列表中某個資料值

l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]

其實我們很多方法解決這個需求

  1. for迴圈的話訓話次數太多影響效率
  2. 二分法不斷對資料集進行二分切做割

但是接下來用以上提到的兩種方法實現我們們得需求吧!!!!

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)

相關文章