2010-04-08 6 views
4

Est-ce que quelqu'un connaît une bonne bibliothèque Java pour comparer des graphes en recherchant l'isomorphisme sous-graphe commun maximal pour obtenir des informations sur leur similarité? Je ne veux pas comparer des graphiques basés sur des étiquettes de noeud. Ou y a-t-il un autre moyen de comparer topologiquement des graphes avec de bonnes bibliothèques Java? Maintenant j'utilise la bibliothèque SimPack et c'est utile mais j'ai besoin de quelque chose de plus. Toutes les suggestions seront très utiles.Bibliothèque de graphes Java pour comparer 2 graphes

+0

Je serais vraiment intéressé à connaître la réponse; mais je soupçonne fortement qu'il n'y a pas une telle bibliothèque. Quel serait le résultat de la comparaison? – tucuxi

+0

Je m'attends à ce que la sortie de la comparaison soit une information sur le mappage des nœuds entre les graphes - quel nœud du premier graphe mappé à quel nœud du deuxième graphe et le numéro de leur similarité. – user311909

Répondre

2

Après un peu de navigation, j'ai trouvé du code C++ implémentant plusieurs algorithmes de correspondance (Shmidt-Druffel, Ullman, VF, VF2) sans besoin d'étiquetage de bord ou de nœud. SimPack utilise l'algorithme de Valiente, qui semble être (je n'ai pas trouvé de bonne description) attribut-graphique spécifique. Si vous le réécrivez en Java ou si vous écrivez une bibliothèque JNI pour l'interfacer, veuillez la rendre publique.

Voir http://amalfi.dis.unina.it/graph/db/vflib-2.0

Un bon examen de l'état de l'art se trouve dans un document par les auteurs du code ci-dessus: « Thirty years of graph matching in pattern recognition »

+0

J'espère toujours qu'il existe une bonne bibliothèque en Java. – user311909

1

Vous pourriez obtenir des réponses de ce fil Good Java graph algorithm library?

Un couple Java Graphique Les bibliothèques sont: Graphique Visualisation Bibliothèque JGraph

Java Graphique algorithme Bibliothèque JGraphT

Si aucun de ces travaux ne vous convient, vous devrez probablement organiser les graphes en utilisant une structure comme ci-dessous et lancer l'algorithme.

public class Node<T> 
{ 
    public T NodeData; 
    public List<Edge> edges; 
} 
public class Edge 
{ 
    public Node<S> Source; 
    public Node<D> Destination; 
    public int weight; 
} 
Questions connexes