Skip to content

Commit 0988abc

Browse files
authored
Merge pull request #2 from touunix/Logarithmic-complexity
Add logarithmic complexity tasks
2 parents 2fd2b1a + ff0e328 commit 0988abc

File tree

3 files changed

+107
-0
lines changed

3 files changed

+107
-0
lines changed

logarithmic_complexity/__init__.py

Whitespace-only changes.

logarithmic_complexity/task_1.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
"""
2+
Given an array sorted in ascending order and a number k, check that it occurs in
3+
this array using the half method: first check if the middle element of
4+
the array = k. If it is smaller than k then continue in the same way looking for k in the
5+
right half of the array; if it is smaller, then in the left half.
6+
"""
7+
from utilities.generator import Generator
8+
9+
10+
class Program:
11+
@staticmethod
12+
def binary_search(search_number: int, array: list) -> bool:
13+
left_pointer: int = 0
14+
right_pointer: int = len(array) - 1
15+
16+
while left_pointer <= right_pointer:
17+
mid: int = (left_pointer + right_pointer) // 2
18+
if array[mid] == search_number: # look in the middle
19+
return True
20+
elif array[mid] < search_number: # look in the left
21+
left_pointer: int = mid + 1
22+
else:
23+
right_pointer: int = mid - 1 # look in the right
24+
return False
25+
26+
27+
if __name__ == "__main__":
28+
input_array: list = Generator.generate_ascending_array()
29+
input_search_number: int = Generator.generate_random_search_number()
30+
31+
print(60 * "-")
32+
print(f"Generated random input array: {input_array}")
33+
print(60 * "-")
34+
35+
if Program.binary_search(input_search_number, input_array):
36+
print(f"The number: {input_search_number}, is in the array.")
37+
else:
38+
print(f"The number: {input_search_number}, is not in the array.")
39+
print(60 * "-")

logarithmic_complexity/task_2.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
"""
2+
Implement an algorithm for inserting a number into a BST tree, and then write a program which,
3+
for a given number k, checks whether k occurs in such a tree.
4+
"""
5+
from utilities.generator import Generator
6+
7+
8+
class TreeNode:
9+
def __init__(self, value: int) -> None:
10+
self.value: int = value
11+
self.left_side: [None | TreeNode] = None
12+
self.right_side: [None | TreeNode] = None
13+
14+
15+
class BinarySearchTree:
16+
def __init__(self) -> None:
17+
self._root_node: [None | TreeNode] = None
18+
19+
def insert(self, value: int) -> None:
20+
if not self._root_node:
21+
self._root_node = TreeNode(value) # if the tree is empty, insert the new value
22+
else:
23+
self._insert_recursively(self._root_node, value)
24+
25+
def _insert_recursively(self, root_node: TreeNode, value: int) -> None:
26+
if value < root_node.value: # insert on the left side of the root
27+
if not root_node.left_side:
28+
root_node.left_side = TreeNode(value)
29+
else:
30+
self._insert_recursively(root_node.left_side, value)
31+
else: # insert on the right side of the root
32+
if not root_node.right_side:
33+
root_node.right_side = TreeNode(value)
34+
else:
35+
self._insert_recursively(root_node.right_side, value)
36+
37+
def search(self, search_number: int) -> bool:
38+
return self._search_recursively(self._root_node, search_number) if self._root_node else False
39+
40+
def _search_recursively(self, root_node: [TreeNode | None], search_number: int) -> bool:
41+
if not root_node: # empty binary tree
42+
return False
43+
if root_node.value == search_number:
44+
return True
45+
elif search_number < root_node.value: # search on the left side of the root
46+
return self._search_recursively(root_node.left_side, search_number)
47+
else: # search on the right side of the root
48+
return self._search_recursively(root_node.right_side, search_number)
49+
50+
51+
if __name__ == "__main__":
52+
binary_search_tree = BinarySearchTree()
53+
input_search_number: int = Generator.generate_random_search_number()
54+
input_numbers: list = Generator.generate_input_array()
55+
56+
for number in input_numbers:
57+
binary_search_tree.insert(number)
58+
59+
print(60 * "-")
60+
print(f"Generated random input search number: {input_search_number}")
61+
print(f"Generated random input numbers: {input_numbers}")
62+
print(60 * "-")
63+
64+
if binary_search_tree.search(input_search_number):
65+
print(f"The number: {input_search_number} exists in the Binary Search Tree.")
66+
else:
67+
print(f"The number: {input_search_number} does not exist in the Binary Search Tree.")
68+
print(60 * "-")

0 commit comments

Comments
 (0)