답변:
JGraph를 사용 하는 경우 알고리즘을 위해 설계된 JGraphT 를 사용해보십시오 . 그 기능 중 하나는 JGraph 라이브러리를 사용한 시각화입니다. 여전히 개발되었지만 꽤 안정적입니다. 얼마 전에 JGraphT 알고리즘의 복잡성을 분석했습니다. 그중 일부는 가장 빠르지는 않지만 직접 구현하고 그래프를 표시 해야하는 경우 최선의 선택 일 수 있습니다. 그래프 작업을하고 나중에 표시하는 앱을 빠르게 작성해야했을 때 API 사용이 정말 마음에 들었습니다.
요약:
매우 간단하고 강력한 Java 그래프 라이브러리에 대해서는 JGraphT 를 확인하십시오. 혼돈을 완화하기 위해 JGraph와는 다릅니다 . 일부 샘플 코드 :
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);
정은 시각화를위한 좋은 옵션이며, 임의의 그래프 생성, 재배 선 등을위한 여러 가지 메커니즘을 포함하여 상당히 유용한 가용 그래프 알고리즘 세트를 가지고 있습니다. 또한 필요한 경우 일반적으로 확장 및 조정이 상당히 쉽다는 것을 알게되었습니다. .
Apache Commons는 commons-graph를 제공합니다 . 아래 http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ 하나의 소스를 검사 할 수 있습니다. 샘플 API 사용법도 SVN 에 있습니다. Jung, GraphT, Prefuse, jBPT 와 비교 한 구현 된 알고리즘 목록은 https://issues.apache.org/jira/browse/SANDBOX-458 을 참조 하십시오.
좋은 데이터 구조 만 필요한 경우 Google Guava
JGraphT 는 많은 알고리즘을 구현하고 좋은 의견을 제시 하는 그래프 라이브러리입니다. Helloworld 예제 . 라이센스 : LGPL + EPL.
JUNG2 는 JGraphT 와 유사한 데이터 구조를 가진 BSD 라이센스 라이브러리입니다. JGraphT에서 현재 누락 된 레이아웃 알고리즘을 제공합니다. 가장 최근은 2010 년부터 커밋 및 패키지 hep.aida.*
합니다 (통해 LGPL입니다 콜트 라이브러리 , JUNG을 가져옵니다 ). 이는 ASF 및 ESF의 우산 아래 프로젝트에서 JUNG이 사용되는 것을 방지합니다. 어쩌면 github 포크를 사용하여 해당 종속성을 제거 해야 할 수도 있습니다 . 커밋 f4ca0cd 는 마지막 CVS 커밋을 미러링합니다. 현재 커밋은 시각화 기능을 제거하는 것으로 보입니다. 커밋 d0fb491c 는 a를 추가합니다 .gitignore
.
Prefuse 는 행렬 구조를 사용하여 그래프를 저장하므로 희소 그래프에는 메모리가 효율적이지 않습니다. 라이센스 : BSD
Eclipse Zest 는 SWT와 독립적으로 사용할 수있는 그래프 레이아웃 알고리즘을 내장했습니다. org.eclipse.zest.layouts.algorithms를 참조하십시오 . 사용되는 그래프 구조는 Eclipse Draw2d 중 하나입니다 . 여기서 노드는 명시 적 객체 이며 Generics를 통해 주입되지 않습니다 (Apache Commons Graph, JGraphT 및 JUNG2에서 발생).
http://neo4j.org/ 는 대부분의 인 메모리 라이브러리보다 많은 그래프 알고리즘과 스케일을 포함하는 그래프 데이터베이스입니다.
http://incubator.apache.org/hama/ 는 대규모 매트릭스 및 그래프 데이터를위한 Hadoop의 분산 과학 패키지입니다.
당신이 그래프 알고리즘에 있다면 JDSL (데이터 구조 자바 라이브러리) 좋은 충분해야한다 - http://www.cs.brown.edu/cgc/jdsl/
시각화를 위해 우리 그룹은 prefuse로 약간의 성공을 거두었습니다 . 우리는 건축 바닥 판과 버블 다이어그램을 처리하도록 확장했으며 너무 불평하지 않았습니다. 매우 유사한 API를 사용하는 Flare라는 새로운 Flex 툴킷이 있습니다.
업데이트 : 의견에 동의해야합니다. 우리는 많은 사용자 정의 기능을 작성하고 prefuse 제한을 해결하기 위해 노력했습니다. 우리는 prefuse를 사용하여 첫날부터 진전을 보여줄 수 있었지만 처음부터 시작하는 것이 더 나았을 것이라고 말할 수는 없습니다. 반면에 우리가 동일한 것들을 두 번째로 구현하고 있다면 요구 사항을 훨씬 잘 이해하기 때문에 혼란을 건너 뛸 수 있습니다.
Annas의 오픈 소스 그래프 패키지를 사용해보십시오.
그래프는 다음과 같이 간단하게 표현 될 수 있다고 확신하는 것이 좋습니다.
class Node {
int value;
List<Node> adj;
}
흥미로운 알고리즘을 대부분 구현하십시오. 그래프에 대한 연습 / 학습 세션 중간에이 질문에 해당되는 경우, 이것이 가장 좋은 라이브러리입니다. ;)
가장 일반적인 알고리즘에 인접 행렬을 선호 할 수도 있습니다.
class SparseGraph {
int[] nodeValues;
List<Integer>[] edges;
}
또는 일부 작업에 대한 행렬 :
class DenseGraph {
int[] nodeValues;
int[][] edges;
}
성능이 필요한 경우 Grph를 살펴볼 수 있습니다. 이 도서관은 프랑스 대학교와 CNRS / Inria에서 개발되었습니다.
http://www.i3s.unice.fr/~hogie/grph/
이 프로젝트는 활발하고 사후 지원이 제공됩니다!
자바의 교육용 그래프 알고리즘 구현은 여기에서 찾을 수 있습니다 (Sedgewick 등 교수) : http://algs4.cs.princeton.edu/code/
나는 코스 라 (Sedgewick 교수가 가르치는)에서이 뛰어난 알고리즘 과정에 참석하면서 그들에게 소개되었습니다.
Node / Edge Graph 라이브러리가 아닌 Charting 라이브러리를 실제로 찾고 있다면 Big Faceless Graph 라이브러리 ( BFG )를 splurging하는 것이 좋습니다 . JFreeChart보다 사용하기가 쉽고, 멋지게 보이고, 더 빠르게 실행되며, 더 많은 출력 옵션이 있으며 실제로 비교할 필요가 없습니다.
http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html의 JGraph
그래프 작업을위한 강력한 소프트웨어를 제공합니다 (직접 또는 간접). Graphivz 코드도 생성하여 그래픽 표현을 볼 수 있습니다. 백 트래킹 코드와 같이 자체 코드 알고리즘을 pakage에 넣을 수 있습니다. 이 패키지는 Dijkstra, 역 추적 미니 문 경로 비용 등의 알고리즘을 제공합니다.