Graphs
Graphs are data structures that represent nodes/items (vertices), and their connections (edges).
Directed-ness
Graphs can be directed: The edges of the graph specify a connection from one node to another (in a single direction). Undirected graphs have edges that are (implicitly) bi-directional.
graph TB;
subgraph Directed
a-->b & c;
b-->d;
c-->d & e;
end
subgraph Undirected
1---2 & 3;
2---4;
3---4 & 5;
endCycles
Graph can be A/Cyclic: Acyclic graphs have connections that do not form any loops (cycles), whereas cyclic graphs do.
graph TB;
subgraph Acyclic
a-->b & c;
b-->d;
c-->d & e;
end
subgraph Cyclic
1-->2 & 3;
2-->4;
3-->4 & 5;
4-->2;
5-->1;
endImplementations
Graphs are often implemented in one of two ways.
- A set of nodes/vertices, with a separate map containing the edges for each node (called an “Adjacency List”).
- A node structure where the nodes themselves store a list of pointers to the other nodes they are connected to.
To-do
- Graph
- Trees
- Tries
- Binary Tree
- Red-Black Tree
- Radix-trees
- …
- Trees
Trees
#data-structure#graph#tree#binary-tree
Trees are a special form of DAGs (Directed-Acyclic-Graphs) wherein each node (starting at the first/root) is connected to N other nodes (uniquely). E.g. Here we have a tree, note how vertices on the same level do not connect to each other, but can share an ancestor. graph TD; a-->b & c; b-->d & e & f; c-->g;Implementation Trees much like graphs, are often implemented in one of two ways.