1. 程式人生 > 程式設計 >python中二分查詢法的實現方法

python中二分查詢法的實現方法

如果想要在有序資料中進行查詢想要的資料,二分查詢法就個好方法,它可以大大縮短了搜尋時間,是一種常見的查詢方法。二分查詢很好寫,卻很難寫對,下面,小編就簡單向大家介紹一下二分查詢,並演示器使用程式碼。

1、二分查詢

在一個有序並且無重複的列表中,對該列表的元素進行查詢。

2、特點

(1)必須針對於有序列表

(2)該列表必須無重複

(3)按下標索引查詢

3、使用方法

非遞迴實現:

def binary_search(alist,item):
  """二分查詢 非遞迴方式"""
  n = len(alist)
  start = 0
  end = n - 1
  while start <= end:
    mid = (start + end) // 2
    if alist[mid] == item:
      return True
    elif item < alist[mid]:
      end = mid - 1
    else:
      start = mid + 1
  return False

if __name__ == '__main__':
  li = [17,20,26,31,44,54,55,77,93]
  # print(binary_search(li,55))
  # print(binary_search(li,100))

遞迴實現:

def binary_search_2(alist,item):
  """二分查詢 遞迴方式"""
  n = len(alist)
  if 0 == n:
    return False
  mid = n // 2
  if alist[mid] == item:
    return True
  elif item < alist[mid]:
    return binary_search_2(alist[:mid],item)
  else:
    return binary_search_2(alist[mid + 1:],item)
if __name__ == '__main__':
  li = [17,100))

基礎知識點擴充套件:

介紹

二分查詢也稱折半查詢(Binary Search),它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。

前提

必須待查詢的序列有序

時間複雜度

O(log2n)

原理

1)確定該期間的中間位置K

2)將查詢的值t與array[k]比較,若相等,查詢成功返回此位置;否則確定新的查詢區域,繼續二分查詢。

3)區域確定過程:

若array[k]>t,由於陣列有序,所以array[k,k+1,……,high]>t;故新的區間為array[low,...,K-1];

反之,若array[k]<t對應查詢區間為array[k+1,high]

到此這篇關於python中二分查詢法的實現方法的文章就介紹到這了,更多相關python中二分查詢法如何實現內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!