## Description

You must put your assignment in a 9”x12” envelope labeled with your name, course number, and CS2210 student list-number (you can get this number from OWL’s Gradebook) and drop it in the CS2210 locker located on the third ﬂoor of the Middlesex College Building, beside room MC300, by the due date. Please do not use a small envelope and do not submit loose pages.

For questions 1 and 3 proceed as follows:

1. First explain what needs to be proven: “We need to ﬁnd constants c > 0 and n0 ≥ 1 integer such that …”. 2. For question 3 use the deﬁnition of “big Oh” to explain what it means for f(n) to be O(g(n)) and for g(n) to be O(h(n)).

3. Simplify the above inequalities. 4. Determine the values for c and n0.

For question 2, if you use a proof by contradiction:

• First give the claim that you will assume false and from which you will derive a contradiction.

• Perform steps 1 and 3 as above

• Derive a contradiction.

1. (3 marks) Use the deﬁnition of “big Oh” to prove that 4/n is O(1).

2. (3 marks) Use the deﬁnition of “big Oh” to prove that 2n is not O(1/n).

3. (3 marks) Let f(n), g(n), and h(n) be non-negative functions such that f(n) is O(g(n)) and g(n) is O(h(n)). Use the deﬁnition of “big Oh” to prove that f(n) + g(n) is O(h(n)).

4. Let A be an array storing n integer values. The goal is to design an algorithm that returns true if every value stored in A is diﬀerent, and it returns false if there is at least one value that appears at least twice in A. For example, for the following array A the algorithm must return true as all values are diﬀerent; however for array B it must return false as the values 3 and 4 appear twice.

3 6 1 7 2 4 5 0 1 2 3 4 5 6 A

2 3 1 4 4 3 0 1 2 3 4 5 B

• (4 marks) Write pseudocode for an algorithm as described above. • Prove that your algorithm is correct: (a) (1 mark) Show that the algorithm terminates. (b) (2 marks) Show that the algorithm always produces the correct answer. • (1 mark) Explain what the worst case for the algorithm is.

1

• (3 marks) Compute the time complexity of the algorithm in the worst case. You must give the order of the time complexity using “big-Oh” notation and you must explain how you computed the time complexity.

5. (2 marks) Optional question. Download from the course’s website: http://www.csd.uwo.ca/Courses/CS2210a/ the java class Search.java, which contains implementations of 3 diﬀerent algorithms for solving the search problem:

• LinearSearch, of time complexity O(n). • QuadraticSeach, of time complexity O(n2). • FactorialSearch, of time complexity O(n!).

Modify the main method so that it prints the worst case running times of the above algorithms for the following input sizes:

• FactorialSearch, for input sizes n = 5,8,9,10,11. If you dare, run the algorithm for n = 12. • QuadraticSeach, for input sizes n = 5,10,100,1000,2000. • LinearSearch for, input sizes n = 5,10,100,1000,2000,10000.

Print a table indicating the running times of the algorithms for the above input sizes. You do not need to include your code for the Search class.