Searching is the fundamental process of locating a specific element or item within a collection of data. This collection of data can take various forms, such as arrays, lists, trees, or other structured representations.
Introduction to Searching - Data Structure and Algorithm Tutorial
The primary objective of searching is to determine whether the desired element exists within the data, and if so, to identify its precise location or retrieve it. It plays an important role in various computational tasks and real-world applications, including information retrieval, data analysis, decision-making processes, and more.
Understanding the characteristics of searching in data structures and algorithms is crucial for designing efficient algorithms and making informed decisions about which searching technique to employ. Here, we explore key aspects and characteristics associated with searching:
1. Target Element:In searching, there is always a specific target element or item that you want to find within the data collection. This target could be a value, a record, a key, or any other data entity of interest.
2. Search Space:The search space refers to the entire collection of data within which you are looking for the target element. Depending on the data structure used, the search space may vary in size and organization.
3. Complexity:Searching can have different levels of complexity depending on the data structure and the algorithm used. The complexity is often measured in terms of time and space requirements.
4. Deterministic vs Non-deterministic:Some searching algorithms, like binary search, are deterministic, meaning they follow a clear and systematic approach. Others, such as linear search, are non-deterministic, as they may need to examine the entire search space in the worst case.
Applications of Searching:Searching algorithms have numerous applications across various fields. Here are some common applications:
Searching Algorithms are designed to check for an element or retrieve an element from any data structure where it is stored.
Below are some searching algorithms:
Linear Search, also known as Sequential Search, is one of the simplest and most straightforward searching algorithms. It works by sequentially examining each element in a collection of data(array or list) until a match is found or the entire collection has been traversed.
Linear Search Algorithm of Linear Search:Pseudo Code for Linear Search:Consider the array arr[] = {10, 50, 30, 70, 80, 20, 90, 40} and key = 30
Start from the first element (index 0) and compare key with each element (arr[i]). Comparing key with first element arr[0]. Since not equal, the iterator moves to the next element as a potential match.
Comparing key with next element arr[1]. Since not equal, the iterator moves to the next element as a potential match.
Now when comparing arr[2] with key, the value matches. So the Linear Search Algorithm will yield a successful message and return the index of the element when key is found.
Complexity Analysis of Linear Search:LinearSearch(collection, key):
for each element in collection:
if element is equal to key:
return the index of the element
return "Not found"
Binary Search is defined as a searching algorithm used in a sorted array by repeatedly dividing the search interval in half. The idea of binary search is to use the information that the array is sorted and reduce the time complexity to O(log N).
Binary Search Algorithm Algorithm of Binary Search:Pseudo Code for Binary Search:Consider an array arr[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91}, and the target = 23.
- Calculate the mid and compare the mid element with the key. If the key is less than mid element, move to left and if it is greater than the mid then move search space to the right.
- Key (i.e., 23) is greater than current mid element (i.e., 16). The search space moves to the right.
- Key is less than the current mid 56. The search space moves to the left.
- If the key matches the value of the mid element, the element is found and stop search.
Below is the pseudo code for implementing binary search:
Complexity Analysis of Binary Search:binarySearch(collection, key):
left = 0
right = length(collection) - 1
while left <= right:
mid = (left + right) // 2
if collection[mid] == key:
return mid
elif collection[mid] < key:
left = mid + 1
else:
right = mid - 1
return "Not found"
Ternary Search is a searching algorithm that divides the search space into three parts instead of two, as in Binary Search. It is very useful in the case of unimodal functions.
Algorithm Ternary Search:Complexity Analysis of Ternary Search:Consider an array arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, and the target = 6.
Ternary Search
Illustration of Jump Search:Jump Search is another searching algorithm that can be used on sorted collections (arrays or lists). The idea is to reduce the number of comparisons by jumping ahead by fixed steps or skipping some elements in place of searching all elements.
Time Complexity of Jump Search:Let’s consider the following array: (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610).
The length of the array is 16. The Jump search will find the value of 55 with the following steps assuming that the block size to be jumped is 4.
- Jump from index 0 to index 4;
- Jump from index 4 to index 8;
- Jump from index 8 to index 12;
- Since the element at index 12 is greater than 55, we will jump back a step to come to index 8.
- Perform a linear search from index 8 to get the element 55.
5. Interpolation Searchlinear search < jump search < binary search
6. Fibonacci SearchInterpolation Search is an efficient searching algorithm for sorted collections of data, such as arrays or lists. It is an improvement over Binary Search, particularly when the data is uniformly distributed.
7. Exponential SearchFibonacci Search is an efficient searching algorithm used for finding a target value in a sorted collection, such as an array or list. It is similar in principle to Binary Search but uses Fibonacci numbers to determine the positions to be compared.
Easy Problems on Searching:Exponential Search is a searching algorithm designed to find a target value in a sorted collection, such as an array or list. It combines elements of Binary Search and Linear Search to efficiently locate the target, especially when its position is near the beginning of the collection.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4