2009-07-04 51 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版问题每个问题的描述。你可以看到每个问题的类别,并提示解决它。只需浏览图表相关的问题。好的建议是只有当你试图自己解决问题并失败时才使用这些提示。