Trước hết lưu ý rằng thưa thớt có nghĩa là bạn có rất ít cạnh và dày đặc có nghĩa là nhiều cạnh hoặc đồ thị gần như hoàn chỉnh. Trong một đồ thị hoàn chỉnh, bạn có cạnh, trong đó n là số nút.n(n−1)/2n
Bây giờ, khi chúng ta sử dụng đại diện ma trận chúng tôi phân bổ ma trận để lưu trữ thông tin nút-kết nối, ví dụ, M [ i ] [ j ] = 1 nếu có cạnh giữa các nút i và j , nếu không M [ i ] [ j ] = 0 .
Nhưng nếu chúng ta sử dụng danh sách kề thì chúng ta có một mảng các nút và mỗi nút trỏ đến danh sách kề của nó chứa CHỈ các nút lân cận .n×nM[i][j]=1ijM[i][j]=0
Bây giờ nếu một biểu đồ thưa thớt và chúng tôi sử dụng biểu diễn ma trận thì hầu hết các ô ma trận vẫn không được sử dụng dẫn đến lãng phí bộ nhớ. Vì vậy, chúng ta thường không sử dụng biểu diễn ma trận cho các biểu đồ thưa thớt. Chúng tôi thích danh sách kề.
Nhưng nếu đồ thị dày đặc thì số cạnh gần với (hoàn thành) hoặc đến n 2 nếu đồ thị được định hướng bằng các vòng tự. Sau đó, không có lợi thế của việc sử dụng danh sách kề trong ma trận.n(n−1)/2n2
Về độ phức tạp không gian
Ma trận điều chỉnh:
Danh sách điều chỉnh: O ( n + m )
trong đó n là các nút số, m là số cạnh.O(n2)
O(n+m)
nm
Khi biểu đồ là cây vô hướng thì
ma trận Adjacency:
Danh sách điều chỉnh: O ( n + n ) là O ( n ) (tốt hơn n 2 )O(n2)
O(n+n)O(n)n2
Khi đồ thị được định hướng, hoàn thành, với các vòng lặp tự lập thì
ma trận điều chỉnh:
Danh sách điều chỉnh: O ( n + n 2 ) là O ( n 2 ) (không có sự khác biệt)O(n2)
O(n+n2)O(n2)
Và cuối cùng, khi bạn triển khai sử dụng ma trận, kiểm tra xem có một cạnh giữa hai nút mất lần hay không, trong khi với danh sách kề, nó có thể mất thời gian tuyến tính trong n .O(1)n