Complexity Analysis and Optimization with C++ Unordered Sets
Introduction
Greetings, programming enthusiast! In this unit, we're embarking on a thrilling numerical quest, where unidentified bridges connect the islands of data. On these bridges, we'll see hashes and bins, all converging into sets! Throughout our journey, we'll utilize the fundamental concepts of the C++ Standard Template Library (STL) std::unordered_set to formulate an optimal solution. So, fasten your seatbelt and get ready to solve problems!
Task Statement
The task for this unit is to devise a C++ function that accepts two vectors containing unique integers and returns another vector containing the elements common to both input vectors. This task provides an intriguing perspective on deriving similarities between two data sequences, a scenario commonly encountered in data comparisons and analytics.
For illustration, suppose we're given two vectors:
The common_elements(list1, list2) function should comb through these arrays of integers and extract the common elements between them.
The expected outcome in this case should be:
Brute Force Solution and Complexity Analysis
Before we delve into the optimized solution, it is instrumental to consider a basic or naïve approach to this problem and analyze its complexity. Often, our first intuitive approach is to iterate over both arrays in nested loops and find common elements. This way, for each element in the first list, we check for its presence in the second list. If it's found, it is added to our result vector. Let's see how such a solution would look:
However, the problem with this approach lies in its efficiency. Given that the worst-case scenario has us traversing through every element in both lists, we refer to this as an solution, where n and m represent the number of elements in list1 and list2 respectively. For large lists, this iterative approach tends to be inefficient and slow, making it a less desirable solution for this problem.
The solution we aim to implement in the following section utilizes the std::unordered_set data structure to optimize our algorithm and reach a solution in markedly less computational time.
