Cụ thể, đồ thị G sẽ được biểu diễn bởi các mảng như sau:
- incoming_edges, incoming_index là mảng gồm các phần tử nguyên 4 byte để lưu trữ thông tin liên quan đến các đỉnh vào của các nốt. incoming_edges lưu tất cả các đỉnh vào của các nốt, incoming_index lưu trữ vị trí bắt đầu và số lượng đỉnh vào của các nốt.
- outgoing_edges, outgoing_index là mảng gồm các phần tử nguyên 4 byte để lưu trữ thông tin liên quan đến các đỉnh ra của các nốt. outgoing_edges lưu tất cả các đỉnh ra của các nốt, outgoing_index lưu trữ vị trí bắt đầu và số lượng đỉnh ra của các nốt.
Ví dụ ở Hình 2.6 mô tả đầu vào (input) bên trái sẽ cho cấu trúc dữ liệu theo danh sách kề các đỉnh vào ở bên phải.
Nhờ vào việc sử dụng danh sách các đỉnh vào và đỉnh ra của từng nốt, chúng ta có thể duyệt đồ thị theo chiều rộng từ cả hai phía. Nó sẽ cho phép tính toán khoảng cách ngắn nhất giữa hai điểm dựa trên thuật toán duyệt đồ thị theo từ rộng từ cả hai phía (bi-directional BFS) [19]
2.5. Tối ưu quá trình thêm và xóa cạnh của đồ thị
2.5.1. Thêm mới một cạnh
Vấn đề đặt ra là làm thế nào một cạnh có thể được thêm vào đồ thị với thời gian ít nhất. Khi sử dụng danh sách kề truyền thống để biểu diễn đồ thị, các chiến lược có thể được dùng để thêm mới một cạnh như sau:
Chèn vào giữa mảng
Phương pháp này rất đơn giản, trước khi thêm cạnh mới vào đồ thị, vị trí các phần tử của đỉnh vào/ra của một nốt được xác định. Tất cả các phần tử đỉnh vào/ra của các nốt kế tiếp sẽ được dịch sang phải một ví trị để dành vị trí trống cho đỉnh vào/ra của cạnh mới được thêm vào. Quá trình này được miêu tả trong Hình 2.7 (Thêm cạnh (2, 1) vào đồ thị).