Compare commits

...

3 Commits

Author SHA1 Message Date
d552050f7e typo 2024-01-19 17:23:09 +00:00
1da4a16ec8 add some notes 2024-01-19 17:21:42 +00:00
0f52cf0f75 remove time measure 2024-01-19 16:54:08 +00:00
5 changed files with 24 additions and 3 deletions

3
chapter10/README.md Normal file
View File

@ -0,0 +1,3 @@
# Approximation algorithm
- Easy to write, fast to run, useful for obtaining approximate solutions for NP-hard problems.

6
chapter11/README.md Normal file
View File

@ -0,0 +1,6 @@
# Dynamic Programming
A programming technique for decomposing a problem into smaller discrete subproblems.
- Useful when trying to optimize something given a constraint.
- Example, items in a knapsack of size W that gives the greatest value.

9
chapter12/README.md Normal file
View File

@ -0,0 +1,9 @@
# K-Nearest Neighbours
Useful for classification, regression and feature extraction. By examining a data point against its K nearest neighbours we can:
- categorize into a group
- predict responses
- convert the item into a list of features
A good starting point for machine learning.

View File

@ -1,6 +1,5 @@
import logging import logging
import random import random
import time
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -33,11 +32,10 @@ SAMPLE_SIZE = 1000
numbers = random.sample(range(LOWER, UPPER), SAMPLE_SIZE) numbers = random.sample(range(LOWER, UPPER), SAMPLE_SIZE)
numbers.sort() numbers.sort()
start = time.time()
result = None result = None
while result is None: while result is None:
guess = random.randrange(LOWER, UPPER) guess = random.randrange(LOWER, UPPER)
logger.debug(f"guess: {guess}") logger.debug(f"guess: {guess}")
result = binary_search(numbers, 0, len(numbers) - 1, guess) result = binary_search(numbers, 0, len(numbers) - 1, guess)
print(f"Found {guess} at index {result}. Running time {time.time() - start}") print(f"Found {guess} at index {result}.")

5
chapter9/README.md Normal file
View File

@ -0,0 +1,5 @@
# Shortest path for weighted graph (cost associated edges)
- Dijkstra's algorithm works when all weights are non-negative
- If there are negative weights use Bellman-Ford.
- Priority queue + min heap is optimal when compared to a function that operates on a list.