我继续说:实施的 https://github.com/pathikrit/scalgos/blob/master/src/main/scala/com/github/pathikrit/scalgos/Graph.scala#L139 the Tarjan 的 SCC 算法的教科书版本 http://en.algoritmy.net/article/44220/Tarjans-algorithm在斯卡拉。然而,我不喜欢这个代码——它是非常命令式/程序性的,有很多变异状态和簿记索引。该算法是否有更“功能”的版本?我相信命令式版本的算法隐藏了算法背后的核心思想,与函数式版本不同。我发现其他人遇到同样的问题 http://clj-me.cgrand.net/2013/03/18/tarjans-strongly-connected-components-algorithm/使用这个特定的算法,但我无法将他的 Clojure 代码翻译成 idomatic Scala。
注意:如果有人想尝试,我有一个很好的设置,可以生成随机图并测试您的 SCC 算法与运行 Floyd-Warshall 的情况 https://github.com/pathikrit/scalgos/blob/master/src/test/scala/com/github/pathikrit/scalgos/GraphSpec.scala#L82
See Haskell 中的惰性深度优先搜索和线性图算法 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.45.3876作者:大卫·金和约翰·朗伯里。它以函数式风格描述了许多图算法,包括 SCC。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)