좋은 Java 그래프 알고리즘 라이브러리? [닫은]
누구나 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에서 발생).
http://neo4j.org/ 는 대부분의 인 메모리 라이브러리보다 많은 그래프 알고리즘과 스케일을 포함하는 그래프 데이터베이스입니다.
대학 프로젝트에서 나는에 의해 yFiles 주변에 장난 삼아 yWorks 하고 꽤 좋은 API를 가지고 있었다 발견했다.
청사진을 확인하십시오 :
Blueprints는 속성 그래프 데이터 모델을위한 인터페이스, 구현, ouplementation 및 테스트 스위트 모음입니다. 블루 프린트는 JDBC와 유사하지만 그래프 데이터베이스 용입니다. TinkerPop 오픈 소스 소프트웨어 스택 내에서 Blueprints는 다음을위한 기본 기술로 사용됩니다.
파이프 : 게으른 데이터 흐름 프레임 워크
Gremlin : 그래프 순회 언어
프레임 : 객체 대 그래프 매퍼
용광로 : 그래프 알고리즘 패키지
렉스 스터 : 그래프 서버
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;
}
프로덕션 준비가되었는지는 모르겠지만 jGABL이 있습니다.
성능이 필요한 경우 Grph를 살펴볼 수 있습니다. 이 도서관은 프랑스 대학교와 CNRS / Inria에서 개발되었습니다.
http://www.i3s.unice.fr/~hogie/grph/
이 프로젝트는 활발하고 사후 지원이 제공됩니다!
Java의 교육용 그래프 알고리즘 구현은 여기에서 찾을 수 있습니다 (Sedgewick 등 교수) : http://algs4.cs.princeton.edu/code/
나는 코스 라 (Sedgewick 교수가 가르치는)에서이 뛰어난 알고리즘 과정에 참석하면서 그들에게 소개되었습니다.
https://www.coursera.org/course/algs4partI
https://www.coursera.org/course/algs4partII
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, 역 추적 미니 문 경로 비용 등의 알고리즘을 제공합니다.
참고 URL : https://stackoverflow.com/questions/51574/good-java-graph-algorithm-library
'IT story' 카테고리의 다른 글
Mercurial에서 기능 분기를 올바르게 닫는 방법은 무엇입니까? (0) | 2020.04.11 |
---|---|
SQL 문을 sargable로 만드는 것은 무엇입니까? (0) | 2020.04.11 |
변수를 소싱하지 않고 bash 스크립트에서 환경으로 변수를 내보낼 수 있습니까? (0) | 2020.04.11 |
Node.js가 단일 스레드 인 이유는 무엇입니까? (0) | 2020.04.11 |
BibTeX를 사용하여 모양별로 인용을 주문하는 방법? (0) | 2020.04.11 |