Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- ;; 1.14
- ;; claim: The time complexity of cc(n, d) is O(n ^ d) where n is the amount and d
- ;; is the number of denominations.
- ;; Here is a proof sketch that goes by induction on d.
- ;; Write n = q * d + r with 0 <= r < d.
- ;; Keep applying the recursive definition of cc(x, d) = cc(x, d - 1) + cc(x - d, d)
- ;; to rewrite cc(n, d) as a sum of terms involving only d - 1 as follows:
- ;; cc(n, d) = cc(n, d - 1) + cc(n - d, d)
- ;; = cc(n, d - 1) + cc(n - d, d - 1) + cc(n - 2 * d, d)
- ;; = ...
- ;; = cc(n, d - 1) + ... + cc(n - (q - 1) * d, d - 1) + cc(n - q * d, d)
- ;; = cc(n, d - 1) + ... + cc(n - (q - 1) * d, d - 1) + cc(n - q * d, d - 1)
- ;; where the last step uses the fact that cc(n - q * d, d) = cc(n - q * d, d - 1)
- ;; because n - q * d = r < d.
- ;; The terms of this sum are decreasing, the first term cc(n, d - 1) = O(n ^ (d - 1))
- ;; by induction, and there are theta(n) terms. So the sum itself must be O(n ^ d).
- ;; The space complexity is the depth of the recursive tree which is q and so O(n).
- ;; 1.15
- ;; The sine procedure makes a single recursive call. So the recursive tree is a
- ;; single branch. So the space complexity, which is the depth of the tree, will
- ;; be the same as the time complexity, which is the number of nodes in the tree.
- ;; This complexity is O(log a) because the recursion bottoms out after repeatedly
- ;; cutting a down by 1/3 until it is less than 0.1, which is log3(10 * a) steps.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement