《演算法導論》筆記 第22章 22 3 深度優先搜尋

2021-06-21 21:47:44 字數 1836 閱讀 6774

深度優先搜尋的先輩子圖形成了乙個由數棵深度優先樹組成的深度優先森林。

時間戳每個頂點v有兩個時間戳:當頂點v第一次被發現時,記錄下第乙個時間戳d[v],當結束檢查v的鄰接表時,記錄下第二個時間戳f[v]。

dfs的執行時間為θ(v+e)。

深度優先搜尋的性質

括號結構:把發現頂點u用左括號表示,完成用右括號表示,各級括號正確巢狀,是個完善的表示式。

括號定理

在對乙個圖g(v,e)的任何深度優先搜尋中,對於圖中任意兩個頂點u和v,下述三個條件僅有乙個成立:

區間[d[u],f[u]]和區間[d[v],f[v]]是完全不相交的,且在深度優先森林中,u或v都不是對方的後裔。

區間[d[u],f[u]]完全包含於區間[d[v],f[v]]中,且在深度優先樹中,u是v的後裔。

區間[d[v],f[v]]完全包含於區間[d[u],f[u]]中,且在深度優先樹中,v是u的後裔。

後裔區間的巢狀

在乙個圖g中的深度優先森林中,頂點v是頂點u的後裔,當且僅當d[u]

白色路徑定理

在乙個圖g的深度優先森林中,頂點v是頂點u的後裔,當且僅當在搜尋過程中與時刻d[u]發現u時,可以從頂點u出發,經過一條完全由白色頂點組成的路徑到達v。

邊的分類

對圖g的邊進行歸類

乙個有向圖是無迴路的,當且僅當對該圖的深度優先搜尋沒有產生反向邊。

根據在圖g上進行深度優先搜尋所產生的深度優先森林g_π,可以把圖的邊分為四種型別:

1) 樹邊,是深度優先森林g_π中的邊。

2) 反向邊,連線頂點u到它的某一祖先v的那些邊。自環也被認為是反向的。

3) 正向邊,連線頂點u到它某個後裔v的非樹邊(u,v)。

4) 交叉邊,其他型別的邊,乙個頂點不是另乙個頂點的祖先,也可以在不同樹的頂點之間。

在對乙個無向圖g進行深度優先搜尋的過程中,g的每一條邊要麼是樹邊,要麼是反向邊。

22.3-1 畫出乙個3x3的圖。

22.3-2 說明深度優先搜尋在圖上是如何進行的。

22.3-3 對圖示深度優先搜尋,給出其括號結構。

22.3-4 證明:邊(u,v)是一條:

a) 樹邊或前向邊,當且僅當d[u]b) 反向邊,當且僅當d[v]<=d[u]c) 交叉邊,當且僅當d[v]

22.3-5 證明:在乙個無向圖中,如果是根據在深度優先搜尋中,(u,v)和(v,u)哪乙個首先被遇到作為標準來將(u,v)歸類為樹邊或反向邊的話,就等價於根據邊分類方案中的各型別的優先順序來對它進行分類。

22.3-6 重寫dfs,用棧消除遞迴。

22.3-7 給出乙個反例。在乙個有向圖g中,如果有一條從u到v的路徑,並且,在對g的深度優先搜尋中,如果有d[u]

22.3-8 給出乙個反例。如果有一條從u到v的路徑,則任和深度優先搜尋都必定能得到d[v]<=f[u]。

22.3-9 輸出有向圖g中每一條邊及其型別。

22.3-10 解釋有向圖中,對於乙個頂點u,是如何會最終落到 一棵僅包含u的深度優先搜尋樹中的。

頂點u與其他頂點不相連。

22.3-11 證明:對無向圖g的深度優先搜尋可以用來識別出g的連通分支,且深度優先森林中所包含的樹的數量與g中的連通分支的數量一樣多。染色

*22.3-12 在乙個有向圖g中,如果u→v蘊含著對所有頂點u、v∈v,至多有一條從u到v的簡單路徑,則稱g是單連通的。給出有效演算法。

《演算法導論》筆記 第22章 總結與思考

a g 的根是g的掛接點,當且僅當在g 中該根頂點至少有兩個子女。b 設v是g 中的某一非根頂點,證明v是g的掛接點當且僅當v有乙個子頂點s,使得不存在從s或s的任何後裔頂點指向v的某個真祖先頂點的反向邊。c 設low v min d v d w d w 對v的後裔u,u,w 是反向邊 試說明對所有...

《演算法導論》筆記 第22章 22 2 廣度優先搜尋

在給定圖g v,e 和乙個特定的源頂點s的情況下,廣度優先搜尋棵發現從s可達的所有頂點,並計算s到這些可達頂點之間的最短邊數。廣度優先樹,根為s,且包括所有s的可達頂點。樹中從s到v的路徑對應於圖g中從s到v的一條最短路徑,即包含最少邊數的路徑。對有向圖無向圖都適用。如果u處於從根s到頂點v的路徑中...

《演算法導論》筆記 第2章

本章出現了全書第乙個演算法 插入排序。插入排序並不是最直觀的排序演算法,拿它做第乙個講解應該有其他的理由。通過插入排序的講解,偽 約定 迴圈不變式 演算法分析等最基礎的知識被帶了出來。此後又講了第二個演算法 合併排序,並引出了演算法設計中的兩種常見型別 增量法 incremental 和分治法 di...