普林斯頓的算法課是Cousera上評價挺高的一門課,課程的教學語言用的是java,課程中的算法都會被封裝成類的形式,對於創建各個算法的知識結構來講仍是頗有好處的。java
第一週的內容是Undirected Graph, 圖的存儲形式分爲adjacency matrix(鄰接矩陣)和 adjacency list(鄰接表),前者對於能夠以O(1)的複雜度查找兩個節點是否有邊,後的優點在於面對sparse maxtrix(稀疏矩陣)時能夠存儲不少空間。算法
Depth-first search & Breadth-first searchspa
無向圖的DFS和BFS遍歷已是老生常談了,跟樹的遍歷大同小異,這裏收集一下課程中講到應用場景:遊戲
Fllod Fill圖片
當須要將一個圖片裏面的相同顏色的色塊替換成另一個顏色,當圖片很大的時候,用DFS是最好的選擇。基礎
Kevin Bacon Number遍歷
這是一個線上的小遊戲,用來查看任何一個好萊塢的演員經過做品和Kevin Bacon的距離,數字越大,就表示他和Bacon的距離就越遠,若是他/她直接和Kevin Bacon合做過,則數字爲1。用Breadth-first search比較合適。語言
Connected Componentdi
無向圖的連通份量是在DFS的基礎之上確保每一個節點都訪問到,而且將每次DFS迭代的節點進行標記爲相同的編號。vi