python實現簡單查詢,二分查詢,插值查詢

2021-10-01 12:35:04 字數 1654 閱讀 7479

# -*- coding: utf-8 -*-

def main():

# 二分查詢

a = [1, 3, 9, 34, 56, 78]

b = binary_search_1(56, a, 0, len(a) - 1)

print b

# 順序查詢

# 時間複雜度o(n)

def sequence_search(num, a):

for _index, _value in enumerate(a):

if num == _value:

return _index

# 二分查詢,使用遞迴, 要求列表有序

# 期望時間複雜度為o(log2n)

def binary_search_1(num, a, low, high):

middle = (low + high) // 2

if num > a[middle]:

low = middle + 1

return binary_search_1(num, a, low, high)

elif num == a[middle]:

return middle

else:

high = middle - 1

return binary_search_1(num, a, low, high)

# 二分查詢,使用迴圈, 要求列表有序

def binary_search_2(a, item):

low = 0

high = len(a) - 1

while low <= high:

mid = (low + high) / 2

guess = a[mid]

if guess == item:

return mid

elif guess > item:

high = mid - 1

elif guess < item:

low = mid + 1

return -1

# 插值查詢

# mid=(low+high)/2, 即mid=low+1/2*(high-low)

# mid=low+(key-a[low])/(a[high]-a[low])*(high-low),

# 基於二分查詢演算法,但是會自適應查詢,如果乙個元素較小不用折半找小的部分而是根據關鍵字位置,讓mid的變化更靠近關鍵字

# 時間複雜度o(log2(log2n))

def insertion_search_1(num, a, low, high):

mid = low + (num - a[low]) / (a[high] - a[low])

if num == a[mid]:

return mid

elif num > a[mid]:

low = mid + 1

return insertion_search_1(num, a, low, high)

elif num < a[mid]:

high = mid - 1

return insertion_search_1(num, a, low, high)

if __name__ == "__main__":

main()

Python實現二分查詢

二分查詢 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表...

Python實現二分查詢

二分查詢 每次能夠排除掉一半的資料,查詢的效率非常高,但是侷限性比較大。必須是有序序列才可以使用二分查詢。1.非遞迴演算法 def binary search lis,nun left 0 right len lis 1 while left right 迴圈條件 mid left right 2 ...

二分查詢 Python實現

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,...