oggetti e puntatori
Questi sono solo Datastructures di base come Hammar ha detto in altra risposta, in Java
si dovrebbe rappresentare questo con le classi come spigoli e vertici. Ad esempio un bordo collega due vertici e può essere diretto o indiretto e può contenere un peso. Un vertice può avere un ID, un nome, ecc. Per lo più entrambi hanno proprietà aggiuntive. Così si può costruire il grafico con loro come
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
Questo approccio è comunemente utilizzato per implementazioni object oriented, dal momento che è più leggibile e conveniente per gli utenti orientati agli oggetti;).
matrice
Una matrice è un semplice 2 matrice bidimensionale. Supponendo di aver ID vertex di che può essere rappresentato come un array int simili:
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
Questo è comunemente utilizzato per grafi densi cui è necessario accedere indice. Puoi rappresentare una struttura un/diretta e ponderata con questo.
lista di adiacenza
Questo è solo un semplice mix datastructure, io di solito implementare questo utilizzando un HashMap<Vertex, List<Vertex>>
.Simile usato può essere il HashMultimap
in Guava.
Questo approccio è interessante, perché hai una ricerca di vertici O (1) (ammortizzata) e mi restituisce una lista di tutti i vertici adiacenti a questo particolare vertice che ho richiesto.
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
Questo è usato per rappresentare grafi sparsi, se si sta applicando a Google, si dovrebbe sapere che il webgraph è scarsa. Puoi gestirli in modo più scalabile usando BigTable.
Oh, e BTW, here è una buona sintesi di questo post con le immagini di fantasia;)
come circa [grafici induttivi] (https://web.engr.oregonstate.edu/~erwig/papers/InductiveGraphs_JFP01.pdf) - quale delle 3 categorie fare queste cadere sotto? –