Compare commits
	
		
			No commits in common. "7e44b378504c4a387ec5c60a620f59d09939cc99" and "ab09aa5269d64c93625757936f205bc05de125f0" have entirely different histories.
		
	
	
		
			7e44b37850
			...
			ab09aa5269
		
	
		
							
								
								
									
										20
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@ -40,13 +40,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[chapter12][knn]
 | 
					[chapter12][knn]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[binary]: ./chapter_01/
 | 
					[binary]: ./chapter1/
 | 
				
			||||||
[selection_sort]: ./chapter_02/
 | 
					[selection_sort]: ./chapter2/
 | 
				
			||||||
[recursion]: ./chapter_03/
 | 
					[recursion]: ./chapter3/
 | 
				
			||||||
[quick_sort]: ./chapter_04/
 | 
					[quick_sort]: ./chapter4/
 | 
				
			||||||
[bfs]: ./chapter_06/
 | 
					[bfs]: ./chapter6/
 | 
				
			||||||
[trees]: ./chapter_07/
 | 
					[trees]: ./chapter7/
 | 
				
			||||||
[dijkstra]: ./chapter_09/
 | 
					[dijkstra]: ./chapter9/
 | 
				
			||||||
[greedy]: ./chapter_10/
 | 
					[greedy]: ./chapter10/
 | 
				
			||||||
[dynamic]: ./chapter_11/
 | 
					[dynamic]: ./chapter11/
 | 
				
			||||||
[knn]: ./chapter_12/
 | 
					[knn]: ./chapter12/
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										43
									
								
								chapter1/binary.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					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")
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB  | 
| 
		 Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB  | 
| 
		 Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB  | 
| 
		 Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB  | 
| 
		 Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB  | 
@ -1,43 +0,0 @@
 | 
				
			|||||||
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))
 | 
					 | 
				
			||||||