This is an old revision of the document!
Table of Contents
Chapter 3
Chapter 3.1 Definitions and Applications for graphs
A graph is a structure that represents relationships between two elements. They consists of nodes or vertices V and edges E which join the nodes to one another. An edge can be represented as a two-element subset of V: e = {u,v} where u and v are nodes at either end of e. The edges of some graphs have an order, meaning that the relationship moves in one direction but not the other. The edges in such a graph are represented by and ordered pair (u,v) where u is the head and v is the tail.
Graphs serve as important models for lots of different types of networks. Some examples from the book are listed below:
- Transportation networks with airports as nodes and non-stop flights as edges
- Lan networks with computers as nodes and physical links as edges
- Networks with all the machines using one ISP as nodes and ISPs with peering relationships as edges
- The internet, with webpages as nodes and hyperlinks as edges
- Social networks with people as nodes and relationships between them as edges
Essential to the concept of graphs is the idea of paths and connectivity. A path is a sequence of connected nodes from one vertex to another. A cycle is a special case of a path that occurs when the path begins and ends at the same vertex. An undirected graph is connected if there is a path from every vertex u to v. A directed graph is strongly connected if for every node u and v there is an edge (u,v) and an edge (v,u). The distance of a path is the number of edges in the path. A tree is a special case of a graph that occurs when the undirected graph is connected and there are no cycles. Since there are no cycles in a tree, it is a good way to represent a hierarchy. Additionally, since there are no cycles, each vertex is only connected to its parent and therefore in a tree with n nodes, there are n-1 edges.
This chapter was a breeze to read since it was mostly just term definitions and little uppper-level conceptual analysis.
Section 3.2 Graph Connectivity and Traversal
Breadth-First Search is a method of search through a graph to assemble the connected component. It does this by adding a “layer,” or the set of nodes connected to the root node s, and then recursively calling itself on each node in the layer. A few interesting properties of the breadth-first search and its resultant tree are that for any nodes x and y in layers Li and Lj joined by an edge (x,y), i and j can differ by at most 1. Additionally, the nodes returned by a BFS started at node n are precisely those in the connected component of the graph containing n.
The Depth-First Search is another method for finding all the nodes reachable from the starting node. Instead of visiting all the nodes layer by layer, however, this algorithm follows edges to unexplored nodes along one path until it reaches a dead end, at which point it will backtrack through all of its explored nodes until it finds one with an edge to an unexplored node. Now it will take that advance along the unexplored nodes in that direction until it again reaches a dead end and has to repeat the process. The algorithm will continue this until all the nodes are visited. As opposed to a Breadth-First Search where all the nodes connected by an edge must be no more than one layer apart, the Depth-First search can create trees with whose nodes are separated by more than one edge, but one of these must be a descendant of the other.
Qualitatively, these two algorithms will have roughly the same running times and efficiency since they will both be traversing the same number of nodes and edges. This is due to the fact that for two nodes in a graph, their connected components are either completely identical or disjoint (KT p. 86).
I found this chapter easily readable although a few of the proofs took a few minutes of digestion to fully comprehend.
