CS/SE 2C03. Sample solutions to the assignment 2. Total of this assignment is 198pts, but 100% = 181pts. There are bonus 17 points. Each assignment is worth 7%. Some solutions below are just sketches. If you think your solution has been marked wrongly, write a short memo stating where marking in wrong and what you think is right, and resubmit to me during class, office hours, or just slip under the door to my office. The deadline for a complaint is 2 weeks after the assignment is marked and returned. 1.[10] Suppose you have the double-link list L = 9,16, 4, 1 and its array implementation (rows: next, key, prev) from page 18 of Lecture Notes 3 (#72 on the top right of page). Consider the second list L1 = 5, 4, 2, 3, 8. a.[7] Put the list L1 in the same array as L. Assume that the first element on the list of free location is the column 1 of the array (see pages 20, 21, 23 of Lecture Notes 3), and place 5 in it. Next place 4,2,3,8 in this order. b.[3] Delete the first element of L and add it to L1. Give all steps. Solutions: List L and stack of free memory free (red): L = 7 (location of the first element of the list ‘L’) free = 1 (location of the first element of the stack ‘free’) 1 2 3 4 5 6 7 8 9 10 11 12 13 4 3 / 6 2 8 5 9 10 11 12 13 / key 4 1 16 9 prev 5 2 7 1 next Lists L and L1 (green), and stack of free memory free (red): L=7 L1 = 1 free = 10 1 1 2 3 4 5 6 7 8 9 10 11 12 13 next 4 3 / 6 2 8 5 9 / 11 12 13 / key 5 4 1 4 16 2 9 3 8 prev / 5 2 1 7 4 1 6 8 After deleting the first element of L L=5 L1 = 1 free = 7 1 2 3 4 5 6 7 8 9 10 11 12 13 next 4 3 / 6 2 8 10 9 / 11 12 13 / key 5 4 1 4 16 2 3 8 prev / 5 2 1 7 4 6 8 and adding it to L1: L=5 L1 = 1 free = 10 1 2 3 4 5 6 7 8 9 10 11 12 13 next 4 3 / 6 2 8 / 9 7 11 12 13 / key 5 4 1 4 16 2 9 3 8 prev / 5 2 1 7 4 9 6 8 2 2[20]. a.[15] Sort the following numbers using the heap sort: 10, 21, 13, 30, 16, 5, 10, 25, 3, 20, 8, 40, 0, 7, 30, 16 Illustrate all the steps. This is easy however labour consuming exercise, but it will give a good idea how INSERT(k) and DELETEMIN work for the heap. b.[5] Repeat (a) but with non-recursive Merge Sort. Solution to (a) [15] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Solution to (b) [5]. 22 3.[10] Sort the below graph topologically. Illustrate all major steps. Sketch of a sample solution: 4.[10] List all the different binary trees with 5 nodes. What is their average height? Trees of height 4: 16 Trees of height 3: 20 Trees of height 2: 6 Average = (4*16+3*20+2*6)/42 = 3.24 23 Consider the weighted directed graph below. It will be used in questions 5, 6, 7, 9. 4 3 h 5 2 a i 3 1 b j 2 7 2 4 3 5 f 4 1 5 3 3 l c 5 e 3 2 d 1 k 4 5.[10] Represent the above graph a.[5] by an adjacency matrix giving arc costs. Assume rows and columns are ordered alphabetically. b.[5] by a linked adjacency list with arc costs indicated. Assume that the list (vector) of vertices and the vertices on all adjacency lists are ordered alphabetically. a.[5] a a b c d 3 e f 4 h i j k l b c D e f h i 2 5 5 3 2 3 2 4 3 1 j k l 4 5 1 7 3 2 1 4 3 5 empty = 24 b.[5] a b 2 h 5 j b d 5 f 3 c b 2 d a 3 c 3 e b 4 f 3 f a 4 d 1 h l 7 i b 3 j c 2 i 1 k e 4 j 5 l e 3 4 l 5 25 e 2 k 1 6.[20] Consider the above graph but without costs. Assume the same order of vertices on adjacency lists as in 5b. a.[10] Construct a depth-first forest; b.[10] Construct a breadth-first forest 26 7.[10] Consider the above graph but without costs. Assume the same order of vertices on adjacency lists as in 5b. Find all strongly connected components. 8.[10] Exercise 5 from page 108 of Kleinberg and Tardos. Solution. By the induction on the number of leaves. For one leaf the number of with two leaves equals zero, and for two leaves this number of nodes with two children is 2. So the basic step is done. Suppose it is true for n leaves. Where can we attach a new node in such a way that the new tree has n+1 leaves? Definitely not to a node which is a leaf in the initial n-leaves tree. If we do this, the former leaf will have a child so it will no longer be a leaf so the new tree will have one node more but the number of leaves remains the same, i.e. n. We cannot attach it to a node with two children (as our three must be binary). Hence, we can only attach it to a node which has one child. Hence adding one leaf more increases the number of nodes with 2 children also by one. So we are done. Induction by the total number of nodes also works. 27 9.[20] Use the Dijkstra’s algorithm to find the shortest paths from a to the other vertices. Also construct the P array (recovering the paths) step by step. Recover all paths. Assume the list of adjacent vertices implementation and with alphabetic ordering of each list. Use heap to implement the set V– S. Show all steps. 28 10.[20] In the graph above replace arrows by lines, i.e. translate it into a graph which is not directed. Assume ordering as in 5.b. a.[8] Find a minimum-cost spanning tree by Prim’s algorithm. b.[10] Find a minimum-cost spanning tree by Kruskal’s algorithm. c.[1] Forget about weights and find a depth-first spanning tree starting at a. d.[1] Forget about weights and find a breadth-first spanning tree starting at a. Give all steps. A bonus of [7] for showing heap representation of V-S in the solution to (a). A bonus of [10] for showing heap representation of union-find representation of connected components in the solution to (b). (c) is just 6(a) and (d) is just 6(b). Points are for observing this fact. 29 Solution to (a) (Prim’s): 30 Solution to (b) (Kruskal’s): 31 32 33 11.[20] Exercise 6 from page 108 of Kleinberg and Tardos. Note that if a graph G is a tree, i.e. connected and acyclic graph, then TBFS = TDFS=G, where TBFS is Breadth-First Search tree of G and TDFS is Depth-First Search tree of G, and this is true for any starting point and any particular run of each algorithm. Hence if suffices to prove that if G is not a tree, i.e. if it contains a cycle, then there exist TBFS and TDFS that are not identical. Because of the ‘there exist’ statement, we have a choice of both a starting point and a particular run of the algorithm. Let a1, a2, …, ak, where ak=a1 is the shortest cycle of G. Such cycle may not be unique but always exists if G is not acyclic. Since this is a shortest cycle, if (ai,aj) is an edge of G then j=i+1 or i=k and j=1. Assume that a starting vertex u=a1. Then edges (a1,a2) and (a1,ak-1) (since a1=ak) belong to any TBFS that starts from u=a1. One possible TDFS is the one that initially add edges (a1,a2), (a2,a3), … , (ak-2,ak-1) to itself. But since no tree contains a cycle, the edge (a1,ak-1) does not belong to it. Hence this TDFS differs from any TBFS that starts from u=a1. 12.[5] Exercise 1 from page 188 of Kleinberg and Tardos. True. Kruskal’s algorithm picks c* in its first step. 13.[16] a.[8] Exercise 2 from page 188 of Kleinberg and Tardos. Yes. If a<b then a2 < b2. Hence the total order of edges for the first case is exactly the same as for the second. This means that the version Kruskal’s algorithm that 34 starts with sorting of edges, behaves identically for both cases, i.e. the same edges are taken. b.[8] No. We know that (a+b)2 = a2 + 2ab +b2 > a2 + b2 . Hence it may happen that a+b>c, but a2 + b2 < c2. For example 2+3=5>4, but 22+32=13< 16 = 42. Consider a weighted directed graph G=(V,E) where V={a,b,c}, E={(a,2,b),(b,3,c),(a,4,c)}. Then the shortest path from a to c is just (a,c) and the distance is 4 (the distance (a,b),(b,c) is 5). Consider graph G(2)=(V,E) where V={a,b,c}, E={(a,4,b),(b,9,c),(a,16,c)}. Now the shortest path form a to c is (a,b),(b,c) and the distance is 13 (the distance (a,c) is 16). 35
© Copyright 2024