# CS150 class example # Tests timing of sets vs. lists import random import time def generate_set(set_size): """Return a set containing set_size random integers""" data = set() while len(data) < set_size: data.add(random.randint(0, set_size*10)) return data def generate_list(list_size): """Return a list containing list_size random integers""" data = [] for dummy in range(list_size): data.append(random.randint(0, list_size*10)) return data def query_data(data, num_queries, largest): """Compute time to execute random membership queries Args: data: List or Set num_queries: Number of membership queries to perform largest: Upper bound for random integers to query Returns: Elapsed time for all queries """ # We'll count them for fun, but won't do anything with the count count = 0 begin = time.time() for i in range(num_queries): # Just check to see if a random number is in there random_num = random.randint(0, largest) if random_num in data: count += 1 return time.time() - begin def speed_test(set_size, num_queries): """Print timing for creating and querying of lists and sets Args: set_size: Size of set/list to query num_queries: Number of membership queries to perform """ # Generate random list begin = time.time() list_data = generate_list(set_size) print("List creation took", time.time()-begin, "seconds") # Generate random set begin = time.time() set_data = generate_set(set_size) print("Set creation took", time.time()-begin, "seconds") print("--") # Time the list querying elapsed = query_data(list_data, num_queries, set_size*10) print("List querying took", elapsed, "seconds") # Time the list querying elapsed = query_data(set_data, num_queries, set_size*10) print("Set querying took", elapsed, "seconds") def speed_data(num_queries, set_size_min, set_size_max, step_size): """Print a table of runtimes for querying lists and sets of different sizes. Args: num_queries: Number of membership queries to perform set_size_min, set_size_max, step_size: Range of set/list sizes to test query performance """ print("size","list","set", sep="\t") # Instead of a space separate with a tab for set_size in range(set_size_min, set_size_max, step_size): # Generate random list list_data = generate_list(set_size) # Generate random set set_data = generate_set(set_size) # Time the list querying list_elapsed = query_data(list_data, num_queries, set_size*10) # Time the list querying set_elapsed = query_data(set_data, num_queries, set_size*10) print(set_size, list_elapsed, set_elapsed, sep="\t") #speed_test(100000, 1000) #speed_data(1000, 10000, 100000, 5000)