2009-11-04 6 views

Répondre

1

Voyant que vous voulez un résumé type de données, je ne mentionnerai rien à propos de l'implémentation.

Un graphe G = <V, E> est un ensemble de sommets V, et un ensemble d'arêtes E où chaque élément de E est un tuple e = <v1, v2> et v1 et v2 sont en V.

Ce qui suit peut ressembler à Java, mais je suis vraiment penser à une langue suffisamment expressive:

interface Graph { 
    Set getVertices(); 
    Set getEdges(); 
    void addVertex(Object v); 
    void addEdge(Object v1, Object v2); 
    void removeVrtex(Object v); 
    void removeEdge(Object v1, Object v2); 
} 

Je pense que c'est le strict minimum. Je n'ai pas spécifié ce qui est retourné par getEdges; Si la langue a un type de n-uplet natif, il en existe un ensemble. Dans la pratique, vous voulez ajouter des méthodes supplémentaires telles que:

int getDegree(Object v); 
void contractEdge(Object v1, Object v2); 
boolean isIsthmus(Object v1, Object v2); /* does removal of this edge increase the number of components? */ 
int numComponents(); 
boolean isConnected(); /* return numComponents() <= 1 */ 
boolean isCycle(Set path); /* path is a set of edges. */ 

etc.

L'extension à d'digraphs est laissé en exercice :-).

+0

:) Oui, il y a beaucoup de choses dans les graphiques. cool. Merci. – DarthVader

2

Deux des structures les plus courantes pour les graphes stockage sont adjacency lists et adjacency matrices. Ce que vous devez utiliser dépend généralement de ce que vous avez l'intention de faire avec le graphique (car l'un peut fournir des temps de manipulation/accès plus optimaux que l'autre pour un algorithme donné), et de la densité ou de la densité du graphique. plus compacts pour les graphes épars, les matrices ont moins de surdébit relatif, plus le graphe est dense).

+0

Je suis conscient de la liste d'adjacence et de la matrice, plus il y a une liste d'appartenance et une matrice. mais quelle structure de données va avec eux? – DarthVader

Questions connexes