查詢演算法(Python實現)

2021-09-25 08:47:52 字數 2645 閱讀 5103

在日常生活中,幾乎每天都要進行一些查詢的工作,在**簿中查閱某個人的**在電腦的資料夾中查詢某個具體的檔案等等。

查詢表是由同一型別的資料元素構成的集合。例如**號碼簿和字典都可以看作是一張查詢表。

一般對於查詢表有以下幾種操作:

在查詢表中查詢某個具體的資料元素;

在查詢表中插入資料元素;

從查詢表中刪除資料元素。

查詢表術語

靜態查詢表:在查詢表中只做查詢操作,而不改動表中資料元素,稱此類查詢表為靜態查詢表。  

動態查詢表:在查詢表中做查詢操作的同時進行插入資料或者刪除資料的操作,稱此類表為動態查詢表。 

關鍵字:關鍵字又細分為主關鍵字和次關鍵字。

主關鍵字:若某個關鍵字可以唯一地識別乙個資料元素時,稱這個關鍵字為主關鍵字,例如學生的學號就具有唯一性。

次關鍵字:像學生姓名、年齡這類的關鍵字,由於不具有唯一性,稱為次關鍵字。 

演算法描述

從表中的最後乙個資料元素開始,逐個同記錄的關鍵字做比較,如果匹配成功,則查詢成功;如果直到表中第乙個關鍵字查詢完也沒有成功匹配,則查詢失敗。 

如下圖所示:

下面我們用python去實現順序查詢演算法,**如下:

def sequence_search(array, key):

"""順序查詢演算法

"""for i in range(len(array)):

if array[i] == key:

return i

return false

array_0 = [23, 43, 12, 54, 65, 48]

print(sequence_search(array_0, 12))

會把查詢到的數字的索引值列印出來,輸出結果如下:

折半搜尋也稱二分搜尋、對數搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。

演算法描述

搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。

優缺點:

注意:折半查詢演算法只適用於有序表,無序表不可以用折半查詢演算法。

下面我們看乙個具體的折半查詢的例子,並分析具體過程:

對採用折半查詢演算法查詢關鍵字為 21 的過程為:

1. 21 < 56  21一定存在於 low 和 mid 指向的區域中間,如下圖:

2. 更新 high 指標和 mid 指標的位置,令 high 指標移動到 mid 指標的左側同時令 mid 重新指向 low 指標和 high 指標的中間位置。19 < 21,21肯定處於 mid 和 high 指向的區域中,如下圖:

3.當第三次做判斷時,發現 mid 就是關鍵字 21 ,查詢結束,如下圖:

半查詢的執行過程可以用二叉樹來描述,這棵樹通常稱為「判定樹」。

下面用python實現折半查詢演算法,**如下:

def halffind(nums, key, low, high):

"""二分查詢遞迴實現

"""mid = (low + high) // 2

if key == nums[mid]:

return mid

if low > high:

return false

if key > nums[mid]:

return halffind(nums, key, mid + 1, high)

else:

return halffind(nums, key, low, mid - 1)

對其進行測試,測試**如下:

if __name__ == "__main__":

nums = [-789, -96, -53, 23, 52, 56, 520] # 測試案例

key = int(input("請輸入要搜尋的關鍵字:"))

print(halffind(nums, key, 0, len(nums)))

測試結果如下:

查詢演算法 二分查詢python實現

二分查詢 時間複雜度為o logn 空間複雜度為o 1 二分查詢也叫做折半查詢,是一種在有序陣列中查詢某一特定元素的查詢演算法。查詢過程從中間元素開始。如果中間元素正好是要查詢的元素,則查詢過程結束。def binary search1 arr,value binary search1 尋找與val...

Python查詢演算法之插補查詢演算法的實現

插補查詢演算法又稱為插值查詢,它是折半查詢演算法的改進版。插補查詢是按照資料的分布,利用公式 鍵值所在的位置,快速縮小鍵值所在序列的範圍,慢慢逼近,直到查詢到資料為止。根據描述來看,插值查詢類似於平常查英文本典的方法。例如,在查乙個以字母 d 開頭的英文單詞時,決不會用折半查詢法。根據英文詞典的查詢...

python 實現演算法 Python實現演算法 一

1.二分查詢 def binary search mylist,item low 0 high len mylist 1 while low high mid low high 2 如果 low high 2不是偶數,python自動將mid向下圓整。guess mylist mid if gues...