演算法簡介 順序查詢又稱為線性查詢,是一種最簡單的查詢方法。適用於線性表的順序儲存結構和鏈式儲存結構。該演算法的時間複雜度為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 結構和跳轉語句的語法結構和對應的小例子。順序結構,顧名思義,就是程式語句按照順序執行,是最簡單的結構。下面就是很簡單的順序結構,即判斷輸入的年份是否是閏年,整個程式按照語句順序執行 輸入年份...