İlk örneğinizin biraz belirsiz olduğunu düşünüyorum - nesneler olarak düğümler ve işaretçiler olarak kenarlar. Bunları yalnızca bazı kök düğüme bir işaretçi depolayarak takip edebilirsiniz, bu durumda belirli bir düğüme erişim verimsiz olabilir (örneğin 4. düğümü istediğinizi söyleyin - düğüm nesnesi sağlanmadıysa, onu aramanız gerekebilir) . Bu durumda, grafiğin kök düğümden ulaşılamayan kısımlarını da kaybedersiniz. Sanırım f64 Rainbow, belirli bir düğüme erişmek için zaman karmaşıklığının O (n) olduğunu söylediğinde gökkuşağı varsayıyor.
Aksi takdirde, her bir düğüme yönelik işaretçilerle dolu bir dizi (veya karma haritası) tutabilirsiniz. Bu, belirli bir düğüme O (1) erişimine izin verir, ancak bellek kullanımını biraz artırır. Eğer n düğüm sayısı ve e kenar sayısı ise, bu yaklaşımın uzay karmaşıklığı O (n + e) olacaktır.
Matris yaklaşımı için uzay karmaşıklığı, O (n ^ 2) çizgileri boyunca olacaktır (kenarların tek yönlü olduğu varsayılarak). Grafiğiniz seyrekse, matrisinizde çok sayıda boş hücre olacaktır. Ancak grafiğiniz tamamen bağlantılıysa (e = n ^ 2), bu ilk yaklaşımla olumlu bir şekilde karşılaştırılır. RG'nin dediği gibi, matrisi tek bir bellek parçası olarak ayırırsanız, bu yaklaşımda daha az önbellek eksikliğiniz olabilir, bu da grafiğin etrafındaki birçok kenarı daha hızlı takip edebilir.
Üçüncü yaklaşım, çoğu durum için muhtemelen en verimli alan - O (e) - ancak belirli bir düğümün tüm kenarlarını bulmayı bir O (e) işi haline getirecektir. Bunun çok yararlı olacağı bir durum düşünemiyorum.