2008-09-09 280 views
240

有沒有人對Graph算法的任何Java庫有很好的經驗。我試過JGraph,發現它沒問題,而且google中有很多不同的東西。有沒有人實際使用生產代碼或推薦?爲了澄清,我不是在尋找一個產生圖形/圖表的圖書館,我正在尋找一個可以幫助圖表算法的圖表,例如最小生成樹,克魯斯卡爾算法節點,邊緣等。理想情況下,良好的Java OO API中的算法/數據結構。好的Java圖算法庫?

回答

98

如果您使用JGraph,你應該給一個嘗試JGraphT這是專爲算法。它的一個特點是使用JGraph庫進行可視化。它還在開發中,但非常穩定。我前段時間分析了JGraphT算法的複雜性。其中一些並不是最快的,但如果你要自己實現它們並需要顯示你的圖表,那麼它可能是最好的選擇。我非常喜歡使用它的API,當時我很快就要編寫一個在圖形上工作並在稍後顯示的應用程序。

+0

JGraph現在有一個分析包,包括一系列分析功能,http://jgraph.github.com/mxgraph/java/docs/index.html。 – David 2013-03-25 20:56:19

5

爲了可視化,我們的小組在prefuse上取得了一些成功。我們擴展它來處理建築地板和氣泡圖,並沒有太多抱怨。他們有一個新的Flex工具包,名爲Flare,它使用了非常相似的API。

更新: 我不得不同意評論,我們最終寫了很多定製功能/解決prefuse限制。我不能說從頭開始會更好,因爲我們能夠通過使用prefuse從第1天展示進步。另一方面,如果我們再次執行相同的任務,則可能會跳過prefuse,因爲我們會更好地理解需求。

+0

你對prefuse有什麼個人想法?在我上一份工作中,一個項目開始使用它,但最終以90%以上的版本重新編寫(並優化了,並增加了新功能)prefuse。 – 2008-09-09 11:33:22

10

在一個大學項目中,我玩弄了yFiles yWorks,發現它有非常好的API。

+0

我已經使用yFiles進行數據項目之間相互依賴關係的可視化(作爲商業軟件平臺的一部分)。我沒有真正使用任何圖分析算法,但檢查y.algo包是否具有您需要的: http://www.yworks.com/products/yfiles/doc/api/ – Jonik 2009-02-01 19:35:03

+1

yFiles不是開源的,但提供商業許可證 – koppor 2013-05-22 18:47:04

0

如果你真的在尋找圖表庫,而不是爲節點/邊緣圖庫,我會建議在Big Faceless Graph庫(BFG)上揮霍。它比JFreeChart更容易使用,看起來更好,運行速度更快,有更多的輸出選項,真的沒有比較。

+0

您誤解了這個問題:它是關於具有節點和邊緣的那種圖形,而不是那種有餡餅和條形的圖形。 – amarillion 2011-10-20 10:55:19

36

JUNG是一個很好的可視化選項,也有一套相當不錯的可用圖形算法,包括隨機圖形創建,重新佈線等幾種不同的機制。我也發現它通常很容易擴展並在必要時進行調整。

+0

包hep.aida。*是LGPL(http://acs.lbl.gov/software/colt/license.html)。這是通過馬駒(http://jung.sourceforge.net/download.html)導入的。這可以防止JUNG被用於ASF和ESF的項目中。 也許應該使用github fork https:// github。com/rortian/jung2並刪除該依賴項。 https://github.com/rortian/jung2/commit/f4ca0cdcd3312589cbb48de7350b84cbff6067b9是鏡像最後的CVS提交。目前的提交似乎刪除了可視化功能。 – koppor 2013-05-26 11:58:24

+0

自2010年以來沒有發佈,我認爲這個項目被放棄 – Yacino 2017-05-12 08:35:37

4

我不知道是否可以稱之爲生產就緒,但有jGABL

38

退房JGraphT的,這是非常出色和,以消除任何混淆一個非常簡單而強大的Java圖形庫,比JGraph不同。有些sample code

UndirectedGraph<String, DefaultEdge> g = 
     new SimpleGraph<String, DefaultEdge>(DefaultEdge.class); 

    String v1 = "v1"; 
    String v2 = "v2"; 
    String v3 = "v3"; 
    String v4 = "v4"; 

    // add the vertices 
    g.addVertex(v1); 
    g.addVertex(v2); 
    g.addVertex(v3); 
    g.addVertex(v4); 

    // add edges to create a circuit 
    g.addEdge(v1, v2); 
    g.addEdge(v2, v3); 
    g.addEdge(v3, v4); 
    g.addEdge(v4, v1); 
+0

這是一個偉大的演示在這裏https://github.com/jgrapht/jgrapht/wiki/DirectedGraphDemo – 2016-02-17 23:54:38

7

JDSL(數據結構庫中的Java)應該是足夠好,如果你到圖形算法 - http://www.cs.brown.edu/cgc/jdsl/

+0

謝謝你,我從來沒有遇到它。你在使用它嗎? – 2009-02-24 09:31:13

45

摘要:

11

http://neo4j.org/是一個圖形數據庫,它包含許多圖形算法,並且比大多數內存庫更好地擴展。

-2

http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html

JGraph提供一個功能強大的軟件與圖形(直接或undirect)工作。還生成Graphivz代碼,您可以看到圖形表示。您可以將自己的代碼算法放入pakage中,例如:回溯代碼。該包提供了一些算法:Dijkstra,backtracking minimun路徑成本等。

10

Apache Commons offers commons-graph。在http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/之下,可以檢查來源。示例API使用也是in the SVN。如果您只需要良好的數據結構,請參閱https://issues.apache.org/jira/browse/SANDBOX-458以獲取已實現算法的列表,並與Jung,GraphT,Prefuse進行比較,jBPT

Google Guava

JGraphT是一個圖表庫,其中實現了很多算法,並且具有(在我的思想中)一個好的圖模型。 Helloworld Example。許可證:LGPL + EPL。

JUNG2也是BSD許可的庫,其數據結構類似於JGraphT。它提供了佈局算法,目前在JGraphT中缺少。最近的提交是從2010年開始的,包hep.aida.*是LGPL(通過colt library,其中is imported by JUNG)。這可以防止JUNG被用於ASF和ESF的項目中。也許應該使用github fork並刪除該依賴關係。 Commit f4ca0cd正在鏡像最後一次CVS提交。目前的提交似乎刪除了可視化功能。 Commit d0fb491c增加了一個.gitignore

Prefuse使用矩陣結構存儲圖,該矩陣結構對於稀疏圖不是有效的存儲器。許可證:BSD

Eclipse Zest內置了圖形佈局算法,可以獨立於SWT使用。見org.eclipse.zest.layouts.algorithms。所使用的圖形結構是Eclipse Draw2d之一,其中Nodes are explicit objects並非通過泛型注入(如在Apache Commons Graph,JGraphT和JUNG2中發生的那樣)。

4

這也是很好的確信,一個圖可表示爲:

class Node { 
    int value; 
    List<Node> adj; 
} 

並實現大多數您自己感興趣的算法。如果你在圖表的某個練習/學習環節的中間出現這個問題,這是最好的考慮。 ;)

你也可以喜歡鄰接矩陣爲最常見的算法:

class SparseGraph { 
    int[] nodeValues; 
    List<Integer>[] edges;  
} 

或矩陣的一些操作:

class DenseGraph { 
    int[] nodeValues; 
    int[][] edges;  
} 
9

退房Blueprints

藍圖是一家集用於屬性圖數據模型的接口,實現,耦合和測試套件。藍圖類似於JDBC,但對於圖形數據庫。內的TinkerPop有關開源軟件棧,藍圖作爲基礎技術爲:

Pipes:懶惰,數據流框架

Gremlin:一個圖的遍歷語言

Frames:一個對象到圖形映射器

Furnace:圖形算法包

Rexster:圖形服務器