python 常見的查詢方法

2021-09-10 06:06:41 字數 2061 閱讀 7647

根據資料量的大小,我們可將查詢分為內部查詢和外部查詢。

如果從另外乙個角度來看,查詢的技巧又可分為「靜態查詢」和「動態查詢」兩種。

查詢技巧比較常見的方法有順序法、二分查詢法、斐波拉契法、插值法、雜湊法等

順序查詢法是將資料一項一項地按順序逐個查詢,無論資料的順序怎麼樣,都是從頭到尾遍歷一次。此方法的優點是檔案在查詢前不需要進行任何處理與排序,缺點是查詢速度比較慢。時間複雜度為o(n)。

import random

data=[0]*80

for i in range(80):

data[i]=random.randint(1,150)

def order_search(val):

find=0

for i in range(80):

if data[i]==val:

print('在第%d個位置找到鍵值[%d]'%(i+1,data[i]))

find=1

if find==0:

print('沒有找到')

如果要查詢的資料已經事先排序好了,就可以使用二分查詢法來進行查詢。二分查詢法是將資料分割成兩等份,再比較鍵值與中間值的大小,如果鍵值小於中間值,就可以確定要查詢的資料的在前半段,否則在後半段。如此分割數次直到找到或確定不存在為止。時間複雜度o(logn)。

def bin_search(data,val):

low=0

high=len(data)-1

while low<=high:

mid=(low+high)//2

if data[mid]val:

high=mid-1

else:

return mid

return -1

data=[2,4,5,7,9,11,14,17]

item=bin_search(data,17)

if item==-1:

print('沒有找到')

else:

print('在第%d個位置找到[%d]'%(item+1,data[item]))

按照資料位置的分布,利用公式**資料所在的位置,再以二分法的方式漸漸逼近。使用插值法是假設資料平均分布在陣列中,而每一項資料的差距相當接近或有一定的距離比例。插值法的公式為:

mid=low+( (key-data[low])/(data[high]-data[low]))*(high-low)

其中key是要查詢的鍵,data[high]、data[low]是剩餘待查詢記錄中的最大值和最小值,假設資料項數為n,其插值查詢法的步驟如下:

print('沒有找到')

else:

print('在第%d個位置找到[%d]'%(item+1,data[item]))

斐波拉契查詢法和二分法一樣都是以分割範圍來進行查詢的,不同的是斐波拉契法不是以對半分割而是以斐波拉契級數的方式來分割。

斐波拉契查詢法的好處是只用到加減運算而不需要用到乘除運算,這從計算機運算的過程來看,效率會高於前兩種查詢法。

python 常見函式查詢

函式名 enumerate 函式說明 將下標和索引的值都表示出來 num np.array 1 3,5 7,9 for index,value in enumerate num print index,value 結果 011 3253 749函式名 lstrip rstrip 函式說明 刪除字串開...

Python 常見的內建方法

下面介紹的是常見的內建方法,適用於list tuple str list tuple dict number 11,1,3,14,5 1 max min a max number b min number 2 reversed 倒轉list a list reversed number print ...

Python常見的特殊方法

一 重寫 repr 方法 類的自我描述方法 當列印物件時,系統會根據 repr 方法輸出物件的自我描述資訊,用來告訴外界該物件具有的狀態資訊 class rectangle def init self,width,height self.width width self.height height ...