python之三大查詢演算法

2021-10-03 15:15:46 字數 2687 閱讀 9064

演算法簡介 順序查詢又稱為線性查詢,是一種最簡單的查詢方法。適用於線性表的順序儲存結構和鏈式儲存結構。該演算法的時間複雜度為o(n)。 基本思路 從第乙個元素m開始逐個與需要查詢的元素x進行比較,當比較到元素值相同(即m=x)時返回元素m的下標,如果比較到最後都沒有找到,則返回-1。 優缺點 缺點:是當n 很大時,平均查詢長度較大,效率低; 優點:是對錶中資料元素的儲存沒有要求。另外,對於線性鍊錶,只能進行順序查詢。 演算法實現

def

sequential_search

(lis, key)

: length =

len(lis)

for i in

range

(length)

:if lis[i]

== key:

return i

else

:return

false

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

演算法描述 給予乙個包含 個帶值元素的陣列a 1、 令 l為0 , r為 n-1 2、 如果l>r,則搜尋以失敗告終 3、 令 m (中間值元素)為 ⌊(l+r)/2⌋ 4、 如果 amt,令 r為 m - 1 並回到步驟二 複雜度分析 時間複雜度:折半搜尋每次把搜尋區域減少一半,時間複雜度為 o(logn) 空間複雜度:o(1)

def

binary_search

(lis, key)

: low =

0 high =

len(lis)-1

time =

0while low < high:

time +=

1 mid =

int(

(low + high)/2

)if key < lis[mid]

: high = mid -

1elif key > lis[mid]

: low = mid +

1else

:# 列印折半的次數

print

("times: %s"

% time)

return mid

print

("times: %s"

% time)

return

false

插值查詢是根據要查詢的關鍵字key與查詢表中最大最小記錄的關鍵字比較後的 查詢方法,其核心就在於插值的計算公式 (key-a[low])/(a[high]-a[low])*(high-low)。 時間複雜度o(logn)但對於表長較大而關鍵字分布比較均勻的查詢表來說,效率較高。

演算法思想 基於二分查詢演算法,將查詢點的選擇改進為自適應選擇,可以提高查詢效率。當然,差值查詢也屬於有序查詢。 注:對於表長較大,而關鍵字分布又比較均勻的查詢表來說,插值查詢演算法的平均效能比折半查詢要好的多。反之,陣列中如果分布非常不均勻,那麼插值查詢未必是很合適的選擇。

複雜度分析 時間複雜性:如果元素均勻分布,則o(log log n)),在最壞的情況下可能需要o(n)。 空間複雜度:o(1)。

def

binary_search

(lis, key)

: low =

0 high =

len(lis)-1

time =

0while low < high:

time +=

1# 計算mid值是插值演算法的核心**

mid = low +

int(

(high - low)

*(key - lis[low])/

(lis[high]

- lis[low]))

print

("mid=%s, low=%s, high=%s"

%(mid, low, high)

)if key < lis[mid]

: high = mid -

1elif key > lis[mid]

: low = mid +

1else

:# 列印查詢的次數

print

("times: %s"

% time)

return mid

print

("times: %s"

% time)

return

false

if __name__ ==

'__main__'

: list =[1

,5,7

,8,22

,54,99

,123

,200

,222

,444

] result = binary_search(list,

444)

print

(result)

三大查詢演算法

針對無序數列 陣列 順序查詢 public static intsequencesearch int arr,int key return 1 針對有序序列 陣列 主要有二分查詢,插值查詢,斐波拉契查詢 二分 拆半 查詢,針對有序陣列 public static intbinarysearch in...

python入門之三大流程

python中控制程式的三大流程,三大流程又叫程式控制流程,在我們編寫 時,程式是怎麼執行的,要用到程式控制流程。三大流程分別是 1.順序 在普通 中,執行的方向是從上到下,從左到右。2.分支 又叫選擇 結構 當 遇到不同的情況時,不同的選擇,的實現是不一樣的 單分支 if 條件 強制縮排,縮排一定...

C 之三大結構

c 是物件導向的語言,它同樣也有三大結構 順序結構 分支結構和迴圈結構以及乙個跳轉語句。接下來就和大家介紹c 結構和跳轉語句的語法結構和對應的小例子。順序結構,顧名思義,就是程式語句按照順序執行,是最簡單的結構。下面就是很簡單的順序結構,即判斷輸入的年份是否是閏年,整個程式按照語句順序執行 輸入年份...