Compare commits

...

3 Commits

Author SHA1 Message Date
7e44b37850 remove print numbers 2025-03-26 01:29:03 +00:00
4cd7bb7d18 reorganise directories
upd chapter_01/binary.py
2025-03-26 01:27:35 +00:00
ab09aa5269 add visited set 2024-02-19 00:03:44 +00:00
43 changed files with 68 additions and 53 deletions

View File

@@ -40,13 +40,13 @@
[chapter12][knn]
[binary]: ./chapter1/
[selection_sort]: ./chapter2/
[recursion]: ./chapter3/
[quick_sort]: ./chapter4/
[bfs]: ./chapter6/
[trees]: ./chapter7/
[dijkstra]: ./chapter9/
[greedy]: ./chapter10/
[dynamic]: ./chapter11/
[knn]: ./chapter12/
[binary]: ./chapter_01/
[selection_sort]: ./chapter_02/
[recursion]: ./chapter_03/
[quick_sort]: ./chapter_04/
[bfs]: ./chapter_06/
[trees]: ./chapter_07/
[dijkstra]: ./chapter_09/
[greedy]: ./chapter_10/
[dynamic]: ./chapter_11/
[knn]: ./chapter_12/

View File

@@ -1,43 +0,0 @@
import logging
import random
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
def binary_search(arr, item):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
guess = arr[mid]
if guess == item:
return mid
elif guess > item:
high = mid - 1
else:
low = mid + 1
return None
LOWER = 1000
UPPER = 1000000
SAMPLE_SIZE = 1000
numbers = random.sample(range(LOWER, UPPER), SAMPLE_SIZE)
numbers.sort()
seen = set()
count = 0
result = None
while not result:
guess = random.randrange(LOWER, UPPER)
if guess not in seen:
count += 1
seen.add(guess)
result = binary_search(numbers, guess)
print(f"Found {guess} at index {result} after {count} attempts")

43
chapter_01/binary.py Normal file
View File

@@ -0,0 +1,43 @@
import logging
import random
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
class BinarySearch:
def __init__(self, arr):
self._arr = arr
def search(self, item):
low = 0
high = len(self._arr) - 1
while low <= high:
mid = (low + high) // 2
guess = self._arr[mid]
if guess == item:
return mid
elif guess > item:
high = mid - 1
else:
low = mid + 1
return None
LOWER = 1000
UPPER = 1000000
SAMPLE_SIZE = 1000
numbers = random.sample(range(LOWER, UPPER), SAMPLE_SIZE)
numbers.extend([9000, 999999])
numbers.sort()
search = BinarySearch(numbers)
print(search.search(42))
print(search.search(9000))
print(search.search(20000))
print(search.search(60000))
print(search.search(999999))

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -20,10 +20,15 @@ def dijkstra(graph, node):
costs[node] = 0
parents = {node: None for node in graph}
queue = [(0, node)]
visited = set()
while queue:
current_cost, current_node = heapq.heappop(queue)
if current_node in visited:
continue
logger.debug(f"node {current_node} with cost {current_cost} popped from pqueue")
visited.add(current_node)
for next_node, weight in graph[current_node].items():
new_cost = current_cost + weight

View File

@@ -19,10 +19,15 @@ def dijkstra(graph, node):
costs[node] = 0
parents = {node: None for node in graph}
queue = [(0, node)]
visited = set()
while queue:
current_cost, current_node = heapq.heappop(queue)
if current_node in visited:
continue
logger.debug(f"node {current_node} with cost {current_cost} popped from pqueue")
visited.add(current_node)
for next_node, weight in graph[current_node].items():
new_cost = current_cost + weight

View File

@@ -19,10 +19,15 @@ def dijkstra(graph, node):
costs[node] = 0
parents = {node: None for node in graph}
queue = [(0, node)]
visited = set()
while queue:
current_cost, current_node = heapq.heappop(queue)
if current_node in visited:
continue
logger.debug(f"node {current_node} with cost {current_cost} popped from pqueue")
visited.add(current_node)
for next_node, weight in graph[current_node].items():
new_cost = current_cost + weight