Search Strategies CMPT 420 / CMPG 720
Uninformed Search Strategies Uninformed search strategies use only the information available in the problem definition Depth-first search Iterative deepening search
Breadth-first search Expand shallowest unexpanded node
Breadth-first search Expand shallowest unexpanded node
Breadth-first search Expand shallowest unexpanded node
Breadth-first search Examine siblings before children
Breadth-first search Implementation: Frontier is a FIFO queue, i.e., new successors go at end
Example: Romania
Graph Representation Adjacency list representation of G = (V, E) An array of V lists, one for each vertex in V Each list Adj[u] contains all the vertices v such that there is an edge between u and v Adj[u] contains the vertices adjacent to u (in arbitrary order) Can be used for both directed and undirected graphs 1 2 5 / 1 2 5 4 3 2 1 5 3 4 / 3 2 4 4 2 5 3 / 5 Undirected graph 4 1 2
Graph Representation Adjacency matrix representation of G = (V, E) Assume vertices are numbered 1, 2, … V The representation consists of a matrix A V x V : aij = 1 if (i, j) E 0 otherwise 1 2 3 4 5 For undirected graphs matrix A is symmetric: aij = aji A = AT 1 1 1 2 5 4 3 2 1 3 1 4 1 Undirected graph 5 1
Breadth-first search Is BFS guaranteed to find a solution if one exists?
Breadth-first search Is BFS guaranteed to find a solution if one exists? Problem?
Breadth-first search Guaranteed to find a solution if one exists Problem: it might take a very long time to find a solution! note how much of tree is expanded that doesn't contribute towards goal
Properties of breadth-first search Complete? Yes Optimal? Time? Space?
Properties of breadth-first search Complete? Yes Optimal? Yes (if cost = 1 per step) Time? Space?
Properties of breadth-first search Complete? Yes Optimal? Yes (if cost = 1 per step) Time? 1+b+b2+b3+… +bd = O(bd) exponential in d Space?
Properties of breadth-first search Complete? Yes Optimal? Yes (if cost = 1 per step) Time? 1+b+b2+b3+… +bd = O(bd) exponential in d Space? O(bd) (O(bd-1) nodes in the explored set and O(bd) nodes in the frontier)
Uniform-cost search Expand the node with the lowest path cost g(n) Implementation:
Uniform-cost search Expand the node with the lowest path cost g(n) Implementation: Frontier = priority queue ordered by path cost g(n)
Example: Romania
Properties of uniform-cost search Equivalent to breadth-first if step costs all equal Complete? Yes Optimal? Yes – nodes expanded in increasing order of path cost Time? O(bd) Space?
Depth-first search Expand deepest unexpanded node
Depth-first search Expand deepest unexpanded node
Depth-first search Examine children before siblings
Depth-first search Examine children before siblings
Depth-first search Examine children before siblings
Depth-first search Examine children before siblings
Depth-first search Examine children before siblings
Depth-first search Examine children before siblings
Depth-first search Examine children before siblings
Depth-first search Examine children before siblings
Depth-first search Examine children before siblings
Depth-first search Implementation: Frontier = LIFO queue
Depth-first search Example
More efficient (in some cases) than breadth-first search Problem: what if some branch is very long: can spend a lot of time searching useless cases
Properties of depth-first search Complete? Yes (if every branch has finite number of states) Optimal? No
Properties of depth-first search Complete? Yes (if every branch has finite number of states) Optimal? No Time? O(bm): terrible if m is much larger than d but if solutions are dense, may be much faster than breadth-first
Comparing Uninformed Search Strategies Time and space complexity are measured in b – maximum branching factor of the search tree m – maximum depth of the state space d – depth of the least cost solution
Properties of depth-first search Complete? Yes (if every branch has finite number of states) Optimal? No Time? O(bm): terrible if m is much larger than d but if solutions are dense, may be much faster than breadth-first Space? O(bm), i.e., linear space!
Depth-limited search Depth-first search with depth limit l, i.e., nodes at depth l have no successors 20 cities in map of Romania l =19 Any city can be reached from any other city in at most 9 steps. Diameter gives a better depth limit.
Properties of Depth-limited search Complete? Yes (if the goal is within the limit) Optimal? No Time? O(bl) Space?
Properties of Depth-limited search Depth-first search can be viewed as a special case with l = infinity Main advantage that the search process can't descend forever (in a branch without solution). However, it will not find a solution if all solutions require a depth greater than the limit. (This is likely when l is unknown.)
How to overcome this and maintain the advantages of depth limited search?
Iterative deepening search Gradually increases the limit – 0, 1, 2, … If don't find solution, increase depth and try again Combines the benefits of depth-first and breadth-first search.
Iterative deepening search l =0
Iterative deepening search l =1
Iterative deepening search l =2
Iterative deepening search l =3
Properties of iterative deepening search Complete? Yes Optimal? Yes, if step cost = 1 Space? O(bd), linear space Time? d b1 + (d-1)b2 + … + (1)bd = O(bd)
Time consuming?? Can show this doesn't really increase the number of examined nodes by much over depth-first search: For large graphs, "most" of the nodes are at the outermost edge
If branching factor is b, then there are b2 nodes in the 2nd layer, b3 in the 3rd, bn in the nth Thus number of nodes at depth d is 1 + b + b2 + b3 + ... + bd If d =4, b =10, get 1 + 10 + 102 + 103 + 104 = 11,111 nodes For iterative deepening, need to consider some nodes more than once: b(d) + b2(d - 1) + b3(d - 2) + ... + bd d = 4, b = 10 gives 1*(4 + 1) + 10 * 4 + 102 * 3 + 103 * 2 + 104 = 12,345 visitations: a 10% increase in general, if branching factor is 10, visit nodes 11% more often by iterative deepening
Properties of iterative deepening search Combines the benefits of depth-first search Memory space O(bd) linear! breadth-first search Always complete and optimal
Bi-Directional Search Start the process simultaneously from the initial start and backwards from the goal state whether the frontiers of the two intersect To reduce the complexity bd/2 + bd/2 < bd