obiektów i wskaźniki
Są to tylko podstawowe datastructures jak Hammar powiedział w drugiej odpowiedzi, w Java
byś reprezentować ten z klas takich jak krawędzie i wierzchołki. Na przykład krawędź łączy dwa wierzchołki i może być skierowana lub nieukierunkowana i może zawierać wagę. Werteks może mieć identyfikator, nazwę itp. Zwykle oba mają dodatkowe właściwości. Więc można skonstruować swój wykres z nich jak
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
Takie podejście jest powszechnie stosowany do implementacji obiektowego, ponieważ jest bardziej czytelny i wygodny dla użytkowników obiektowe).
matrycy
macierz jest tylko prosta 2 wymiarową macierz. Zakładając, że vertex ID użytkownika, które mogą być reprezentowane jako int tablicy tak:
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
ten jest powszechnie stosowany do gęstych wykresach, gdzie dostęp do indeksu jest konieczne. Za pomocą tego możesz reprezentować un/reżyserowaną i ważoną strukturę.
lista sąsiedztwa
To jest tylko prosty mix datastructure, zwykle zaimplementować to przy użyciu HashMap<Vertex, List<Vertex>>
.Podobny używany może być HashMultimap
w Guava.
To podejście jest fajne, ponieważ masz O (1) (amortyzowane) wyszukiwanie wierzchołków i zwraca mi listę wszystkich sąsiednich wierzchołków do tego konkretnego wierzchołka, którego wymagałem.
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
ten jest wykorzystywany do reprezentowania rozrzedzone wykresy, jeśli ubiegasz się w Google, należy wiedzieć, że webgraph jest rzadki. Możesz sobie z nimi radzić w bardziej skalowalny sposób, korzystając z BigTable.
Oh i BTW, here jest bardzo dobre podsumowanie tego postu z fantazyjnych zdjęć;)
jak o [wykresy indukcyjne] (https://web.engr.oregonstate.edu/~erwig/papers/InductiveGraphs_JFP01.pdf) - co stanowi 3 do tych kategorii wpaść pod? –