$30.00

## Description

Question 1. (20 marks)

Let p_{2}, . . . , p_{n} be real numbers in [0, 1], to be specified later. Consider the following randomized algorithm:

1 x = 1

2 for i = 2 to n

3 With probability p_{i} , x = i; otherwise x is unchanged.

4 return x

a. Consider the value of x returned by the above procedure. Compute Pr[x = i] for each 1 ≤ i ≤ n, under the assumption that p_{2 } = p_{3 } = . . . = p_{n} = 1/2. Give a precise mathematical derivation of these probabilities.

b. Give values for p_{2}, . . . , p_{n } so that for any 1 ≤ i ≤ n, Pr[x = i] = 1/n, i.e. x is a uniform sample from 1, . . . , n. Prove that, with the values of p_{2}, . . . , p_{n} that you give, the probability of x = i is 1/n, as required.

Question 2. (20 marks) Assume you have a biased coin, which, when flipped, falls on Heads with probability p, and on Tails with probability 1 − p. However, you do not know p. How can you use the coin

to simulate an unbiased coin? Formally, you have access to a procedure FlipBiasedCoin(), which returns either 1 or 0 at random. FlipBiasedCoin() returns 1 with probability p, and 0 with probability 1 − p, but

you do not know p. Design an algorithm that, without making any other random choices except calling FlipBiasedCoin(), returns 1 with probability 1/2 and 0 with probability 1/2. Your algorithm should not use p. You can assume that each time you call FlipBiasedCoin(), the value it returns is independent of all other calls to it.

a. Describe the algorithm in clear and concise English, and prove that it outputs 0 with probability 1/2 and 1 with probability 1/2.

b. Analyze the expected running time of your algorithm. Note that while the algorithm itself does not use p, the expected running time should be expressed in terms of p.

Question 3. (20 marks)

Let V = {1, . . . , n}. We are given as input a sequence of edges e_{1}, . . . , e_{m} , where for each 1 ≤ i ≤ m, e_{i} = (j, k) for some j, k ∈ V , j = k. For each 0 ≤ i ≤ m, define the undirected graph G_{i} = (V, E_{i} ) where E_{0 } = ∅, and for i ≥ 1, E_{i} = {e_{1} , . . . , e_{i} }. Design an algorithm that outputs an array C [0 . . m], with

C [i] equal to the number of nodes of the largest connected component of G_{i } (note that C [0] = 1). Your algorithm should run in time O(n + m log^{∗}(n)).

Describe the algorithm in clear and concise English. Explain why it is correct and why it runs in the required time complexity.