1. 程式人生 > 實用技巧 >6.4.1最小生成樹

6.4.1最小生成樹


‎|•'-'•)و✧( '-ωก̀ )揉眼睛

大家好,本集我們來學習,深度優先搜尋,首先我們先來複習一下,上節課所學習到廣州,先搜尋類似於樹的層次遍歷,假設我們現在有一個初始頂點一那麼我們從該頂點出發一次的圖當中的每一個頂點。當中的一個頂點,那麼我們知道廣州見搜尋是優先訪問離你較近的那些頂點的,這就是廣州先搜尋好廣東人員搜尋與術的層次,遍歷小類似那深度元,搜尋到其實深度人員搜尋有樹的先序遍歷訪問比較相似,我們先來複習一下樹的先序遍歷,首先這是一棵樹,然後我們從中間截點一出發來訪問的節點,然後訪問根結點的一個子樹的根節點也就是0.2,然後依舊訪問0.2的一顆子數的根結點,也就是0.4,然後按照這樣的規則訪問0.7,那麼頂點4的所有的節點已經反問d了,所以我們要反問頂點2的另一顆子數的根基點也就是0.5我們店看上一個圖的話這樣的車其實。點5,然後按照這樣的規則,我們訪問了a數當中的所有頂點,依舊如果把數看成一個圖的話,那麼這樣的順序其實就是這樣一個圖,它的深度優先搜尋的順序,我們在這樣一個類似豎的圖的例子當中發現,是不是廣東一些搜尋和深度優先搜尋與他們的名字非常的符合阿廣播電視,按照圖的寬度的範圍這樣進行擴充套件,零點的深度優先搜尋,這是按照這樣一條路徑的深度的走向去訪問頂點的好,接下來我們要學習一下深度雲搜尋在書中是怎樣描述的,那麼這裡是能源搜尋中的縮寫為dfsd代表的是深度的意思首先第一然後我們要出發任意一個大家注意下這一個符合條件的。深度的意思首先第1步我們要訪問起始的這個頂點v,然後呢,然後我們要從v出發訪問v到任意一個迎接且未被訪問過的迎接0.5I,大家要注意一下,這裡是任意任意一個符合條件的明確定點都可以沒有次序的要求好,接著我們要從wI出發,再訪問滿足條件的一些景點,這裡也是任意的一個臨街前未被訪問的一些頂點蜿蜒,那麼如果咱們還沒有符合這樣的條件的一些景點呢,我們要退回到它的上一層頂點,也就是v,我們是從v到wi的,然後我們只要重複這樣的過程,直到所有頂點被訪問為止,這樣我們就實現了深度有限搜尋df明天。 Fx那麼大家要注意一下,這個也與bfs我們的搜尋一樣,我們也強調了一定是未被訪問過的這些一些景點,那麼也是同樣的要求,我們要為了避免某一個頂點訪問了多次,這樣就不符合圖的便利的定義了,我們一起來看一下這一個的例子,我們從0.1出發,首先呢,我們要訪問起始點點位也就是訪問這個,其實頂點頂點e,然後我們要訪問v的某一個零件,且微微訪問過的敏捷定點,這裡有0.2和0.3,我們訪問哪一個都可以,他幫我們掃了0.2。0.1出發,首先呢,我們要訪問,其實點點位也就是訪問這個70 0.0.1,然後我們要訪問v的某一個臨界點位被訪問過的敏捷頂點,這裡有0.2和0.3,我們訪問哪一個都可以,那麼我們少問0.2,然後我們從0.2出發來訪問點點2的,未被訪問過的,任意的一個。來訪問0.2的,未被訪問過的任意的一個臨界點,這裡我們選取了0.4那麼介紹,我們按照相同步驟訪問了5.5,大家可能會有疑問,這裡為什麼我們要訪問了0.5呢?0.5明明是0.2的連線頂點啊,我們發現其實0.5是不是也是0.4的,0.4的以及頂點啊,這裡我們是通過0.4訪問到5.5了,其實我們發現0.5是不是沒有符合條件的理解頂點了,所以我們返回到了它的上一層頂點,也就是0.4,然後我們就從0.4開始進行訪問訪問頂點4的一個任意一個連線的且未被訪問過的一些經典這裡,我們只剩下了0.7,所以我們要訪問點點選,然後點點71就沒有符合條件的退役到0.40.4也沒有符合條件的頂點了,我們要退回到點點21就退回到0.1有一個符合條件的。條件零點我們退回到0.40.4也沒有符合條件的零點了,我們要退回到0.21就退回到0.1,那麼0.1,有一個符合條件的零點就是0.3這裡0.3沒有被訪問且與一連線,然後0.3我們依舊要訪問它的一個符合條件的理解,零點就是0.6,好,這樣我們就訪問過了所有的頂點,實現了深度與線搜尋好,這就是dfs深度優先搜尋的一個過程,那麼接下來我們就來討論一下如何實現它呢,上一節課實現廣度性搜尋時,我們利用了一個對列,還有一個標記陣列來實現了廣推薦搜尋,因為對列可以實現數的層次便利,那麼這裡呢,這裡的深度優先搜尋,他與樹的先序遍歷比較像,那麼大家聯想一下,其實深度研所他是不是可以用遞迴的形式。等一下其實深度研究所它是不是可以用遞迴的形式來實現啊,那麼這裡因為定規也可以轉化為這樣的形式,我們可以將先去便利轉化為這樣的形式,所以深度研究所一定也可以利用利用站來實現,那麼除了地位或者是這樣我們還缺了一個輔助的標記陣列,這個與廣播員搜尋是一樣的,那麼我們有這兩種資料結構就可以實現df的一個演算法了,接下來我們學習一下深度雲搜尋是如何用程式碼來實現它的,那麼這就是一個深度,原先搜尋dfs程式碼,這給我們採用的是遞迴的形式,我們來看一下這個程式碼,首先還是與廣東那些搜尋一樣,需要申請一個輔助的這個標籤陣列vc推導,然後你就有兩個函式還說作用於變色一樣的還是來看下第一個三。一樣的,那麼我們首先還是來看一下第2個函式dfs這個函式依舊它的引數表有兩個引數,第1個引數為訪問的這個圖,第2個引數是我們其實頂點的這一個編號,我們用一個整形變數來表示,接下來首先我們要訪問這個頂點,然後將它的標記陣列的值值為x表示他已經反問過了,然後依舊是這樣一個迴圈,大家看著是不是非常的眼熟啊,這與bfs的迴圈是一樣的,我們也將一個變數複製為第1個敏捷的頂點,然後迴圈的過程也就是迴圈每一個臨界的頂點,依舊用next number這樣一個函式來求下一個連線定點,然後迴圈體的內容則是如果概念界定點未被反駁的話,滿足這樣的條件,我們則要對它呼叫一遍diss,也就是這樣一個遞迴的過程是因為他。那所以要對它呼叫一遍,dfs也就是這樣一個遞迴的過程,那麼為什麼我們可以採用遞迴形式的程式碼來實現它呢?那麼這裡是因為dfs它的搜尋過程是不是語數的先驅便利比較像,所以數的像距變低,我們可以採用遞迴形成程式碼,那麼dfs也是可以採用遞迴形式程式碼的,它的實現原理其實是一樣的好,接下來我們只需要遞迴的呼叫這樣一個dnf,然後這個因為涉及到了遞迴,我們還是來看一個小例子,可能遞迴的形式程式碼大家還是不太熟悉好,我們來看一下,這裡頭有相同的例子,那麼我們依舊從頂點a出發,所以我們就要用這個函式時傳遞的引數是這一個有象圖以及頂點a的編號v,然後我們訪問頂點a,並把頂點a對應到直輔助下標的直至尾處表示,他已經被訪問過了通過這樣。訪問首先我們找到第一。的一個路徑可以到達頂點b啊,所以頂點b沒有被訪問到,那麼這時候我們就需要第1個函數了,這個與變法s是相同的,我們來看一下這樣一個函式當中有什麼樣的內容,首先第1個迴圈與afs一樣,還是為這個陣列初始化,也就是將每一個神初始化為false,然後是第二迴圈,依舊是迴圈的,對每一個頂點,每一個未被防破的頂點,最後一遍dfs函式我們來看一下,在這個偶像圖當中,這樣一個函式它是怎麼樣呼叫的,怎樣迴圈的,首先我們一定是從第1個定點假設,第1個定點是定點a,我們按照abcd的順序這樣來排號,那麼我們首先呼叫了頂點a的dfs實行了我們剛剛敘述的那一個過程,隨著頂點a的dfs結束之後,我們是不是迴圈到下一個頂點啊,也就是頂點b,那麼因為頂點b,我們通過這樣的條件判斷,發現他也沒有被訪問過對他進行調研。轉化到下一個頂點啊,也就是頂點b,那麼因為頂點b,我們通過這樣的條件判斷,發現它也沒有被訪問過,所以我們對它進行呼叫df s的操作這裡傳入到引數編號是零點d的編號,這時候我們就對點點b實行深度有限搜尋也就是df,然後依舊是這樣一個迴圈,在迴圈的時候發現頂點b有a和c兩個點寫頂點,但是這兩個連線頂點在呼叫a的點face時,是不是都已經被訪問過了,所以正因為我們不對它進行重訪問,因為有這樣一個條件判斷語句好,這樣我們就結束了零點b的點,fx接著我們依舊來看第1個函式的,這樣一個迴圈迴圈到了頂點,b之後我們來迴圈到了下一個頂點,也就是頂點c是不是已經沒有。呀,反思到序列這裡,我們需要注意的一點是dfs或者是變反四在連線矩陣法下的序列是唯一的,而那些療法下的修煉是不為一道為什麼呢?其實與他們的過錯方法是有很大關係的臨界區,這樣我們是按照頂點編號第1次的訪問,下一個臨界點點到,而Excel表法則是便利套道邊表,那麼在臨界表法當中,根據我們生成邊表就是輸入邊的次序不同,它的邊表也會產生不同,所以這臨時表法是不為一道而根據這些法則是唯一的好,這就是一個小知識點,接下來我們來分析一下df的演算法效能,首先還是來看它的空間複雜度,它的空間複雜度與bfs相同第9位大OA這裡v的絕對值代表的是節點的數量,它是以節點數量一個數量級還是採用我們都需要。演算法實現,無論採用遞迴的形式還是採用這樣的形式,我們都需要這樣一個工作站的維護,那麼在最壞的情況下,也就是該圖類似於一個線性結構跟的節點,排上了一個類似於線性結構的這樣一個圖,我們從某一個景點出發,訪問每一個零點時則需要一個節點數量大小的工作站,所以這裡的空間複雜度與節點的數量是一個數量級的好,接下來我們來看時間複雜度,那麼時間複雜度,我們依舊分為零件標法和理解矩陣法,首先我們來看總結矩陣法,一些確認反彈的時間複雜度依舊為達5為方,那麼它與變反色原理其實是類似的,在電反應詞當中,我們要訪問每一個定點並且訪問每個定點時我們要有一個for迴圈我們要找到他所有的方法就是所以都需要這樣方法。那就好啊,所以到所有的頂點都需要這樣的方法去找到明星經典時,那麼它的時間複雜度則為達到濰坊,這就是匯入濰坊的本來方法,那麼離線標法也是與bfs是一樣的,它是刀v加e就是零點的數量級加上e的數量級,那麼它的方法和原理也與bfs是一樣的,1就是我們要訪問所有的定點,也要通過邊訪問所有的連線頂點,所以是w5b加e好,這就是dfs的演算法效能,接下來我們學習深度優先生成數,那麼它與廣播線上上述其實是類似的,也就是說在深度奠定的過程當中,我們可以得到這樣一顆生長的樹或者是生成的森林,稱為深度有限生成樹,或者是生成森林,我們來看一個剛剛我們舉的那一個例子,這是一個有相同的例子,我們依舊對它從0點a開始,深度優先便利。大家看,因為我們是從頂點a出發的,然後我們訪問了頂點c,那麼我們就從頂點c出發,訪問了他的一個臨界點點的點d點點d沒有任何的一些經典,所以我們訪問了點點c的下一個的一些經典的免疫,這樣我們就生成了第1個這樣一個有效圖,接著我們用迴圈的從頂點b開始進行訪問,然後訪問了定點b,這樣我們就得到了第2個有效圖,那麼這兩個圖組合在一起就是該有向圖的生成,森林那麼深度就先生成數與廣東線上的數是一樣的,也是當我們採用一些軍事法師,它是唯一的採用一些表法是它是不唯一的原理,與國外搜尋也是一樣的,因為那些表法我們在生成它的邊表時,根據輸入順序的不同,他身上編表也會不同。那邊表示根據輸入順序的不同,它生成的編表也會不同,和最後面討論一個問題,就是便利與聯通性的問題,如何通過便利來判斷該圖的聯動性,我們來看這樣一個五象圖的例子,我們依舊從0.1出發,無論是略帶t型變反4還是d反c,我們都可以訪問到該圖當中的所有的頂點,因為每個頂點時間都是聯通的,這是一個聯通圖,所以我們有這樣的結論,在無專案當中在任意節點出發進行一次病例,也就是說我們呼叫了一次bfs函式或者是dfs函式姐姐是一個四十每個頂點我們都需要一個頂點。對每一個定點進行呼叫一次bfs或者是dfF4,那麼通過這樣的方法我們就有下一個結論,就是在五象圖當中呼叫變電函式,也就是bfs或者是df函式函式的次數,則為聯通分量的個數,我們來看這一個5象圖,我們對頂點一呼叫了一遍dnf或者是bfs函式,那麼點點e可以訪問它下面到1~7這些景點,接著我們通過放射管那麼1~7這些頂點,因為它已經被標記為已被否定過了,所以它們不再呼叫b反c或者是d反c了,我們直到0.8,那麼0.8和0.9此時還是沒有被標記為已被訪問的,所以我們迴圈到0.8時,只會對它呼叫bfs或者是電反4,那麼它是不是把0.8和0.9然後一到七。然後1~7是不是為一組啊,這樣我們就得到了兩條點的分量,所以我們說呼叫的次數被連通分量的個數好,這就是第2個結論,好可能同學們會發現,剛剛的那兩個結論都是在5象圖當中,它的前提條件一定都是5象圖,那麼在有專案當中會有類似的結論嗎?我們來看一下,這是一個比上圖的例子,我們從初始零點b出發開始進行,深度有限搜尋,是不是可以仿照它所有的頂點啊,得到這樣一個生成數,但是可以訪問到所有的零件代表著它是一個牆面通道圖嗎,但是不是的,這個例子是不是不是一個財通的圖啊?也就是說可以訪問到所有零點,只是代表該頂點到剩下的其他的頂點有這樣一條有效的路徑,而並不能代表它的源頭是一個牆面上的毒所以這是第一個結論。來看第2個結論,那麼這裡我們從頂點a為初始零點開始進行深度優先搜尋,那麼在第1個函式的負號迴圈當中,是不是也呼叫了兩次dfs啊?第1次是針對於頂點a來講的,第2次呼叫是輸的是0點d的編號,那麼這兩次可以代表著該有象圖的強硬方向的個數吧,答案是不是?不是的,是不是與該有相同的前面的分項個數完全的沒有關係啊,所以第2個結論其實也是不成立的,所以在有效的當中無論是bfs還是dfs都沒有上述在5項圖當中的這兩個結論,其實非常好理解,在無效當中我從某一個頂點出發到達另一個頂點,是不是反過來也可以從另一個頂點到達該初始頂點啊?但是在有專案當中是不是就沒有這樣的特點了嚇到出發所以也就是沒有。路徑,所以也就是沒有類似結論的原因好到本級,特別是我們學完了所有有關圖的基礎知識,接下來我們就來總結一下我學習了哪些重要的幾個概念,首先我們來看圖的邏輯節課,我們學習了圖的定義,在途的電影當中,我們強調圖的頂點集已經是一個非空到有限集這裡的飛控則表示圖當中一定是有頂點的,而邊境是可以飛空的,也就是說圖當中是可以沒有邊的好,這就是圖的定義,接下來我們講解了圖的相關性的概念,這又列舉了幾個比較重要的,首先我們講解了5相同和有相同,那麼在接下來學習當中大家發現每一個點其實我們都有分5項圖和有效圖來進行討論好,然後我們學習了完全圖,大家要記著完全圖n個節點的邊的數量是多少,這個小考點然後學習了什麼事比較特殊的就是或者是尿。這裡強調的分量是針對於有鄉土來講的,而聯通分量是針對於五象圖來講的,這一塊的基本概念大家都特別清楚,然後我們學習了一種特殊的圖叫做網,也就是每條邊都帶有一定的權重的好學習,完了邏輯結構,我們學習了圖的層數結構以及它的相關操作,首先我們學習了兩種最基本的儲存結構就是連線矩陣,它是採用了順序儲存,然後水平接表,它採用的則是資料儲存,加上面是儲存,這個是執行數,存放的是頂點級,而液態儲存存放的是編輯好,接下來我們學習了識字念表和筆記,讀書表只有兩種特殊的也是儲存結構造識字列表針對的是有效圖而連線多種表,針對的是存放五象圖有深度類似啊但是他名字一樣是從出發,然後最後我們相信了圖的便利,有深度一些便利,第二反應是它類似啊樹的心緒便利它與它的名字一樣,是從初始點點出發按深的方向。電力有深度一些便利dfs它類似啊數的心緒便利,它與它的名字一樣,是從初始點點出發,按深的方向進行一次的訪問節點的,而第2個病例是廣東立便返色,他也說的層次遍歷比較相似,那麼他的病歷方向則是按照圖的寬度的這個方向進行遍歷的進行訪問,所有定點的在廣度性病例當中我們利用了廣度性的病例bI反思到演算法思想,實現了單元最短路徑這一問題的解決方法,好無論是廣東一些病例還是深度性病例,他們提供的都是我們一個解決問題的一個思想,我們可以運用它來解決實際問題,然後這就是本節課的全部內容。