四 搜尋演算法

2021-10-02 07:20:27 字數 2015 閱讀 5038

特點:適用於隨機的資料,從頭開始,乙個個查詢。隨著資料量增大,查詢越耗時。

步驟:1. i特點:適用於已經排好序的資料,找到中間資料,通過比較判斷資料在中間資料的哪一邊,再將剩下的資料分為兩半,不停查詢(查詢範圍縮小一半)

步驟:1. 當查詢資料大於1時進行查詢

2. 當等於中間資料時,找到break跳出迴圈

3. 當小於中間資料時,查詢左邊的資料

4. 當大於中間資料時,查詢右邊的資料

特點:假設資料是平均分布的,每個資料的差距接近(類似等差數列),利用公式**資料所在的位置,再用二分搜尋逼近

公式:mid=low + ((key - data[low])/(data]height]-data[low]))*(heigh-low)

簡單字元搜尋

步驟:1. i=0

2. 當i+substr溢位:雜湊表儲存資料的位置滿了(對應的索引的儲存位置已經存有資料),

1. 線性探測法:往後查詢空位置(類似環形結構)

2. 平方探測法:溢位發生時查詢的是f(x)+i2 mod b ,再找f(x)-i2 mod b,(i=0,1,2……)

3. 再雜湊法:溢位則再使用第二種雜湊函式,再溢位則使用第三種雜湊函式,一直到成功

特點:利用已經匹配的字串中,不一致的位置開始匹配,(已經匹配的沒有重複字元】)

bm字串搜尋

特點:從子串的後面向前開始比較,根據字串資訊和適配的位置跳過字串比較位置

特點:以最少的邊連通圖中的所有頂點,且不造成迴路。加權圖中尋找最小生成樹:無相連通圖,用貪婪法則

1. prim演算法

步驟:a. 對乙個加權圖g=v,e),設v=,u=,

b. 求u-v 的差集,v中與u不相交的部分中找到乙個頂點,該頂點能和u中頂點形成最小成本的邊,且不會造成迴路。然後將x加入u集合中

c. 迴圈b,直到u=v

2. kruskal演算法

步驟:a. 各邊按權重從小到大排序

b. 從權志最小的邊開始開始建立最小生成樹,如果加入後造成迴路,則不用

c. 迴圈b,直到加入n-1個邊

1. dijkstra迪克斯特拉演算法

特點:從起點出發,計算與起點直連的頂點的權重,找到最小那個作為新起點,再次計算與它直連的頂點(不包括走過的那個頂點)的權重,再找到最小那個……

步驟: a. g=(v,e) v所有頂點的集合,e所有邊的集合,v=

b. d[k] = a[f,k} (k=1….n) 頂點f到k的距離

c. s= 所有頂點的集合,初始值f

d. 從v-s中找到頂點x,使得d(x)的值最小,把x放入s中

d[i]=min ,i是指x相鄰各頂點的值

2. a*(dijkstra演算法改進版)

特點:需要計算起點和各個頂點之間的距離,還要預估各個頂點到終點的推測權重,減少不必要的查詢

推測權重:

a. 曼哈頓距離:d=|x1-x2|+|y1-y2|

b. 切比雪夫距離:d=max(|x1-x2|,|y1-y2|)

c. 歐式幾何平面距離:d=sqrt|x1-x2|2+|y1-y2|2

步驟與dijkstra演算法類似,起點到頂點的權重+頂點到終點的推測權重,找到最小值

3. floyd

特點:求任意兩點或多點之間的距離。乙個加權圖有n個頂點,必須執行n次迴圈

a0[i][j]=cost[i][j] a0為i,j之間的距離的矩陣

an[i][j] an為i,j之間的最短距離的矩陣

ak[i][j] = min,k>=1

ak[i][j]為i,j之間,經過k頂點的最短距離

舉例:經過頂點1的最短距離

a1[1][2]=min

a1[1][3]=min

a1[2][1]=min

廣度優先演算法:從起點開始,找到所有與起點直連的頂點作為候補頂點。再找到第乙個候補頂點的候補頂點,第二個候補頂點的候補頂點……。遍歷完起點的候補頂點後,再往下。

深度優先演算法:從起點開始,沿著一條路徑不斷向下。直到不能往下再返回。

A 搜尋演算法

啟發式搜尋演算法 要理解 a 搜尋演算法,還得從啟發式搜尋演算法開始談起。所謂啟發式搜尋,就在於當前搜尋結點往下選擇下一步結點時,可以通過乙個啟發函式 來進行選擇,選擇代價最少的結點作為下一步搜尋結點而跳轉其上 遇到有乙個以上代價最 少的結點,不妨選距離當前搜尋點最近一次展開的搜尋點進行下一步搜尋 ...

A 搜尋演算法

a 演算法是基於bfs的一種入門級啟發式搜尋演算法,就是將bfs的佇列改為基於估價的優先佇列,可以快速地找到答案。優先隊列為小根堆 while 優先佇列不為空 取出隊頭並擴充套件 將擴充套件節點以估價值 當前值為優先順序入隊 endwhile估價函式越接近真實值演算法越優,但一定不能大於真實值,否則...

搜尋演算法小結

搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題的部分和所有的可能情況,從而求出問題的解的一種方法。常用的搜尋演算法有 一.回溯法 回溯演算法是所有搜尋演算法中最為基本的一種演算法,其採用了一種 走不通就掉頭 思想作為其控制結構,其相當於採用了先根遍歷的方法來構造解答樹,可用於找解或所有解以及最...