added part 4

This commit is contained in:
2026-03-03 23:02:36 -05:00
parent e4a69fd6d7
commit f01b0069a0

View File

@@ -6,8 +6,6 @@
# https://pressbooks.palni.org/anopenguidetodatastructuresandalgorithms/chapter/search/ # https://pressbooks.palni.org/anopenguidetodatastructuresandalgorithms/chapter/search/
# #
########################################## ##########################################
# import statement to support more type hints
from __future__ import annotations
import random #to generate the 100 random values import random #to generate the 100 random values
import time #for part 4, to calculae total time import time #for part 4, to calculae total time
@@ -19,14 +17,14 @@ class Search:
This function generates the list of random integers. This function generates the list of random integers.
""" """
def generate_random_list(self, n): def generate_random_list(self, n):
data = [] array = []
for _ in range(n): for _ in range(n):
data.append(random.randint(0, 1000)) array.append(random.randint(0, 1000))
if 42 not in data: # if 42 not in data:
data[random.randint(0, n - 1)] = 42 # data[random.randint(0, n - 1)] = 42
return data return array
""" """
This funciton preforms a search on the list for the target value, and prints the number of checks it took to find the target. This funciton preforms a search on the list for the target value, and prints the number of checks it took to find the target.
@@ -36,14 +34,14 @@ class Search:
for value in arr: for value in arr:
if value == target: if value == target:
print("Unsuccessful checks:", checks) print("Unsuccessful checks:", checks)
return checks
checks += 1 checks += 1
print("Not found.") print("Not found.")
return checks return checks
""" """
This function pre This function
""" """
def linear_search_count(self, arr, target): def linear_search_count(self, arr, target):
checks = 0 checks = 0
@@ -97,6 +95,34 @@ def main():
""" """
Part 4: With your implementations of Linear and Binary Search, write some tests to generate a number of random queries. Calculate the total time to conduct n/2 queries on a randomly generated dataset. Be sure to include the sorting time for your Binary Search database before calculating the total time for all queries. Compare your result to the Linear Search total query time. Next, repeat this process for n, 2*n, and 4*n queries. At what number of queries does Sorting + Binary Search start to show an advantage over Linear Search? Part 4: With your implementations of Linear and Binary Search, write some tests to generate a number of random queries. Calculate the total time to conduct n/2 queries on a randomly generated dataset. Be sure to include the sorting time for your Binary Search database before calculating the total time for all queries. Compare your result to the Linear Search total query time. Next, repeat this process for n, 2*n, and 4*n queries. At what number of queries does Sorting + Binary Search start to show an advantage over Linear Search?
""" """
n = 1000
arr = search.generate_random_list(n) #generate the list of n random integers
for multiplier in [0.5, 1, 2, 4]:
query_count = int(n * multiplier)
queries = []
for _ in range(query_count):
queries.append(random.choice(base_array))
# Linear timing
start = time.perf_counter()
for q in queries:
search.linear_search_count(base_array, q)
end = time.perf_counter()
linear_time = end - start
# Sorting + Binary timing
start = time.perf_counter()
sorted_arr = sorted(base_array)
for q in queries:
search.binary_search_recursive(sorted_arr, q, 0, len(sorted_arr) - 1)
end = time.perf_counter()
binary_time = end - start
print("\nQueries:", query_count)
print("Linear time:", linear_time)
print("Sorting + Binary time:", binary_time)
# only execute when you run this file directily # only execute when you run this file directily
if __name__ == "__main__": if __name__ == "__main__":