資料結構與演算法學習總結 深度優先和廣度優先搜尋

2021-10-10 03:37:10 字數 1544 閱讀 9684

圖上的搜尋演算法就是從乙個頂點出發找到到另乙個頂點的路徑

演算法是作用於資料結構之上的,深度優先搜尋演算法和廣度優先搜尋演算法都是基於圖的

深度優先搜尋演算法和廣度優先搜尋演算法既可以作用於有向圖也可以作用於無向圖

深度優先搜尋演算法和廣度優先搜尋演算法是一種暴力搜尋演算法,僅適用於圖不大的搜尋

先查離頂點最近的,然後是次近的,依次往外搜尋,需要借助佇列來實現

演算法實現一般要借助輔助變數visited、queue、prev

vistied用來記錄已經被訪問的頂點

queue用來儲存已經被訪問,但是相連的頂點還沒有被訪問的頂點

prev用來記錄搜尋路徑

時間複雜度:由於每個頂點,每個邊都要被訪問一次,所以時間複雜度為o(v+e),v表示頂點個數,e表示邊數,對於連通圖來說,一般e>=v-1,所以時間複雜度可以簡寫為o(e)

空間複雜度為o(v)

public void bfs(int s, int t)

queuequeue = new linkedlist<>();

queue.add(s);

visited[s] = true;

while(queue.size() != 0)

queue.add(q);}}

}}

public void printresult(int s, int t, int prev)

system.out.println(t + " ");

}

深度優先搜尋借助的是回溯思想,借助遞迴來實現

演算法實現借助輔助變數found、visited、prev

found用來記錄是否已經找到,如果已經找到,就不再遞迴了

vistied用來記錄已經被訪問的頂點

prev用來記錄搜尋路徑

時間複雜度:由於每條邊會被訪問兩次,一次是遍歷,一次是回退,所以時間複雜度為o(e)

空間複雜度為o(v)

boolean found = false;//全域性變數

//廣度優先搜尋演算法

public void dfs(int s, int t)

recurdfs(s, t, visited, pre);

printresult(s, t, prev);

}public void recurdfs(int w, int t, boolean visited, int prev)

for(int i = 0; i < adj[w].size(); ++i)}}

public void printresult(int s, int t, int prev)

system.out.println(t + " ");

}

演算法總結 深度優先搜尋(正在更新)

參考 例項解析 1 選定乙個未被訪問過的頂點v作為起始頂點 或者訪問指定的起始頂點v 並將其標記為已訪問過 2 搜尋與頂點v鄰接的所有頂點,判斷這些頂點是否被訪問過,如果有未被訪問過的頂點,則任選乙個頂點w進行訪問 再選取與頂點w鄰接的未被訪問過的任乙個頂點並進行訪問,依次重複進行。當乙個頂點的所有...

資料結構與演算法學習總結(一)

1.什麼是資料結構和演算法 資料結構,就是一組資料的儲存結構。演算法,就是運算元據的一組方法。資料結構是為演算法服務的,演算法要作用在特定的資料結構之上。2.為什麼要學習資料結構和演算法?1 對個人 資料結構和演算法是程式設計師的必修課程之一,能幫助我們寫出效能更優更好的 演算法,是一種解決問題的思...

資料結構與演算法學習總結(二)

1.什麼是複雜度分析?1 資料結構和演算法解決是 如何讓計算機更快時間 更省空間的解決問題 2 因此需要從執行時間和占用空間兩個維度來評估資料結構和演算法的效能。3 分別用時間複雜度和空間複雜度兩個概念描述效能問題,二者統稱為複雜度。4 複雜度描述的是演算法執行時間 或占用空間 與資料規模的增長關係...