一般我們在解決問題時候,經常能碰到好幾種解決方式,總歸是有最優,還有最不推薦的選擇的,針對搜尋演算法也一樣,因為能實現的方式也有很多個,因此,不知道大家在什麼場景裡使用這些演算法,反正小編都把這些演算法整理出來了,供大家選擇,另外針對個人理解,大家也可以參考哪個更好使用哦~
搜尋演算法
線性搜尋
按一定的順序檢查陣列中每乙個元素,直到找到所要尋找的特定值為止。是最簡單的一種搜尋演算法。
二分搜尋演算法
這種搜尋演算法每一次比較都使搜尋範圍縮小一半。
插值搜尋演算法
是根據要查詢的關鍵字key與順序表中最大、最小記錄的關鍵字比較後的查詢方法,它假設輸入陣列是線性增加的。
跳躍搜尋演算法
需要通過固定的跳躍間隔,這樣它相比二分查詢效率提高了很多。
快速選擇
快速選擇一般是以原地演算法的方式實現,除了選出第k小的元素,資料也得到了部分地排序。
禁忌搜尋
是一種現代啟發式演算法,乙個用來跳脫區域性最優解的搜尋方法。
關於演算法的知識點擴充套件:
線性搜尋
def linear_search(data, search_for):
"""線性搜尋"""
search_at = 0
search_res = false
while search_at < len(data) and search_res is false:
if data[search_at] == search_for:
search_res = true
else:
search_at += 1www.cppcns.com
return search_res
lis = [5, 10, 7, 35, 12, 26, 41]
print(linear_search(lis, 12))
print(linear_search(lis, 6))
插值搜尋
def insert_search(data,x):
"""插值搜尋"""
idx0 = 0
idxn = (len(data) - 1)
while idx0 <= id程式設計客棧xn and x >= data[idx0] and x <= data[程式設計客棧idxn]:
mid = idx0 +int(((float(idxn - idx0)/(data[idxn] - data[idx0])) * (x - data[idx0])))
if data[mid] == x:
return "在下標為"+str(mid) + "的位置找到了" + str(x)
if data[mid] < x:
idx0 = mid + 1
return "沒有搜尋到" + str(x)
lis = [2, 6, 11, 19, 27, 31, 45, 121]
print(insert_searcwww.cppcns.comh(lis, 31))
print(insert_search(lis, 3))
A 搜尋演算法
啟發式搜尋演算法 要理解 a 搜尋演算法,還得從啟發式搜尋演算法開始談起。所謂啟發式搜尋,就在於當前搜尋結點往下選擇下一步結點時,可以通過乙個啟發函式 來進行選擇,選擇代價最少的結點作為下一步搜尋結點而跳轉其上 遇到有乙個以上代價最 少的結點,不妨選距離當前搜尋點最近一次展開的搜尋點進行下一步搜尋 ...
A 搜尋演算法
a 演算法是基於bfs的一種入門級啟發式搜尋演算法,就是將bfs的佇列改為基於估價的優先佇列,可以快速地找到答案。優先隊列為小根堆 while 優先佇列不為空 取出隊頭並擴充套件 將擴充套件節點以估價值 當前值為優先順序入隊 endwhile估價函式越接近真實值演算法越優,但一定不能大於真實值,否則...
搜尋演算法小結
搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題的部分和所有的可能情況,從而求出問題的解的一種方法。常用的搜尋演算法有 一.回溯法 回溯演算法是所有搜尋演算法中最為基本的一種演算法,其採用了一種 走不通就掉頭 思想作為其控制結構,其相當於採用了先根遍歷的方法來構造解答樹,可用於找解或所有解以及最...