日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图解算法学习笔记(六):广度优先搜索

發(fā)布時間:2023/12/10 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解算法学习笔记(六):广度优先搜索 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

1)圖簡介

2)圖是什么

3)廣度優(yōu)先搜索

4)實現(xiàn)圖

5)實現(xiàn)算法

6)小結(jié)


本章內(nèi)容;

  • ? ? ? ?學(xué)習(xí)使用新的數(shù)據(jù)結(jié)構(gòu)圖來建立網(wǎng)絡(luò)模型;
  • ? ? ? ?學(xué)習(xí)廣度優(yōu)先搜索;
  • ? ? ? ?學(xué)習(xí)有向圖和無向圖;
  • ? ? ? ?學(xué)習(xí)拓?fù)渑判?#xff0c;這種排序算法指出了節(jié)點之間的依賴關(guān)系。

1)圖簡介

假設(shè)你住在舊金山,要從雙子峰前往金門大橋。你想乘公交車前往,并希望換乘最少??沙俗墓卉嚾缦?#xff1a;

從圖中我們可以發(fā)現(xiàn),前往進(jìn)門大橋的最短路徑需要三步,這種問題被稱為最短路徑問題(shorterst-path problem)。

要確定如何從雙子峰前往金門大橋,需要兩個步驟:

  • 使用圖來建立問題模型。

  • 使用廣度優(yōu)先搜索解決問題。

2)圖是什么

圖模擬一組連接,圖由節(jié)點(node)和邊(edge)組成。

3)廣度優(yōu)先搜索

廣度優(yōu)先搜索是一種用于圖的查找算法??苫卮饍深悊栴}:

從A節(jié)點有前往節(jié)點B的路徑嗎?哪條路徑最短?

下面來看一個例子:假設(shè)你經(jīng)營這一個芒果農(nóng)場,需要尋找芒果經(jīng)銷商,以便將芒果賣給他。為此,你可在朋友中查找。

這種查找很簡單,首先創(chuàng)建一個朋友名單。然后依次檢查名單中的每個人,看看他是否是芒果銷售商。

假設(shè)你沒有朋友是芒果銷售商,那么你必須在朋友的朋友中查找。

檢查名單中的每個人時,你都將其朋友加入名單。

1.查找最短路徑

人物關(guān)系如圖所示:

在你看來,一度關(guān)系勝過二度關(guān)系,二度關(guān)系勝過三度關(guān)系,等等。因此,你應(yīng)現(xiàn)在一度關(guān)系中搜索,確定其中沒有芒果銷售商后,才在二度關(guān)系中搜索。廣度優(yōu)先搜索就是這樣做的!

2.隊列

隊列的工作原理與現(xiàn)實生活中的隊列完全相同。假設(shè)你與朋友一起在公交車站排隊,如果你排在他前面,你講先上車。隊列只有兩種操作:入隊和出隊。

隊列是一種先進(jìn)先出(First In First Out,FIFO)的數(shù)據(jù)結(jié)構(gòu),而棧是一種后進(jìn)先出(Last In First Out, LIFO)的數(shù)據(jù)結(jié)構(gòu)。

4)實現(xiàn)圖

使用散列表,表示節(jié)點與節(jié)點之間的關(guān)系!

有向圖與無向圖關(guān)系如圖:

5)實現(xiàn)算法

概述一下算法原理:

尋找芒果銷售商的Python源碼為:

#從標(biāo)準(zhǔn)庫導(dǎo)入隊列元素 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):#創(chuàng)建一個新隊列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)小結(jié)

  • 廣度優(yōu)先搜索指出是否有從A到B的路徑。
  • ?如果有,廣度優(yōu)先搜索將找出最短路徑。
  • 面臨類似于尋找最短路徑的問題時,可嘗試使用圖來建立模型,再使用廣度優(yōu)先搜索來解決問題。
  • 有向圖中的邊為箭頭,箭頭的方向指定了關(guān)系的方向。
  • ?無向圖中的邊不帶箭頭,其中的關(guān)系是雙向的。
  • ?隊列是先進(jìn)先出(FIFO)的。
  • ?棧是后進(jìn)先出(LIFO)的。
  • 你需要按加入順序檢查搜索列表中的人,否則找到的就不是最短路徑,因此搜索列表必須是隊列。
  • 對于檢查過的人,務(wù)必不要再去檢查,否則可能導(dǎo)致無限循環(huán)。

總結(jié)

以上是生活随笔為你收集整理的图解算法学习笔记(六):广度优先搜索的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。