Java基礎-try-catch-finally處理
阿新 • • 發佈:2022-03-08
目錄
演算法之二分法
二分法使用有前提: 資料集必須有先後順序(升序 降序)
l1 =[13,21,35,46,52,67,76,87,99,123,213,321,432,564,612] # 查詢一個數 123 """ 二分法原理 獲取資料集中間的元素 比對大小 如果中間的元素大於目標資料 那麼保留資料集的左邊一半 如果中間的元素小於目標資料 那麼保留資料集的右邊一半 然後針對剩下的資料集再二分 如果中間的元素大於目標資料 那麼保留資料集的左邊一半 如果中間的元素小於目標資料 那麼保留資料集的右邊一半 ... """ def get_target(l1, target_num): # 最後需要考慮找不到的情況 l1不可能無限制二分 if len(l1) == 0: print('不好意思 真的沒有 找不到') return # 1.獲取中間元素的索引值(只能是整數) middle_index = len(l1) // 2 # 2.判斷中間索引對應的資料與目標資料的大小 if target_num > l1[middle_index]: # 3.保留資料集右側 l1_left = l1[middle_index + 1:] # 3.1.對右側繼續二分 重複執行相同程式碼 並且複雜度降低 print(l1_left) get_target(l1_left, target_num) elif target_num < l1[middle_index]: # 4.保留資料集左側 l1_right = l1[:middle_index] print(l1_right) # 4.1.對右側繼續二分 重複執行相同程式碼 並且複雜度降低 get_target(l1_right, target_num) else: print('找到了', target_num) get_target(l1, 13) """ 二分法的缺陷 1.如果要找的元素就在資料集的開頭 二分更加複雜(分更多次) 2.資料集必須有順序 目前沒有最完美的演算法 都有相應的限制條件 """