2012-03-27 86 views
4

我想效率,如果效率(= 0.9 *速度+ 0.1 *其他)很高,我愿意自己编写代码。如果我在LEDA图或Boost图之间进行选择,我应该选择哪一个?LEDA图形v/s提升图形库

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

回答

5

升压通常是一个很好的库,但我不会建议加速图形的一些原因。

BGL文档是可执行的,不容易遵循用户指南。我发现试图定义具有与我自己的问题相关的属性的图很困难。

您经常会遇到巨大的编译器错误,这些错误会在模板中的模板内显示模板...几乎不可能看到发生了什么。

我发现的唯一解决方案就是从一个随Boost Graph提供的简单例子开始,并对其进行调整,直到它达到我想要的水平。

我知道很多聪明而有能力的人因为这些原因而放弃了升压图。因为在它下面有非常高效的算法,所以很难过。对我而言,BGL是模板过度使用的教科书示例。 Boost Graph是一个很好的想法,它完全忽略了这一点:如果代码无法被读取,维护,扩展或调试,代码就毫无价值。

有LEDA/Boost实施的替代方案。 你可以做不如来调查这个发音相似的帖子: https://stackoverflow.com/questions/510758/can-you-suggest-a-good-book-on-graphs-and-graph-algorithms(链接不再有效)

3

升压不断重构,所以它的部分得到搬进标准,之后,供应商的不断优化它为他们所支持的目标系统。在罕见的使用情况下,使用继承,开发人员可能会调整某些部分的特定情况。

如果工作仅限于C++,那么由于Boost的各个部分旨在集成到标准中,所以它具有这些优点。可能有专门的理由使用专有的LEDA,例如通过测试保证无差错,然后作为决策者只有你必须遵守这些标准。

+0

+1。没有人提到过这一点 - Boost作为一个非常活跃的项目继续得到改进,并成为未来标准组件的舞台。 – 2013-07-14 16:12:36