-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdynamic_programming.py
More file actions
61 lines (47 loc) · 1.34 KB
/
dynamic_programming.py
File metadata and controls
61 lines (47 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# use closure to keep the cache inside the function
def memoize():
cache = {}
def add_80(n):
if n in cache:
print("using cache")
return cache[n]
cache[n] = n + 80
return cache[n]
return add_80
#memoized_function = memoize()
#print(memoized_function(5))
#print(memoized_function(5))
#print(memoized_function(5))
# 0 1 2 3 5 8 13 21 34 fibonnaci
def memoize_fib():
cache = {}
def fibonacci(n):
if n-2 in cache and n-1 in cache:
print("using cache")
cache[n] = cache[n-2] + cache[n-1]
return cache[n]
elif n < 2:
cache[n] = n
return cache[n]
else:
for i in range(2, n+1):
# O(n)
if i not in cache:
cache[i] = cache[i-2] + cache[i-1]
return cache[n]
return fibonacci
memoized_fib = memoize_fib()
print(memoized_fib(0))
print(memoized_fib(1))
print(memoized_fib(2))
print(memoized_fib(3))
print(memoized_fib(4))
print(memoized_fib(5))
print(memoized_fib(6))
def fibonnaci_master(n):
# top down technique
answer = [0, 1]
for i in range(2, n+1):
answer.append(answer[i-2] + answer[i-1])
return answer.pop()
print(fibonnaci_master(6))