누구나 Java 알고리즘에 대한 Graph 알고리즘에 대한 경험이 풍부합니다. JGraph를 사용해 보았지만 괜찮 았으며 Google에는 다른 것들이 많이 있습니다. 사람들이 실제로 프로덕션 코드에서 성공적으로 사용하고 있거나 권장하는 것이 있습니까?
명확히하기 위해 그래프 / 차트를 생성하는 라이브러리를 찾고 있지 않습니다. 최소 스패닝 트리, Kruskal 알고리즘 노드, 에지 등 그래프 알고리즘을 돕는 라이브러리를 찾고 있습니다. 이상적으로 좋은 알고리즘 / 데이터가있는 라이브러리 멋진 Java OO API의 구조.
답변
JGraph를 사용 하는 경우 알고리즘을 위해 설계된 JGraphT 를 사용해보십시오 . 그 기능 중 하나는 JGraph 라이브러리를 사용한 시각화입니다. 여전히 개발되었지만 꽤 안정적입니다. 얼마 전에 JGraphT 알고리즘의 복잡성을 분석했습니다. 그중 일부는 가장 빠르지는 않지만 직접 구현하고 그래프를 표시 해야하는 경우 최선의 선택 일 수 있습니다. 그래프 작업을하고 나중에 표시하는 앱을 빠르게 작성해야했을 때 API 사용이 정말 마음에 들었습니다.
답변
요약:
- 데이터 구조와 알고리즘에 더 관심이 있다면 JGraphT .
- JGraph 가 주요 초점이 시각화 인 경우.
- Jung , yWorks 및 BFG 는 사람들이 사용해 본 다른 것들입니다.
- Prefuse 는 대부분을 다시 작성해야하기 때문에 no no입니다.
- 좋은 데이터 구조 만 필요한 경우 Google Guava
- 아파치 커먼즈 그래프 . 현재 휴면 상태이지만 많은 알고리즘에 대한 구현을 제공합니다. Jung, GraphT, Prefuse, jBPT 와 비교 한 구현 된 알고리즘 목록은 https://issues.apache.org/jira/browse/SANDBOX-458 을 참조 하십시오.
답변
매우 간단하고 강력한 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에서 발생).