Data Structures and Algorithms Data Structures and Algorithms (CS210/ESO207/ESO211) Lecture 12 Application of Stack and Queues Application of Stack and Queues Shortest route in a grid with obstacles 8 queen’s problem Lecture 12 Application of Stack and Queues Application of Stack and Queues Shortest route in a grid with obstacles 8 queen’s problem 1
Problem 1 Shortest route in a grid with obstacles 2
Shortest route in a grid From a cell in the grid, we can move to any of its neighboring cell in one step. From top left corner, find shortest route to each cell avoiding obstacles. 3 3 The input grid is given as a Boolean matrix G such that G[i,j] = 0 if (i,j) is an obstacle, and 1 otherwise.
Step 1: Realizing the nontriviality of the problem 4
5 Shortest route in a grid nontriviality of the problem Definition: Distance of a cell c from another cell c’ is the length (number of steps) of the shortest route between c and c’. We shall design algorithm for computing distance of each cell from the start-cell. As an exercise, you should extend it to a data structure for retrieving shortest route.
Get inspiration from nature 6 Did you ever notice the way ripples on the surface of water travel in the presence of obstacles ? The ripples travels along the shortest route ?
Shortest route in a grid nontriviality of the problem 7 Create a ripple at the start cell and trace the path it takes to How to find the shortest route to in the grid ?
Shortest route in a grid propagation of a ripple from the start cell 8
Shortest route in a grid ripple reaches cells at distance 1 after step 1 9
Shortest route in a grid ripple reaches cells at distance 2 after step 2 10
Shortest route in a grid ripple reaches cells at distance 3 after step 3 11
Shortest route in a grid ripple reaches cells at distance 8 after step 8 12 Watch the next few slides carefully.
Shortest route in a grid ripple reaches cells at distance 9 after step 9 13
Shortest route in a grid ripple reaches cells at distance 10 after step 10 14
Shortest route in a grid ripple reaches cells at distance 11 after step 11 15
Shortest route in a grid ripple reaches cells at distance 12 after step 12 16
Shortest route in a grid ripple reaches cells at distance 13 after step 13 17
Shortest route in a grid ripple reaches cells at distance 14 after step 14 18
Shortest route in a grid ripple reaches cells at distance 15 after step 15 19
Step 2: Designing algorithm for distances in grid (using an insight into propagation of ripple) 20
Shortest route in a grid A snapshot of ripple after i steps 21
Shortest route in a grid A snapshot of the ripple after i+1 steps 22
23 ∞
24
The first (not so elegant) algorithm (to compute distance to all cells in the grid) 25
How to transform the algorithm to an elegant algorithm ? Key points we have observed: We can compute cells at distance i+1 if we know all cells up to distance i. Therefore, we need a mechanism to enumerate the cells of the grid in non-decreasing order of distances from the start cell. 26 How to design such a mechanism ?
Keep a queue Q 27 Q
An elegant algorithm (to compute distance to all cells in the grid) 28 Not IsEmptyQueue(Q) Distance(c) +1 Enqueue(b, Q);
Proof of correctness of algorithm Question: What is to be proved ? Answer: At the end of the algorithm, Distance[c]= the distance of cell c from the starting cell in the grid. Question: How to prove ? Answer: By the principle of mathematical induction on the distance from the starting cell. Inductive assertion: P(i): The algorithm correctly computes distance to all vertices at distance i from the starting cell. As an exercise, try to prove P(i) by induction on i. 29
Problem 2 Placing 8 queens safely on a chess board 30 It was explained on the black board. However, for a better understanding, the slides are also provided here.
8 queen problem Find a way to place 8 queens on a chess board so that no two of them attack each other. 31
First some notations and definitions are provided in order to have a better insight into the problem. to describe the idea underlying the algorithm compactly. to describe the algorithm in a formal manner. 32
A Configuration of 8 queens on chess board where each row has exactly one queen 33 Q Q Q Q Q Q Q Q
Configuration of 8 queens on chess board where each row has exactly one queen 34 <1,1,3,4,6,4,8,7><1,1,3,4,6,4,8,7> Most significant digit Least significant digit
To compute a safe configuration of 8 queens 35
A clever approach to search for safe configuration An overview Place queen of the 1 st row in 1 st column. It is unsafe to place second queen at 1 st column or 2 nd column of 2 nd row. No need to generate configurations or. So we proceed with. All configurations with are unsafe for k<5. No need to generate these unsafe configurations. So we proceed with. … and so on … Q Q Q
A clever approach to search for safe configuration An overview of general step safe Because we are enumerating configurations in lexicographic order
Implementation of the clever approach An important terminology: Given a partial configuration of i queens placed on first i rows of the chess, A queen is said to be safe if it is not attacked by any other queen lying in any row below it. A queen is said to be unsafe if it is attacked by at least one queen lying in any row below it. A queen is uncertain if it is not known yet whether it is safe or unsafe. Representation of a partial configuration: Each queen in a partial configuration will be specified by a triplet, where r and c are the row and column of the cell where the queen is placed. Flag is a variable which takes one of the values from {safe, unsafe, uncertain } as explained above. 38
Implementation of the clever approach A snapshot of the algorithm 39
Implementation of the clever approach A snapshot of the algorithm 40 safe safe/ Unsafe/ uncertain stack S For queens
A single step of the algorithm 41 We determine if it is attacked by any existing queen and change its status as safe or unsafe accordingly, and push it back into stack.
Finally, The following slide has a simple and elegant implementation of the clever approach we discussed… 42
An elegant algorithm for 8 queens problem CreateEmptyStack(S); Push((1,1,safe), S); While (Not IsEmptyStack(S)) do { (r,c,flag) Top(S); Pop(S); 3 Cases: { Flag is uncertain : If ((r,c) does not attack any existing queen ) Push((r,c,safe), S); else Push((r,c,unsafe), S); Flag is safe : If (r = 8) { // we reached a safe configuration of 8 queens print the solution and empty the stack S; } else { Push((r,c,safe), S); Push((r+1,1,uncertain), S)}; Flag is unsafe : If (c = 8) { (r’,c’,flag’) Top(S); Pop(S); Push((r’,c’,unsafe), S); } else Push((r,c+1, uncertain), S); } 43
Homework exercises 1.Now that you know the clever algorithm, give reason for pursuing lexicographic approach in the search of a safe configuration by it. 2.Extend the algorithm for computing a safe configuration for n queens on n by n chess board for any n. 3.The current algorithm finds just one safe configuration. Modify it to enumerate all safe configurations. 4.If you love programming, implement the clever algorithm and trivial algorithm and see if the clever algorithm is indeed mush faster than the trivial algorithm. 5.We have given an iterative implementation of the clever algorithm. Can you design a recursive implementation as well ? Which of them will be faster in practical implementation, and why ? 44