We can represent a graph as either an adjacency list or an adjacency matrix.
The list form requires O(n+m) for storage and vertex removal, O(n) for access, and O(m) for edge removal, but has constant-time addition of edges and vertices.
The matrix requires O(n^2) for storage, vertex addition, and vertex removal, but has constant-time access, edge addition and edge removal.
In spite of the fact that adjacency matrices seem worse, they're often preferred, especially to find all edges incident to a specific vertex.
Both BFS and DFS take O(n+m) time complexity, where n represents the number of vertices and m the number of edges in G, assuming you use an adjacency list.
Made sense in the book, kind of dry. 7/10.