图解算法学习笔记(六):广度优先搜索
目錄
1)圖簡介
2)圖是什么
3)廣度優先搜索
4)實現圖
5)實現算法
6)小結
本章內容;
- ? ? ? ?學習使用新的數據結構圖來建立網絡模型;
- ? ? ? ?學習廣度優先搜索;
- ? ? ? ?學習有向圖和無向圖;
- ? ? ? ?學習拓撲排序,這種排序算法指出了節點之間的依賴關系。
1)圖簡介
假設你住在舊金山,要從雙子峰前往金門大橋。你想乘公交車前往,并希望換乘最少。可乘坐的公交車如下:
從圖中我們可以發現,前往進門大橋的最短路徑需要三步,這種問題被稱為最短路徑問題(shorterst-path problem)。
要確定如何從雙子峰前往金門大橋,需要兩個步驟:
-
使用圖來建立問題模型。
-
使用廣度優先搜索解決問題。
2)圖是什么
圖模擬一組連接,圖由節點(node)和邊(edge)組成。
3)廣度優先搜索
廣度優先搜索是一種用于圖的查找算法。可回答兩類問題:
從A節點有前往節點B的路徑嗎?哪條路徑最短?
下面來看一個例子:假設你經營這一個芒果農場,需要尋找芒果經銷商,以便將芒果賣給他。為此,你可在朋友中查找。
這種查找很簡單,首先創建一個朋友名單。然后依次檢查名單中的每個人,看看他是否是芒果銷售商。
假設你沒有朋友是芒果銷售商,那么你必須在朋友的朋友中查找。
檢查名單中的每個人時,你都將其朋友加入名單。
1.查找最短路徑
人物關系如圖所示:
在你看來,一度關系勝過二度關系,二度關系勝過三度關系,等等。因此,你應現在一度關系中搜索,確定其中沒有芒果銷售商后,才在二度關系中搜索。廣度優先搜索就是這樣做的!
2.隊列
隊列的工作原理與現實生活中的隊列完全相同。假設你與朋友一起在公交車站排隊,如果你排在他前面,你講先上車。隊列只有兩種操作:入隊和出隊。
隊列是一種先進先出(First In First Out,FIFO)的數據結構,而棧是一種后進先出(Last In First Out, LIFO)的數據結構。
4)實現圖
使用散列表,表示節點與節點之間的關系!
有向圖與無向圖關系如圖:
5)實現算法
概述一下算法原理:
尋找芒果銷售商的Python源碼為:
#從標準庫導入隊列元素 from collections import dequedef person_is_seller(name):return name[-1] == 'm'graph = {} graph["you"] = ["alice", "bob", "claire"] graph["bob"] = ["anuj", "peggy"] graph["alice"] = ["peggy"] graph["claire"] = ["thom", "jonny"] graph["anuj"] = [] graph["peggy"] = [] graph["thom"] = [] graph["jonny"] = []def search(name):#創建一個新隊列search_queue = deque()search_queue += graph[name]# This array is how you keep track of which people you've searched before.searched = []while search_queue:#隊首元素出隊person = search_queue.popleft()# Only search this person if you haven't already searched them.if not person in searched:if person_is_seller(person):print person + " is a mango seller!"return Trueelse:search_queue += graph[person]# Marks this person as searchedsearched.append(person)return Falsesearch("you")6)小結
- 廣度優先搜索指出是否有從A到B的路徑。
- ?如果有,廣度優先搜索將找出最短路徑。
- 面臨類似于尋找最短路徑的問題時,可嘗試使用圖來建立模型,再使用廣度優先搜索來解決問題。
- 有向圖中的邊為箭頭,箭頭的方向指定了關系的方向。
- ?無向圖中的邊不帶箭頭,其中的關系是雙向的。
- ?隊列是先進先出(FIFO)的。
- ?棧是后進先出(LIFO)的。
- 你需要按加入順序檢查搜索列表中的人,否則找到的就不是最短路徑,因此搜索列表必須是隊列。
- 對于檢查過的人,務必不要再去檢查,否則可能導致無限循環。
總結
以上是生活随笔為你收集整理的图解算法学习笔记(六):广度优先搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零开始学视觉Transformer(5
- 下一篇: OpwareSE2.exe - Opwa