policy:
* new entries go in the end
==== What is the difference between big-Theta, big-O, big-Omega notation? ====
context: growth rate of an algorithm
* big-Θ notation gives an asymptotically tight bound
* big-O notation gives an asymptotically upper bound
* big-Ω notation gives an asymptotically lower bound
Ref:
* https://www.khanacademy.org/computing/computer-science/algorithms -> Asymptotic notation
* You can also go there directly via https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/asymptotic-notation
* High information density; Very easy to follow; Good explanation; Non trivial examples
==== two sum challenge ====
Q: Return the indexes of two numbers in an unsorted list that adds up to a target value.
Assume that:
* only one pair adds up to the target number
* there are no duplicates in the list
Example:
Say the list is [7, 2, 4, 3, -1] and the target value is 5.
In this case, the numbers at index positions 1 and 3 add up to the target number (5), so the answer is (1, 3)
Solution:
In [14]:
def two_sum(a_list, target):
a_dict = {}
for index, value in enumerate(a_list):
reminder = target - value
if reminder in a_dict:
return [a_dict[reminder], index]
else:
a_dict[value] = index
In [15]:
a = [7, 2, 4, 3, -1]
In [16]:
two_sum(a, 5)
Out[16]:
[1, 3]
Ref:-
* This is discussed in
The Self-Taught Computer Scientist
The Beginner's Guide to Data Structures & Algorithms
By Cory Althoff
2021
-> Chapter 13 Hash Tables -> Two Sum -> pages 143-144.
* The discussion is easy to follow; comprehensive.
* The input array given in the book is trivial in the sense that the numbers are sorted in ascending order. I just jumbled the entries to show that the algo works on unsorted lists as well.
* The book seems to have many mistakes. For example,
* in pg-143 -> two_sum_brute() returns the values instead of indexes.
* the insert_left() in code snippet of pg-153 is not same as insert_left() in the first code snippet of pg-154.
* Todo: (1) How to report mistakes in this book? (2) Find a better reference.