2009-07-04 34 views
9

我剛剛在「算法導論」一書中閱讀了關於breadth-first search算法的內容,並且我在紙上模擬了算法。我現在想要做的是在代碼中實現它來進行額外的練習。練習圖論算法的有效方法

我正在考慮從頭開始實施所有的數據結構(adjacency list,「顏色」,「距離」和「父」陣列),但我記得當前有圖形庫,如Boost圖庫和Python中的其他一些graph APIs。 我也嘗試在UVASphere Judge Online上尋找一些與BFS相關的問題,但我無法確定哪些問題需要BFS解決方案。

我的問題是什麼是實踐這些圖形算法的最無痛的方式(不只是侷限於BFS,但也會派上用場,當我想要實現DFSDijkstraFloyd-Warshall等)。歡迎有實踐問題的網站。

回答

9

我個人認爲理解這些的最好方法是從零開始實現圖表表達。

一方面,這會告訴你實際的實施警告,你從中學習爲什麼或爲什麼不是一個特定的算法可能是有趣/好/有效/無論。另一方面,我認爲通過自下而上的方法可以更容易地理解圖表及其實際使用情況,包括其含義(遞歸,性能/可伸縮性,應用程序,備選方案等)。

但也許這只是我。以上是非常個人的品味。

1

我發現你的問題很有趣,我google了一下,發現JGraphEd

它並不包括所有的圖算法,但它看起來像一個很好的實驗工具。

1

我同意balpha。真正學習和理解算法的最好方法就是實施。只需選擇一個算法並實現它。當您遇到困難或不確定的地方時,請查看大量現有示例。然後,你就可以將自己的思想與理解他人的思想進行比較,而不是簡單地接受提供的內容。

一旦你已經學會了你想要的東西,鞏固理解的最好方法就是嘗試教給別人或者把它描述給其他人。您可能會有一些人願意傾聽您的意見,或者至少您可以爲剛剛研究過的算法的人寫一篇博客文章。

但是,如果你正在尋找的「無痛」,那麼也許你應該保持明確的算法完全;-)

+0

只是備案,報價應該在「最無痛「 – Steve 2009-07-04 22:18:42

0

This site could help you

在這裏,您對ACM版問題每個問題的描述。你可以看到每個問題的類別,並提示解決它。只需瀏覽圖表相關的問題。好的建議是隻有當你試圖自己解決問題並失敗時才使用這些提示。