4

我想要效率,如果效率(=0.9*speed + 0.1*others)高,我愿意自己写代码。如果我要在 LEDA 图或 Boost 图之间进行选择,我应该选择哪一个?

我的算法很耗时(有些甚至是时间上的非多项式),适用于大图。

4

3 回答 3

6

Boost 通常是一个很好的库,但出于多种原因,我不建议使用 Boost graph。

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(链接不再有效)

于 2012-07-07T16:36:04.057 回答
3

Boost 不断被重构,因此它的一部分被转移到标准中,之后供应商继续针对他们支持的目标系统对其进行优化。在罕见的使用场景中,使用继承,开发人员可能会针对特定情况调整某些部分。

如果工作仅限于 C++,那么由于 Boost 的部分目标是集成到标准中,它确实具有这些优势。使用专有 LEDA 可能有特定的原因,例如通过测试保证无错误,那么作为决策者,只有您必须遵守这些标准。

于 2013-07-14T15:54:20.353 回答
2

Boost graph 算法可以在 LEDA 甚至 stanford graph base graphs 上工作,但反过来不行。 http://www.boost.org/doc/libs/1_46_1/libs/graph/doc/leda_conversion.html

我建议使用升压图,它是最先进的。

麦克风

于 2012-04-14T09:22:39.260 回答