CS 141 Mid-Term 2002

 

Question 2

(a)    True

(b)   True

(c)    True

(d)   False

(e)    True

(f)     False

(g)    True

(h)    False

(i)      True

 

 

 

Question 4:

(A)   Oval: N = 8

:

 


r - children

 

Oval: N = 2

Oval: N = 2

Oval: N = 2

Oval: N = 2

Oval: N = 2

Oval: N = 2

Oval: N = 4

Oval: N = 4

Oval: N = 4

Oval: N = 4

                                                              ….    

 


Each node has r -children

 

 

                                              …..                                             ….

 

 

 

(B)   The depth of the tree D(n) will be k-1 if n = 2^k. The other way of saying it will be that the depth of the tree will be lg(n) - 1. We can prove this by induction on k.

 

1. Base Case : For k = 1, the function call will terminate at the first stage itself (because n=2) and the depth of the tree will be zero.

D(n) = k-1 = 0

2. Induction hypothesis : Let the depth of the tree be k-1 for n = 2^k.

 In other words:

D(n) = k-1 for n = 2^k …….(I)

 

3. To Prove D(n ) = k  for n = 2^(k+1)

 

            Observe that the call Stupid(2^(k+1)) will generate r children, each a call to Stupid(2^(k+1)/2) which is same as Stupid(2^k). Therefore the depth of the tree will be one more than the depth of the tree generated by Stupid(2^k). In other words:

 

D(2^(k+1)) = 1+ D(2^k) ……..(II).

Now putting the value of D(2^k) from (I) in (II) we have

D(2^(k+1)) = 1+(k-1) = k . Hence proved.

 

 

 (C). Each non-leaf function Stupid() creates r children. The number of procedure calls at depth 1 are r. At level 2, the number of function calls are r*r ( because each of the r nodes has r children. ) This continues till we reach the depth of the tree.

Thus, the total number of function calls C(n) is

C(n) = 1+r+r^2+r^3+…..+r^(k-1) where n = 2^k.

Optional : The above is a geometric series which can be summed up. The Summations is

 

C(n) = (r^k – 1)/(r-1).

 

(D). Observe that each function takes constant time, say c, to execute. ( It prints Cool!). As we saw above , the total number of function calls are O(r^k). Hence the time complexity is O(c*r^k) = O(r^lg(n)) because k = lg(n).

Optional : Given the relationship between k and n, r^k can be shown to be equal to n^lg(r). Hence the time complexity is O(n^lg(r))

 

Question 5 :

(a)    f(n) = O(g(n)) if $ c>0 and N0 such that 0<f(n) <= c.g(n) "n>N0. We assume that the statement is true and we shall try to find c and N0.

Taking f(n) = 2^(n+1) and g(n) = 2^n we will have

 

 2^(n+1) <= c.2^n   

(dividing both sides by 2^n gives us)

 

 

ð     2<=c.

 

 Hence if we take c = 3 and N0 = 1This inequality is satisfied for all n >= N0

Hence the above statement is true.

 

 

(b). Again assuming that the statement is true , than we will have

 

2^2n <= c.2^n   

dividing both sides by 2^n gives us :

 

ð     2^n <= c  ( We are using the fact that 2^2n = (2^n)*(2^n).

 

Taking any constant c, we can always find an n such that 2^n >c. Hence it is not possible to find a pair c and N0 for which above inequality is satisfied for all n >= N0. Hence the above assumption is not true.

 

 

Question 6 :

 

Let G = (V,E) be the graph and u be any node and (u,v) be the minimum weight edge with weight w(u,v) going out of u. We claim that (u,v) belongs to every minimums spanning tree.

Let us assume that there is a Minimum Spanning Tree T which does not have (u,v). As T is a spanning tree, there is a unique simple path between any two nodes. In particular, there is a simple path, say ( u,v1,v2,v3,….vk,v) between u and v. Let us add the edge (u,v) to this path. This will create a simple cycle which can be removed by removing edge (u,v1). Thus the resulting tree will also be the spanning tree, say T’. Let the weight of T and T’ be w(T) and w(T’) respectively and weight opf (u,v1) be w(u,v1)

 

Then we have

w(T) = w(T’)+w(u,v)-w(u,v1)

 

As w(u,v) < w(u,v1), we have w(T’) < w( T).  This contradicts the original hypothesis that T is an MST. Hence the edge (u,v) belongs to every minimum spanning tree.