搜尋是在項集合中查詢特定項的演算法過程。搜尋通常對於項是否存在返回 true 或 false。有時它可能返回項被找到的地方。在python中使用in即可完成對元素的查詢,但是
演算法原理:在項集合中按照順序對元素進行比較,即順序查詢,其時間為o(n)
優缺點:如果查詢的元素位置在中間,則時間只有n/2,但如果沒有相應匹配的時候,時間為n。如果集合是有序的列表,則可以在順序查詢過程中增加乙個判斷條件,以減少消耗的時間,判斷的條件是查詢元素和列表內的元素比較,如果出現比元素大的情況,就說明查詢的元素不在集合中。所以對序列先做排序會提公升順序查詢的速率。
**實現:
# 順序搜尋1
def sequentialsearch(alist,item):
pos=0
found = false
while pos item:
break
else:
found = true
return found
alist=[1,2,6,9,11]
print(sequentialsearch(alist,5))
print(sequentialsearch(alist,9))
演算法原理:已知對於查詢演算法,有序列表會增加效率。在有序列表下,為了提高查詢速率,我們從乙個列表中間開始進行比較,這樣時間為o(logn)。
優缺點:即使二分查詢通常比順序查詢更好,但重要的是要注意,對於小的 n 值,排序的額外成本可能不值得。事實上,我們應該經常考慮採取額外的分類工作是否使搜尋獲得好處。如果我們可以排序一次,然後查詢多次,排序的成本就不那麼重要。然而,對於大型列表,一次排序可能是非常昂貴,從一開始就執行順序查詢可能是最好的選擇。
**實現:
def binarysearch(alist, item):
mid = len(alist) // 2
left = alist[:mid]
right = alist[mid:]
found = false
while len(alist) > 1 and not found:
if item == alist[mid]:
return true
elif item < alist[mid]:
return binarysearch(left, item)
else:
return binarysearch(right, item)
if alist[0] != item:
return found
演算法原理:hash查詢的原理基於hash函式,列表通過hash函式將列表元素對映到乙個雜湊表中,其中雜湊表的索引即hash函式對映的值,對應位置儲存的即列表的元素。通過雜湊表進行查詢,其時間複雜度為o(1)。
hash函式1. 餘數法:將項除以雜湊表的長隊,返回剩餘部分作為雜湊值(h(item) = item%(len(l))
優缺點:需要處理雜湊表的衝突
資料結構 深搜廣搜加強
1 2 迭代加深搜尋 mle空間不夠 難道是要思考乙個玩遊戲的通法?天哪,體諒一下我 3 a 演算法 g n 可以算 h n 是乙個估值函式 八數碼問題的h n 怎麼估計?1 是不在位的數字個數 2 是不在位的數字到其該待位置的曼哈頓距離 用這個剪枝 第k短路 已知最短路 h n 最短路加k 終點到...
python資料結構(二)
棧的應用之進製轉換 我們在大一的計算機基礎甚至高中的課程都已經了解了進製,以及不同進製的轉換方法。所謂進製,就是多少進製的幾次冪,例如十進位制下的233.就是2乘以10的平方加上3乘以十的一次方再加上3乘以10的0次方,演算法 十進位制轉換為二進位制,採用的是除以二求餘數的2演算法,在除二的過程中,...
Python實現的資料結構與演算法之基本搜尋詳解
一 順序搜尋 順序搜尋 是最簡單直觀的搜尋方法 從列表開頭到末尾,逐個比較待搜尋項與列表中的項,直到找到目標項 搜尋成功 或者 超出搜尋範圍 搜尋失敗 根據列表中的項是否按順序排列,可以將列表分為 無序列表 和 有序列表。對於 無序列表,超出搜尋範圍 是指越過列表的末尾 對於 有序列表,超過搜尋範圍...