Objekte und Zeiger
Dies sind nur grundlegende Datenstrukturen, wie Hammar in der anderen Antwort sagte. Java
Sie würden dies mit Klassen wie Kanten und Eckpunkten darstellen. Beispielsweise verbindet eine Kante zwei Eckpunkte und kann entweder gerichtet oder ungerichtet sein und ein Gewicht enthalten. Ein Scheitelpunkt kann eine ID, einen Namen usw. haben. Meistens haben beide zusätzliche Eigenschaften. So können Sie Ihr Diagramm mit ihnen wie erstellen
Vertex a = new Vertex(1);
Vertex b = new Vertex(2);
Edge edge = new Edge(a,b, 30); // init an edge between ab and be with weight 30
Dieser Ansatz wird üblicherweise für objektorientierte Implementierungen verwendet, da er für objektorientierte Benutzer lesbarer und bequemer ist;).
Matrix
Eine Matrix ist nur ein einfaches zweidimensionales Array. Angenommen, Sie haben Scheitelpunkt-IDs, die wie folgt als int-Array dargestellt werden können:
int[][] adjacencyMatrix = new int[SIZE][SIZE]; // SIZE is the number of vertices in our graph
adjacencyMatrix[0][1] = 30; // sets the weight of a vertex 0 that is adjacent to vertex 1
Dies wird häufig für dichte Diagramme verwendet, bei denen ein Indexzugriff erforderlich ist. Damit können Sie eine ungerichtete und gewichtete Struktur darstellen.
Adjazenzliste
Dies ist nur ein einfacher Datenstruktur-Mix, den ich normalerweise mit einem implementiere HashMap<Vertex, List<Vertex>>
. Ähnlich verwendet kann das HashMultimap
in Guave sein.
Dieser Ansatz ist cool, da Sie eine O (1) (amortisierte) Scheitelpunktsuche haben und mir eine Liste aller benachbarten Scheitelpunkte zu diesem bestimmten Scheitelpunkt zurückgeben, den ich angefordert habe.
ArrayList<Vertex> list = new ArrayList<>();
list.add(new Vertex(2));
list.add(new Vertex(3));
map.put(new Vertex(1), list); // vertex 1 is adjacent to 2 and 3
Dies wird zur Darstellung spärlicher Diagramme verwendet. Wenn Sie sich bei Google bewerben, sollten Sie wissen, dass der Webgraph spärlich ist. Mit einem BigTable können Sie skalierbarer mit ihnen umgehen .
Oh und übrigens, hier ist eine sehr gute Zusammenfassung dieses Beitrags mit ausgefallenen Bildern;)