Bene, se l'efficienza dello spazio è tutto ciò che ti interessa, una struttura di dati compresso sarebbe la soluzione migliore, ma ovviamente non è molto efficiente per l'accesso o l'aggiornamento .....
Se il tuo grafico ha un numero relativamente piccolo di nodi ed è abbastanza denso (diciamo che esiste almeno il 5% di tutte le connessioni possibili), allora potresti trovare che è più efficiente nello spazio creare un matrice di adiacenza anziché utilizzare gli elenchi di spigoli. Ciò richiederebbe solo un bit per la connessione (diretta) possibile, e n * n bit totali dove hai n nodi.
Altrimenti, se hai bisogno di usare i link adiacenti, non puoi facilmente fare meglio di un riferimento per link poiché questo è il contenuto minimo di informazioni che devi memorizzare. Se vuoi i back-link ti occorrono il doppio dei link.
Ci sono alcuni trucchi che potresti provare sopra. Ad esempio, puoi provare a condividere sottoinsiemi di link (se A e B si riferiscono a ciascuno di C, D, E quindi memorizza solo la lista dei link C, D, E una volta .....). Tuttavia questo diventerà abbastanza complesso e dubito che ne varrà la pena nella maggior parte dei casi.
Un altro trucco: supponendo che il tuo grafico abbia un numero ragionevole di nodi, risparmierai sicuramente spazio indicizzando, ad es. utilizzando un numero di indice del nodo a 16 bit anziché un puntatore / riferimento completo.