2.4 KiB
Fundamentals
- A node or vertex contains a data point
- An edge is what connects one node to another
A graph is just a collection of vertices and edges.
[!QUESTION] What is a real-life example of a simple graph with only vertices and edges?
Some additional properties we can put on a graph:
- A weight is a numerical value that can be assigned to an edge
- We can also assign a direction to an edge, such that it only points from one node to another, not the other way around
We can, of course, combine both of these properties too.
[!QUESTION] What's something we can model with weights in a graph? What about with directional edges?
Going forward, we'll use V to represent the number of vertices in a graph, and E to represent the number of edges.
Representing a graph
The adjacency list stores a list of connected vertices for each node, and it can fit in a dictionary or hash map structure.
1 -> 2, 4
2 -> 1, 3
3 -> 2
4 -> 1
[!QUESTION] How would you draw out this graph?
[!QUESTION] What would this mapping look like if we wanted to add weights? What about directional edges?
The adjacency matrix is a 2D array where each position arr[x][y] represents an edge, and x and y each represent a node.
[
[0, 1, 0, 1],
[1, 0, 1, 0],
[0, 1, 0, 0],
[1, 0, 0, 0]
]
[!QUESTION] How would you draw out this graph? What would it look like as an adjacency list?
[!QUESTION] How do we add weights and/or directional edges to this graph?
Categorizing graphs
We say a graph is directed and acyclic, or a directed acyclic graph (DAG), if there are no cycles formed using the directional edges.
[!QUESTION] What's something we can model with a DAG?
[!QUESTION] What's another data structure we went over that also classifies as a DAG?
A graph is dense if E is closer to V^2, and sparse if E is closer to V.
[!QUESTION] What's the implication for the graph if
Eis closer toV^2, i.e. how is it different compared to a sparse graph?
[!QUESTION] What's the maximum number of edges we can have in a graph with no self-loops, relative to the number of vertices
V?
A graph can contain self-loops (a loop from a vertex to itself). A graph can also have multiple edges going from one vertex to another.
[!QUESTION] How do we represent a self-loop using an adjacency matrix?
Finally, a graph is connected if every vertex is reachable from every other vertex.