Cóż, jeśli zależy Ci na wydajności przestrzeni, najlepiej skompresowana struktura danych byłaby najlepsza - ale oczywiście nie jest to zbyt wydajne w przypadku dostępu lub aktualizacji .....
Jeśli wykres ma stosunkowo niewielką liczbę węzłów i jest dość gęsty (powiedzmy, że istnieje co najmniej 5% wszystkich możliwych połączeń), może okazać się, że utworzenie macierzy przylegania jest bardziej efektywne pod względem miejsca niż używanie list krawędzi. Wymagałoby to tylko jednego bitu na możliwe (ukierunkowane) połączenie, a łącznie n * n bitów tam, gdzie masz n węzłów.
W przeciwnym razie, jeśli chcesz użyć łączy sąsiednich, nie możesz zrobić lepiej niż jeden odnośnik na link, ponieważ jest to minimalna zawartość informacyjna, którą musisz przechowywać. Jeśli chcesz mieć linki zwrotne, będziesz potrzebował dwa razy więcej linków.
Istnieje kilka sztuczek, które możesz wypróbować. Na przykład możesz spróbować udostępnić podzbiory linków (jeśli A i B odnoszą się do każdego z C, D, E, to zapisz listę łączy C, D, E tylko raz .....). Jednak stanie się to dość szybko złożone i wątpię, że w większości przypadków będzie to warte wysiłku.
Jeszcze jedna sztuczka - zakładając, że Twój wykres ma rozsądną liczbę węzłów, z pewnością zaoszczędzisz miejsce przez indeksowanie - np. Używając 16-bitowego numeru indeksu węzła zamiast pełnego wskaźnika / odwołania.