Bene, se l'efficienza dello spazio è tutto ciò che ti interessa, una struttura di dati compressi sarebbe la migliore - ma ovviamente questo 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), potresti trovare più efficiente lo spazio per creare una matrice di adiacenza piuttosto che usare gli elenchi dei bordi. Ciò richiederebbe solo un bit per ogni possibile connessione (diretta) e n * n bit totali dove si hanno n nodi.
In caso contrario, se è necessario utilizzare i collegamenti adiacenti, non è possibile fare facilmente meglio di un riferimento per collegamento, poiché si tratta del contenuto minimo di informazioni che è necessario archiviare. Se si desidera backlink, sarà necessario il doppio del numero di link.
Ci sono alcuni trucchi che potresti provare su questo. Ad esempio, potresti provare a condividere sottoinsiemi di collegamenti (se A e B si riferiscono a ciascuno di C, D, E, quindi memorizzare l'elenco dei collegamenti C, D, E una volta .....). Tuttavia, questo diventerà complesso abbastanza rapidamente 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 esempio usando un numero indice nodo a 16 bit anziché un puntatore / riferimento completo.