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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深度优先搜索知识总结

發布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度优先搜索知识总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

深度優先搜索

深度優先搜索是對圖的一種遍歷方式,如命所示,只要有可能,就盡可能的“深入”。以下為《算法導論》中對深度優先搜索的解釋:

深度優先搜索總是對最近才發現的結點 v 的出發邊進行探索,直到該結點的所有出發邊都被發現為止。一旦結點 v 的所有出發邊都被發現,搜索則“回溯”到 v 的前驅結點(v 是經過該結點才被發現的),來搜索該前驅結點的出發邊。
該過程一直持續到從源結點可以達到的所有結點都被發現為止。如果還存在尚未發現的結點,則深度優先搜索將從這些未被發現的結點中任選一個作為新的源結點,并重復同樣的搜索過程。該算法重復整個過程,直到圖中的所有結點都被發現。

深度優先搜索的實現

實現深度優先搜索,通常使用遞歸的方式,也可以是利用棧來實現。
而深度優先搜索可以分為先序,中序,后序,也就是我們所熟悉的樹的遍歷的方式。這三種方式本質上還是遵循于深度優先搜索的原則,即盡可能的“深入”,不同的是對結點的處理時機,如先序遍歷總是先對當前結點進行了處理,再繼續遍歷,而后序遍歷則是遍歷到葉子結點才逐步對結點進行處理。
關于樹的遍歷的知識可以參考 Construct Binary Tree From Preorder and Inorder Traversal Solution 文章中 How to traverse the tree 一節。

以下為參考自《算法導論》的深度優先搜索的偽代碼:

# 用于記錄時間 time = 0def dfs_visit(graph, u):time = time + 1# 被發現的結點標記為灰色,d 為結點的發現時間u.color = GRAYu.d = timefor v in graph.Adj[u]:if v.color == WHITE:v.p = udfs_visit(graph, v)# 完成處理的結點標記為黑色,f 為結點的結束時間u.color = BLACKtime = time + 1u.f = timedef dfs(graph):# 圖的初始化for vertex in graph.V:vertex.color = WHITE# p 為結點的前驅屬性vertex.p = Nonefor vertex in graph.V:if vertex.color == WHITE:dfs_visit(graph, vertex)

需要注意的是,我們是對進行深度優先搜索,在初學深度優先搜索的時候,總是會將問題局限為對的搜索,樹是圖的一種,局限思維往往會導致無法解決問題。

深度

深度優先搜索可以將結點按層劃分,也就是遍歷的深度,每進行一次遞歸,就是對下一層結點的訪問。
在搜索時記錄深度,可以在搜索時確認當前遍歷到的結點的一些具體信息。

有以下例題:Find Largest Value in Each Tree Row
該題目就是找出樹的每一層的最大值。在遍歷時記錄了深度,然后讓同層結點進行比較即可。以下為解題源碼:

# Definition for a binary tree node. class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def largestValues(self, root):""":type root: TreeNode:rtype: List[int]"""MIN_VALUE = -2**31def dfs(node, depth, res):if depth not in res:res[depth] = MIN_VALUEres[depth] = max(res[depth], node.val)if node.left is not None:dfs(node.left, depth + 1, res)if node.right is not None:dfs(node.right, depth + 1, res)if root is None:return []res = dict()dfs(root, 0, res)return list(res.values())

再看以下例題:Binary Tree Right Side View

這條題目的要求就是找出樹每一層的最右結點。同樣這需要在遍歷時記錄深度,而且需要我們能夠有逆向思維。
通常對樹的深度優先搜索都是采取于先序遍歷的方式,也就是在遍歷時優先訪問左子結點。在這種情況下,樹每一層的最右結點可以看作為該層的最后一個結點。
但是這樣的問題在于,在遞歸的情況下,“最后一個”是難以知悉的,當然深度優先搜索可以利用棧去完成,用棧的話可以控制到“最后一個”。
這里就需要逆向的思維,在深度優先搜索中優先訪問左子結點,那么每次遞歸時每一層最先發現的結點即為的最左結點,這時我們反過來,優先訪問右子節點即可。
以下為解題源碼:

# Definition for a binary tree node. class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def rightSideView(self, root):""":type root: TreeNode:rtype: List[int]"""def dfs(node, depth, res):if depth not in res:res[depth] = node.valif node.right is not None:dfs(node.right, depth + 1, res)if node.left is not None:dfs(node.left, depth + 1, res)if root is None:return []res = {}dfs(root, 0, res)return list(res.values())

在深度優先搜索中,對深度信息的掌握其實就是對遍歷中所在結點的“位置”的掌握,而有時候就需要圍繞這個“位置”的信息來進行解決問題。

轉載于:https://my.oschina.net/bingzhong/blog/3005037

總結

以上是生活随笔為你收集整理的深度优先搜索知识总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品日日摸夜夜爽 | 国产一级在线播放 | 国偷自产av一区二区三区 | 中文字幕第十二页 | 亚洲永久精品一区二区 | 伊人影院av | 精品欧美一区二区精品少妇 | 国产综合精品视频 | 丁香六月激情 | 天天操导航 | 欧洲亚洲国产精品 | 国产无套内射普通话对白 | 国产中文字字幕乱码无限 | 国产成人亚洲综合a∨婷婷 台湾a级片 | 亚洲jlzzjizz少妇 | 综合天堂av久久久久久久 | 欧美亚洲国产视频 | 精品国产青草久久久久96 | 国产无遮挡又黄又爽免费网站 | 精品三区| 日本一本二本三区免费 | 国产又爽又黄游戏 | 国产三级在线观看 | 色哟哟精品观看 | 亚洲av永久无码精品一百度影院 | 操日本女人 | 国产a视频精品免费观看 | 欧美乱大交xxxxx潮喷 | 欧美1| av电影在线观看 | 黄色一级大片免费看 | 老鸭窝av在线 | 欧美亚洲综合视频 | jjzzjjzz欧美69巨大 | 91av免费 | 日韩美女视频一区 | xxxxx黄色 | 成人做受视频试看60秒 | 在线看视频 | 一区二区影院 | va免费视频| 日操干 | 亚洲一区二区在线观看视频 | 欧美一区二区在线播放 | 寡妇高潮一级视频免费看 | 女生脱裤子让男生捅 | 欧美一区2区三区4区公司 | 在线精品观看 | 亚洲女优视频 | 人妻精品一区二区三区 | 国产一区二区中文字幕 | 肥熟女一区二区三肥熟女 | 草草影院在线播放 | 97视频一区二区三区 | 日韩城人视频 | 激情五月婷婷久久 | 性高跟鞋xxxxhd国产电影 | 美国毛片基地 | 日韩欧美一二区 | 日本一区视频 | 又爽又黄又无遮挡 | 日韩欧美中文字幕精品 | 天天做天天爱天天爽综合网 | 亚洲色图制服诱惑 | 91caob| 亚洲第二色 | 69亚洲乱人伦 | 成人久久久精品国产乱码一区二区 | 啪啪日韩 | 欧美成人午夜77777 | 综合天堂av久久久久久久 | 6080毛片| 五月天丁香久久 | 公车激情云雨小说 | 草碰在线| 超碰人人在线 | 亚洲免费激情视频 | 亚洲超碰av| 91插插插插插插插 | 99视频在线观看免费 | 丁香美女社区 | 成人91网站 | 日本作爱视频 | www国产精品内射熟女 | 欧美成人黄色小视频 | 国产ts变态重口人妖hd | 在线看黄色网 | 国产精品99久久久精品无码 | 国产激情视频在线 | 久久99热人妻偷产国产 | www.国产在线观看 | 国产三级精品三级在线 | 九色一区| 免费二区| 五月婷婷激情综合网 | 日本www高清视频 | 99国产精品白浆在线观看免费 | 美女主播在线观看 | av黄网站 |