Graphs
Graphs are a data structure that come from binary relations.
Vertices (nodes) are connected by edges (links). Ex: the edge (u,v) connects node u to v. u is the tail and v is the head.
Every node has an in-degree (the number of edges pointing into it) and an out-degree (the number of edges pointing out of it).
Terms
Vertices are adjacent if they have an edge
An edge is incident to it's endpoints
Vertices are neighbors if they have an edge, and a vertices degree is the number of neighbors that it has.
The total degree of a graph is a sum of all the degrees of the vertices. (twice the number of edges will always be the degree).
A graph is regular if all the vertices have the same degree.
Two vertices are connected if there is any path between the two.
A graph can be n-connected if removing n edges/nodes will break it into more than one piece.
Notation
Normally you just draw it out in a math context.
Adjacency Matrix
0 0 1 0
1 0 0 1
0 1 0 0
1 1 0 1
shows if (from x, to y) is true
Adjacency List
{
a: [b, c],
b: [a, c, e]
}
each node points to a list of it's neighbors
Operations
Walk
Start at one vertex and use a sequence of edges to reach another vertex. The length of a walk is the number of edges in the walk, not the number of nodes.
Circuit
A walk where the last vertex is the vertex you started at. is a circut of length 0.
A circuit is a cycle if there are no other repeated nodes other than the initial and final node.
Graph power theorem
Let G be a directed graph. Let u and v be any two vertices in G. There is an edge from u to v in G^k (g composed with itself k times) if and only if there is a walk of length k from u to v in G.
Transitive Closure
Basically just connect each node that is connected by an extra step. Every two step becomes one. Continue for each transitive closure - can be written as G^n
If you have a graph with n vertices there is no direct path without loops between two vertices that is longer than n.
Directed Acyclic Graph
Graph with directed edges and no loops.
You can sort them with topological sort to show the dependency relations between nodes.