Bonne bibliothèque d'algorithmes de graphe Java? [fermé]


Fermé.Cette question ne répond pas aux directives Stack Overflow. Il n'accepte pas actuellement de réponses.

Vous voulez améliorer cette question? Mettre à jour le question donc c'est sur le sujet pour le débordement de pile.

Fermé il y a 6 ans.

Les réponses à cette question sont un effort communautaire. Modifiez les réponses existantes pour améliorer ce post. Il n'accepte pas actuellement de nouvelles réponses ou interactions.

Quelqu'un a-t-il eu de bonnes expériences avec des bibliothèques Java pour les algorithmes de graphe. J'ai essayé JGraph et je l'ai trouvé ok, et il y en a beaucoup de différents dans Google. Y en a-t-il que les gens utilisent réellement avec succès dans le code de production ou recommanderaient?

Pour clarifier, je ne cherche pas une bibliothèque qui produit des graphiques/graphiques, je cherche une bibliothèque qui aide avec les algorithmes de graphe, par exemple la portée minimale arbre, Nœuds de l'algorithme de Kruskal, Bords, etc. Idéalement un avec de bons algorithmes / structures de données dans une belle API Java OO.

Author: Nick Fortescue , 2008-09-09

18 answers

Si vous utilisiez JGraph, vous devriez essayer JGraphT qui est conçu pour les algorithmes. L'une de ses fonctionnalités est la visualisation à l'aide de la bibliothèque JGraph. Il est encore développé, mais assez stable. J'ai analysé la complexité des algorithmes JGraphT il y a quelque temps. Certains d'entre eux ne sont pas les plus rapides, mais si vous allez les implémenter vous-même et que vous devez afficher votre graphique, alors ce pourrait être le meilleur choix. J'ai vraiment aimé utiliser son API, quand j'ai rapidement dû écrire une application cela fonctionnait sur le graphique et l'affichait plus tard.

 110
Author: bibix, 2015-05-03 01:41:31

Résumé:

  • JGraphT si vous êtes plus intéressé par les structures de données et les algorithmes.
  • JGraph si votre objectif principal est la visualisation.
  • Jung, yWorks, et BFG sont autres choses que les gens ont essayé de l'utiliser.
  • Prefuse est un non non car il faut réécrire la plupart de celui-ci.
  • Google Goyava si vous avez besoin de bonnes structures de données seulement.
  • Graphe Apache Commons . Actuellement en sommeil, mais fournit des implémentations pour de nombreux algorithmes. Voir https://issues.apache.org/jira/browse/SANDBOX-458 pour une liste d'algorithmes implémentés, également comparée à Jung, GraphT, Prefuse, jBPT
 65
Author: mansu, 2017-07-26 06:07:47

Consultez JGraphT pour une bibliothèque de graphiques Java très simple et puissante qui est assez bien faite et, pour dissiper toute confusion, est différent de JGraph . Certains exemple de 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);
 41
Author: Joe Liversedge, 2015-02-28 20:20:42

JUNG est une bonne option pour la visualisation, et dispose également d'un assez bon ensemble d'algorithmes de graphes disponibles, y compris plusieurs mécanismes différents pour la création aléatoire de graphes, le recâblage, etc. J'ai également trouvé qu'il était généralement assez facile de l'étendre et de l'adapter si nécessaire.

 37
Author: Kai, 2008-09-09 11:36:03

Apache Commons propose des communes-graphe. Sous http://svn.apache.org/viewvc/commons/sandbox/graph/trunk / on peut inspecter la source. L'exemple d'utilisation de l'API est aussi dans le SVN. Voir https://issues.apache.org/jira/browse/SANDBOX-458 pour une liste d'algorithmes implémentés, également comparée à Jung, GraphT, Prefuse, jBPT

Google Goyava si vous avez seulement besoin de bonnes structures de données.

JGraphT est une bibliothèque de graphes avec Algorithmes implémentés et ayant (à mon avis) un bon modèle de graphique. Exemple Helloworld. Licence: LGPL + EPL.

JUNG2 est également une bibliothèque sous licence BSD avec une structure de données similaire à JGraphT. Il propose des algorithmes de layouting, qui sont actuellement manquants dans JGraphT. Le commit le plus récent date de 2010 et les paquets hep.aida.* sont LGPL (via la bibliothèque colt, qui est importée par JUNG). Cela empêche JUNG d'être utilisé dans des projets sous la parapluie d'ASF et du FSE. Peut-être que l'on devrait utiliser le fork github et supprimer cette dépendance. Commit f4ca0cd met en miroir le dernier commit CVS. Les commits actuels semblent supprimer la fonctionnalité de visualisation. Commettre d0fb491c ajoute un .gitignore.

Prefuse stocke les graphiques en utilisant une structure matricielle, qui n'est pas efficace en mémoire pour les graphiques clairsemés. Licence: BSD

Eclipse Zest a intégré des algorithmes de mise en page de graphes, qui peuvent être utilisés indépendamment de SWT. Voir org.Eclipse.zeste.disposition.algorithmes . La structure de graphe utilisée est celle de Eclipse Draw2d , où Les nœuds sont des objets explicites et non injectés via des génériques (comme cela se produit dans Apache Commons Graph, JGraphT et JUNG2).

 14
Author: koppor, 2017-07-26 11:20:29

Http://neo4j.org / est une base de données de graphes qui contient de nombreux algorithmes de graphes et évolue mieux que la plupart des bibliothèques en mémoire.

 12
Author: Jonathan Hendler, 2010-03-24 09:12:30

Dans un projet universitaire, j'ai joué avec yFiles par yWorks et j'ai trouvé qu'il avait une assez bonne API.

 10
Author: Turismo, 2008-09-09 11:20:13

Découvrez Plans:

Blueprints est une collection d'interfaces, d'implémentations, d'ouplementations et de suites de tests pour le modèle de données de graphe de propriétés. Blueprints est analogue au JDBC, mais pour les bases de données de graphes. Au sein de la pile de logiciels open source TinkerPop, Blueprints sert de technologie de base pour:

Pipes : Un cadre de flux de données paresseux

Gremlin : Un langage de traversée de graphe

Cadres: Un mappeur objet-graphique

Furnace : Un paquet d'algorithmes de graphe

Rexster: Un graphe serveur

 9
Author: alex, 2014-07-16 10:00:41

Http://incubator.apache.org/hama / est un paquet scientifique distribué sur Hadoop pour les données matricielles et graphiques massives.

 7
Author: xyz, 2010-05-16 16:23:13

JDSL (Bibliothèque de structures de données en Java) devrait être assez bon si vous aimez les algorithmes de graphe - http://www.cs.brown.edu/cgc/jdsl/

 7
Author: mr.sverrir, 2012-02-06 14:09:36

Pour la visualisation, notre groupe a eu un certain succès avec prefuse. Nous l'avons étendu pour gérer les planchers architecturaux et les diagrammes de bulles, et cela ne s'est pas trop plaint. Ils ont aussi une nouvelle boîte à outils Flex appelée Flare qui utilise une API très similaire.

MISE À JOUR: Je devrais être d'accord avec le commentaire, nous avons fini par écrire beaucoup de fonctionnalités personnalisées/travailler autour des limitations de prefuse. Je ne peux pas dire que partir de zéro aurait été mieux que nous avons pu démontrer les progrès du jour 1 en utilisant prefuse. D'un autre côté, si nous faisions une deuxième implémentation de la même chose, je pourrais ignorer prefuse car nous comprendrions beaucoup mieux les exigences.

 5
Author: Jacob Rigby, 2008-09-10 01:34:56

Essayez Annas c'est un package graphique open source qui est facile à gérer

Http://annas.googlecode.com

 5
Author: Sam Wilson, 2009-06-07 10:44:12

Il est également bon d'être convaincu qu'un graphique peut être représenté aussi simplement que:

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

Et implémentez la plupart des algorithmes que vous trouvez intéressants par vous-même. Si vous tombez sur cette question au milieu d'une session de pratique/apprentissage sur les graphiques, c'est la meilleure bibliothèque à considérer. ;)

Vous pouvez également préférer la matrice d'adjacence pour les algorithmes les plus courants:

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

, Ou une matrice pour certaines opérations :

class DenseGraph {
  int[] nodeValues;
  int[][] edges;     
}
 5
Author: Snicolas, 2014-01-25 08:23:28

Je ne sais pas si je l'appellerais prêt pour la production, mais il y a jGABL.

 4
Author: Hank Gay, 2013-05-22 19:00:20

Si vous avez besoin de performances, vous pouvez jeter un oeil à Grph. La bibliothèque est développée au sein de l'Université française et du CNRS/Inria.

Http://www.i3s.unice.fr/~hogie/grph/

Le projet est actif et un soutien réactif est fourni!

 4
Author: Luc, 2013-09-25 13:07:04

Les implémentations d'algorithmes de graphe d'instruction en java peuvent être trouvées ici (par prof. Sedgewick et al.): http://algs4.cs.princeton.edu/code/

Je leur ai été présenté en assistant à ces cours d'algorithme exceptionnels sur coursera (également enseigné par le prof. Sedgewick):

Https://www.coursera.org/course/algs4partI

Https://www.coursera.org/course/algs4partII

 3
Author: Norbert Madarász, 2014-01-19 14:47:33

Si vous recherchez réellement des bibliothèques de graphiques et non des bibliothèques de graphes Node/Edge, je suggérerais de faire des folies sur une grande bibliothèque de graphes sans visage ( BFG). Il est beaucoup plus facile à utiliser que JFreeChart, semble plus agréable, fonctionne plus vite, a plus d'options de sortie, vraiment pas de comparaison.

 0
Author: Jacob Rigby, 2008-09-09 11:22:27

JGraph à partir de http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html

Fournit un logiciel puissant pour travailler avec des graphiques (directs ou non). Génère également du code Graphivz, vous pouvez voir des représentations graphiques. Vous pouvez mettre vos propres algorithmes de code dans pakage, par exemple: backtracking code. Le paquet fournit quelques algorithmes: Dijkstra, retour en arrière minimun chemin coût, ect..

 -1
Author: Bob, 2010-06-05 11:27:01