1. 程式人生 > >LeetCode總結 -- 圖篇

LeetCode總結 -- 圖篇

                圖的演算法跟樹一樣是準備面試中必不可少的一塊,不過圖的方法很容易概括,面試中考核的無非就是兩種搜尋演算法:深度優先搜尋和廣度優先搜尋。LeetCode中關於圖的問題有以下幾個:
Clone Graph
Word Ladder
Word Ladder II
Longest Consecutive Sequence
Word Search
Surrounded Regions
先來看看最基礎的Clone Graph,很簡單就是要複製一個圖,常見的兩種搜尋演算法(深度和廣度)都可以用,具體細節就不在這裡解釋了,不熟悉的朋友可以看看相關資料。建議大家還是兩種都要練一練,因為在解決具體問題中這兩種方法還是很常用的。接下來的這些題都是基於圖演算法的應用,
Word Ladder
Word Ladder II是比較典型的,看起來好像是字串操作的題目,實際上這裡得轉換成圖的角度來考慮,因為字符集比較小的緣故(26個小寫字母),也就是說對於一個單詞來說,改變其中一個字元可以有25條邊(除去他自己),所以總共有(25*單詞的長度L)條邊。找到是否有滿足一個單詞轉成另一個單詞就是在這個圖中找到一條路徑。所以我們可以把問題轉換成圖用廣度優先搜尋來解決,找到即可停止。Word Ladder是廣度優先搜尋的應用,而Longest Consecutive Sequence則是深度優先搜尋的應用。題目要求是找出最長的連續整數串,如果把數字看成結點,與它相鄰的整數連有邊,那麼找到最長的連續串就是在這個圖中找最長路徑。因為是最長路徑,這裡用深度優先搜尋是比較適合的。
Word Search
也是一道深度優先搜尋的題目,是把上下左右相鄰的結點看成有邊聯結,然後進行深度搜索就可以了,小細節是這裡從每個點出發字元就可以重用,所以要重置一下訪問結點。Surrounded Regions要用一個圖形學中很常用的填充演算法:Flood fill 演算法,其實本質還是一個深度優先搜尋,跟Word Search一樣是把相鄰的上下左右看成連邊,然後進行搜尋填充。
圖的問題其實本質都是兩種搜尋演算法,難點主要在於對於具體問題如何想到轉換成圖的問題,然後用這兩種搜尋來解決,這也是演算法中的一個分支,面試中也是常客哈。