Understanding Graphs: Definitions, Types, and Searching Algorithms
A graph is a key data structure consisting of a finite set of vertices (nodes) and edges which connect them, representing relationships. Graphs can be directed (edges have direction) or undirected (edges do not). Terminology includes adjacent nodes, paths, and complete graphs. Implementation strategies involve adjacency matrices and lists. This guide also covers important searching algorithms like Depth-First Search (DFS) and Breadth-First Search (BFS), essential for finding paths in graphs efficiently. Explore different graph types and their functionality in this concise overview.
Understanding Graphs: Definitions, Types, and Searching Algorithms
E N D
Presentation Transcript
2620001Data Structures Graph Data Structure
What is a graph? • A data structure that consists of a set of nodes (vertices) and a set of edges that relate the nodes to each other • The set of edges describes relationships among the vertices
Formal definition of graphs • A graph G is defined as follows: G=(V,E) V(G): a finite, nonempty set of vertices E(G): a set of edges (pairs of vertices)
Directed vs. undirected graphs • When the edges in a graph have no direction, the graph is called undirected
Directed vs. undirected graphs (cont.) • When the edges in a graph have a direction, the graph is called directed (or digraph) Warning: if the graph is directed, the order of the vertices in each edge is important !! E(Graph2) = {(1,3) (3,1) (5,9) (9,11) (5,7) (11,1) (9,9)}
Trees vs graphs • Trees are special cases of graphs!!
Graph terminology • Adjacent nodes: two nodes are adjacent if they are connected by an edge • Path: a sequence of vertices that connect two nodes in a graph • Complete graph: a graph in which every vertex is directly connected to every other vertex 5 is adjacent to 7 7 is adjacent from 5
Graph terminology (cont.) • What is the number of edges in a complete directed graph with N vertices? N * (N-1)
Graph terminology (cont.) • What is the number of edges in a complete undirected graph with N vertices? N * (N-1) / 2
Graph terminology (cont.) • Weighted graph: a graph in which each edge carries a value
Graph implementation • Array-based implementation • A 1D array is used to represent the vertices • A 2D array (adjacency matrix) is used to represent the edges
Graph implementation (cont.) • Linked-list implementation • A 1D array is used to represent the vertices • A list is used for each vertex v which contains the vertices which are adjacent from v (adjacency list)
Graph searching • Problem: find a path between two nodes of the graph (e.g., Austin and Washington) • Methods: Depth-First-Search (DFS) or Breadth-First-Search (BFS)
Depth-First-Search (DFS) • What is the idea behind DFS? • Travel as far as you can down a path • Back up as little as possible when you reach a "dead end" (i.e., next vertex has been "marked" or there is no next vertex) • DFS can be implemented efficiently using a stack
Use of a stack • It is very common to use a stack to keep track of: • nodes to be visited next, or • nodes that we have already visited. • Typically, use of a stack leads to a depth-first visit order. • Depth-first visit order is “aggressive” in the sense that it examines complete paths.
Graph Traversals • Both take time: O(V+E)
start end (initialization)
(BFS) • What is the idea behind BFS? • Look at all possible paths at the same depth before you go at a deeper level • Back Breadth-First-Searching up as far as possible when you reach a "dead end" (i.e., next vertex has been "marked" or there is no next vertex) • BFS can be implemented efficiently using a Queue
Use of a queue • It is very common to use a queue to keep track of: • nodes to be visited next, or • nodes that we have already visited. • Typically, use of a queue leads to a breadth-first visit order. • Breadth-first visit order is “cautious” in the sense that it examines every path of length i before going on to paths of length i+1.
start end (initialization)
Breadth First Search 2 4 8 s 5 7 3 6 9
Breadth First Search Shortest pathfrom s 1 2 2 4 8 0 s 5 7 3 6 9 Undiscovered Queue: s Discovered Top of queue Finished
Breadth First Search 1 2 4 8 0 s 5 7 3 3 6 9 1 Undiscovered Queue: s 2 Discovered Top of queue Finished
Breadth First Search 1 2 4 8 0 5 s 5 7 1 3 6 9 1 Undiscovered Queue: s 2 3 Discovered Top of queue Finished
Breadth First Search 1 2 4 8 0 s 5 7 1 3 6 9 1 Undiscovered Queue: 2 3 5 Discovered Top of queue Finished
Breadth First Search 1 2 2 4 4 8 0 s 5 7 1 3 6 9 1 Undiscovered Queue: 2 3 5 Discovered Top of queue Finished
Breadth First Search 1 2 2 4 8 5 already discovered:don't enqueue 0 s 5 7 1 3 6 9 1 Undiscovered Queue: 2 3 5 4 Discovered Top of queue Finished
Breadth First Search 1 2 2 4 8 0 s 5 7 1 3 6 9 1 Undiscovered Queue: 2 3 5 4 Discovered Top of queue Finished
Breadth First Search 1 2 2 4 8 0 s 5 7 1 3 6 9 1 Undiscovered Queue: 3 5 4 Discovered Top of queue Finished
Breadth First Search 1 2 2 4 8 0 s 5 7 1 3 6 6 9 1 2 Undiscovered Queue: 3 5 4 Discovered Top of queue Finished
Breadth First Search 1 2 2 4 8 0 s 5 7 1 3 6 9 1 2 Undiscovered Queue: 3 5 4 6 Discovered Top of queue Finished
Breadth First Search 1 2 2 4 8 0 s 5 7 1 3 6 9 1 2 Undiscovered Queue: 5 4 6 Discovered Top of queue Finished
Breadth First Search 1 2 2 4 8 0 s 5 7 1 3 6 9 1 2 Undiscovered Queue: 5 4 6 Discovered Top of queue Finished
Breadth First Search 1 2 2 4 8 0 s 5 7 1 3 6 9 1 2 Undiscovered Queue: 4 6 Discovered Top of queue Finished
Breadth First Search 1 2 3 2 4 8 8 0 s 5 7 1 3 6 9 1 2 Undiscovered Queue: 4 6 Discovered Top of queue Finished
Breadth First Search 1 2 3 2 4 8 0 s 5 7 1 3 6 9 1 2 Undiscovered Queue: 4 6 8 Discovered Top of queue Finished
Breadth First Search 1 2 3 2 4 8 0 7 s 5 7 1 3 3 6 9 1 2 Undiscovered Queue: 6 8 Discovered Top of queue Finished
Breadth First Search 1 2 3 2 4 8 0 s 5 7 1 3 3 6 9 9 3 1 2 Undiscovered Queue: 6 8 7 Discovered Top of queue Finished
Breadth First Search 1 2 3 2 4 8 0 s 5 7 1 3 3 6 9 3 1 2 Undiscovered Queue: 6 8 7 9 Discovered Top of queue Finished
Breadth First Search 1 2 3 2 4 8 0 s 5 7 1 3 3 6 9 3 1 2 Undiscovered Queue: 8 7 9 Discovered Top of queue Finished
Breadth First Search 1 2 3 2 4 8 0 s 5 7 1 3 3 6 9 3 1 2 Undiscovered Queue: 7 9 Discovered Top of queue Finished
Breadth First Search 1 2 3 2 4 8 0 s 5 7 1 3 3 6 9 3 1 2 Undiscovered Queue: 7 9 Discovered Top of queue Finished