Practice Exam Algorithms and Programming For High Schoolers (Addiscoder)
Practice Exam Algorithms and Programming For High Schoolers (Addiscoder)
>>> x = 5
>>> y = 7
>>> z = 2
>>> x * y + z
>>> (x * y) + z
>>> x * (y + z)
>>> x % y
>>> y % x
>>> [] * z
1
>>> [] * ‘2’
>>> [1] * z + x
>>> str(2)
>>> [[]][0]
>>> [[]][1]
>>> len([[[]]])
>>> [[]][]
>>> x = [2, 3]
>>> y = []
>>> y += [i*2]
>>> y
2
>>> if i*i >= x: break
>>> isPrime(1)
>>> isPrime(2)
>>> isPrime(9)
>>> isPrime(12)
Question 2: Consider the lists [], [[]], [[[]]], . . . The depth of such
a list is the number of nested layers of brackets. So, depth([]) is 0,
depth([[]]) is 1, depth([[[]]]) is 2, etc. Write a function depth(L)
which takes such a list and computes its depth. What’s the running time
of your function in terms of n, the number of brackets in the list?
def isPrime(n):
if n < 2: return False
for i in xrange(2, n):
if n % i == 0: return False
return True
What is the running time of this code as written? Is it correct? If it’s not
correct, suggest a minor change to the code which would make it correct.
3
Question 4: Write a function cubeRoot(n) which takes a positive integer
n and outputs the largest integer x such that x3 ≤ n.
The running times above are assuming you can do arithmetic on integers
up to n in O(1) time.
Question 7: Given a directed graph where each edge has a length, describe
an algorithm that takes as input two vertices u, v and an integer k ≥ 0 and
outputs the length of the shortest path from u to v which takes exactly k
steps. The path is allowed to visit vertices multiple times (for example, the
path 1 → 3 → 2 → 3 → 7 is a valid path from 1 to 7 of length 4, even though
it visits vertex 3 twice). What is the running time of your algorithm? You
do not have to write the code for it.
4
Question 8: In class I described Karatsuba’s algorithm for multiplying
two n-digit numbers, which recursively multiplied three pairs of n/2-digit
numbers then combined the results in O(n) time to get an overall running
time of Θ(nlog2 3 ).
Suppose that there existed an algorithm for multiplying two n-digit num-
bers which recursively multiplied two pairs of n/2-digit numbers then com-
bined the results in O(n) time. What would the running time then be?