我想要效率,如果效率(= 0.9 *速度+0.1 *其他)很高,我愿意自己编写代码。如果我要在LEDA图形或Boost图形之间进行选择,我应该选择哪一个?
我的算法非常耗时(有些甚至是非多项式的),它们适用于大型图形。
答案 0 :(得分:5)
Boost通常是一个很好的库,但出于多种原因我不建议使用Boost图。
BGL文档是可执行的,没有易于遵循的用户指南。我发现尝试定义具有与我自己的问题相关的属性的图表是非常困难的。
你经常会遇到巨大的编译器错误,这些错误会在模板中的模板中显示模板......几乎不可能看到发生了什么。
我找到的唯一解决方案是从Boost Graph附带的一个简单示例开始,并对其进行调整,直到它达到我想要的效果。
由于这些原因,我知道有很多聪明能干的人放弃了Boost Graph。很遗憾因为它下面有非常有效的算法。对我来说,BGL是模板过度使用的教科书示例。 Boost Graph是一个很好的想法,完全忽略了这一点:如果无法读取,维护,扩展或调试代码,那么代码就毫无价值。
LEDA / Boost实施还有其他选择。 你可能会比调查这个听起来类似的帖子更糟糕:
https://stackoverflow.com/questions/510758/can-you-suggest-a-good-book-on-graphs-and-graph-algorithms (链接不再有效)
答案 1 :(得分:3)
Boost会不断重构,因此部分内容会进入标准,之后供应商会继续针对他们支持的目标系统进行优化。在罕见的使用场景中,使用继承,开发人员可能会针对特定情况调整某些部分。
如果工作仅限于C ++,那么由于Boost的部分目标是集成到标准中,它确实具有这些优势。可能有特定原因使用专有LEDA,例如通过测试保证无错误,然后作为决策者,只有您必须遵守这些标准。
答案 2 :(得分:2)
可以使用Boost图算法来处理LEDA甚至是stanford图基本图,但不是相反。 http://www.boost.org/doc/libs/1_46_1/libs/graph/doc/leda_conversion.html
我建议使用boost图,它是最先进的。
麦克