Saya pikir contoh pertama Anda agak ambigu - node sebagai objek dan edge sebagai pointer. Anda dapat melacak ini dengan menyimpan hanya sebuah pointer ke beberapa node root, dalam hal ini mengakses node tertentu mungkin tidak efisien (katakanlah Anda menginginkan node 4 - jika objek node tidak disediakan, Anda mungkin harus mencarinya) . Dalam kasus ini, Anda juga akan kehilangan bagian grafik yang tidak dapat dijangkau dari node root. Saya pikir ini adalah kasus yang diasumsikan f64 rainbow ketika dia mengatakan kompleksitas waktu untuk mengakses node yang diberikan adalah O (n).
Jika tidak, Anda juga bisa menyimpan array (atau hashmap) penuh dengan pointer ke setiap node. Hal ini memungkinkan akses O (1) ke node tertentu, tetapi sedikit meningkatkan penggunaan memori. Jika n adalah jumlah node dan e adalah jumlah edge, kompleksitas ruang dari pendekatan ini adalah O (n + e).
Kompleksitas ruang untuk pendekatan matriks akan berada di sepanjang garis O (n ^ 2) (dengan asumsi tepi searah). Jika grafik Anda jarang, Anda akan memiliki banyak sel kosong di matriks Anda. Tetapi jika grafik Anda sepenuhnya terhubung (e = n ^ 2), ini lebih baik dibandingkan dengan pendekatan pertama. Seperti yang dikatakan RG, Anda mungkin juga memiliki lebih sedikit cache yang hilang dengan pendekatan ini jika Anda mengalokasikan matriks sebagai satu bagian memori, yang dapat membuat banyak tepi di sekitar grafik menjadi lebih cepat.
Pendekatan ketiga mungkin yang paling efisien ruang untuk kebanyakan kasus - O (e) - tetapi akan membuat pencarian semua tepi node tertentu menjadi tugas O (e). Saya tidak bisa memikirkan kasus di mana ini akan sangat berguna.