2012-03-27 36 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