Question

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

Pour clarifier, je ne recherche pas une bibliothèque qui produit des graphiques/diagrammes, j'en recherche une qui aide avec les algorithmes graphiques, par exemple l'arbre couvrant minimum, l'algorithme de Kruskal Nodes, Edges, etc.Idéalement, un avec de bons algorithmes/structures de données dans une belle API Java OO.

Était-ce utile?

La solution

Si vous utilisiez JGraph, vous devriez essayer de 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 comptez les mettre en œuvre vous-même et devez afficher votre graphique, cela pourrait être le meilleur choix.J'ai vraiment aimé utiliser son API, lorsque j'ai rapidement dû écrire une application qui travaillait sur un graphique et l'affichait plus tard.

Autres conseils

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 BGG sont d'autres choses que les gens ont essayé d'utiliser.
  • Préfuser est un non non puisqu'il faut en réécrire la majeure partie.
  • Google Goyave si vous avez besoin uniquement de bonnes structures de données.
  • Graphique 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 des algorithmes implémentés, également comparés à Jung, GraphT, Prefuse, jBPT

Vérifier JGraphT pour une bibliothèque de graphiques Java très simple et puissante, plutôt bien réalisée et, pour dissiper toute confusion, est différent de JGraph.Quelques 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);

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

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

Google Goyave si vous avez besoin uniquement de bonnes structures de données.

JGraphT est une bibliothèque de graphiques avec de nombreux algorithmes implémentés et ayant (à mon avis) un bon modèle de graphique. Exemple de 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 mise en page, qui manquent actuellement dans JGraphT.Le commit le plus récent date de 2010 et les packages hep.aida.* sont LGPL (via le bibliothèque Colt, lequel est importé par JUNG).Cela empêche JUNG d'être utilisé dans des projets sous l'égide de l'ASF et du FSE.Peut-être faudrait-il utiliser le fourche github et supprimez cette dépendance. Valider f4ca0cd reflète le dernier commit CVS.Les commits actuels semblent supprimer la fonctionnalité de visualisation. Valider d0fb491c ajoute un .gitignore.

Préfuser stocke les graphiques à l'aide d'une structure matricielle, qui n'est pas économe en mémoire pour les graphiques clairsemés.Licence:BSD

Zeste d'éclipse a intégré des algorithmes de présentation de graphiques, qui peuvent être utilisés indépendamment de SWT.Voir org.eclipse.zest.layouts.algorithms.La structure graphique utilisée est celle de Éclipse Draw2d, où Les nœuds sont des objets explicites et non injecté via Generics (comme c'est le cas dans Apache Commons Graph, JGraphT et JUNG2).

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

Dans un projet universitaire, j'ai joué avec yFiles en yWorks et j'ai trouvé qu'il avait une très bonne API.

vérifier Plans:

Blueprints est une collection d'interfaces, d'implémentations, de compléments et de suites de tests pour le modèle de données du graphe de propriétés.Blueprints est analogue au JDBC, mais pour les bases de données graphiques.Au sein de la pile logicielle open source TinkerPop, Blueprints constitue la technologie fondamentale pour :

Tuyaux:Un cadre de flux de données paresseux

Diablotin:Un langage de parcours graphique

Cadres:Un mappeur objet-graphique

fourneau:Un package d'algorithmes graphiques

Rexster:Un serveur graphique

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

JDSL (Data Structures Library in Java) devrait suffire si vous aimez les algorithmes graphiques - http://www.cs.brown.edu/cgc/jdsl/

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

MISE À JOUR:Je dois être d'accord avec le commentaire, nous avons fini par écrire beaucoup de fonctionnalités personnalisées/contourner les limitations de préfuse.Je ne peux pas dire que repartir de zéro aurait été mieux, car nous avons pu démontrer les progrès dès le premier jour en utilisant prefuse.D'un autre côté, si nous faisions une deuxième implémentation du même élément, je pourrais sauter le préfuse car nous comprendrions beaucoup mieux les exigences.

Essayez Annas, c'est un package graphique open source facile à maîtriser

http://annas.googlecode.com

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

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

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

Vous pouvez également préférer une matrice de contiguïté 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;     
}

Je ne sais pas si je dirais que c'est prêt pour la production, mais il y a jGABL.

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

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

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

Les implémentations d’algorithmes de graphes pédagogiques en Java peuvent être trouvées ici (par le prof.Sedgewick et coll.) :http://algs4.cs.princeton.edu/code/

Je les ai découverts en assistant à ces cours d'algorithmes exceptionnels sur Coursera (également dispensés par le prof.Sedgewick):

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

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

Si vous recherchez réellement des bibliothèques de graphiques et non des bibliothèques Node/Edge Graph, je vous suggère de faire des folies avec la bibliothèque Big Faceless Graph (BGG).Il est bien plus facile à utiliser que JFreeChart, est plus joli, fonctionne plus rapidement, offre plus d'options de sortie, vraiment aucune comparaison.

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top