Python
/
Collections
- 1 Language 9
-
Hello World S
-
Variables S
-
Functions S
-
Conditional A S
-
Operators S
-
While S
-
Turtle S
-
Script Mode S
-
Debugging S
- 2 Strings 7
-
Slice S
-
Raw Strings S
-
Regex A S
-
Validation S
-
Config S
-
Security S
-
Encrypt A S
- 3 Collections 6
-
Lists S
-
Dictionaries S
-
Efficiency S
-
Tree S
-
Tuples S
-
References S
- 4 Functions 5
-
Recursion S
-
Factorial S
-
Modulus S
-
Reassignment S
-
Approximate S
- 5 Storage 8
-
Files S
-
Databases S
-
Pipes S
-
With open S
-
Shelve A S
-
Zip S
-
Csv S
-
Json S
- 6 Class 4
-
Definition S
-
Attributes S
-
Functional S
-
Methods S
- 7 Goodies 5
-
Conditional Expression S
-
List Comprehension A S
-
Generator S
-
Named Tuple S
-
Modules S
- 8 Applications 5
-
Pythagora A S
-
Palindrome A S
-
Binary Search A S
-
Conway Game A S
-
Coin Flip A S
- 9 Scheduler 4
-
Time S
-
Multithreading A S
-
Subprocess S
-
Logging S
- 10 Packages 6
-
Clipboard A S
-
Ocr A S
-
Socket S
-
Image S
-
Virtualenv S
-
Jupyter S
S
R
Q
Python Collections Efficiency
Fibonacci algorithm runs faster by keeping track of values in a dictionary known = {0:0, 1:1} known[n] = fb(n-1) + fb(n-2)
Slow
p197 In fibonacci function the bigger the argument, the longer the function runs.
# Slow (recursion)
#
# fb(0) = 0
# fb(1) = 1
# fb(n) = fb(n-1) + fb(n-2)
#
# The bigger the argument, the longer the function runs.
# It gets worst as the argument gets bigger.
loops = 0
def fibonacci(n):
global loops
loops = loops + 1
if n == 0: return 0
if n == 1: return 1
return fibonacci(n-1) + fibonacci(n-2)
assert fibonacci(4) == 3; print (loops) # 9
assert fibonacci(5) == 5; print (loops) # 24
assert fibonacci(6) == 8; print (loops) # 49
fibonacci(30)
print (loops) # 2692537 - Look Here
Fast
One solution is to keep track of values and store them in a dictionary.
# Fast (recursion & dictionary)
#
# fb(0) = 0
# fb(1) = 1
# fb(n) = fb(n-1) + fb(n-2)
#
# To make the algorith run faster ...
# one solution is to keep track of values and store them in a dictionary.
loops = 0
known = {0:0, 1:1}
def reset():
loops = 0
known = {0:0, 1:1}
def fibonacci(n):
global loops;
loops = loops + 1
if n in known:
return known[n]
res = fibonacci(n-1) + fibonacci(n-2)
known[n] = res
return res
reset(); assert fibonacci(4) == 3; print (loops) # 7
reset(); assert fibonacci(5) == 5; print (loops) # 10
reset(); assert fibonacci(6) == 8; print (loops) # 13
fibonacci(1000)
print (loops) # 2002 - Look Here
➥ Questions