From 54928473262c2a70bae4c27bfbb4180e79bb86f5 Mon Sep 17 00:00:00 2001 From: umangag07 <52677699+umangag07@users.noreply.github.com> Date: Mon, 5 Oct 2020 20:26:26 +0530 Subject: [PATCH 1/2] Added the full code regarding issue #576 (#602) * Added the full code regarding issue #576 * Added the final title of file regarding issue #576 --- .../Maths/MarathiToEnglish_number.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Python/Algorithms/Maths/MarathiToEnglish_number.py diff --git a/Python/Algorithms/Maths/MarathiToEnglish_number.py b/Python/Algorithms/Maths/MarathiToEnglish_number.py new file mode 100644 index 00000000..c6a60d2b --- /dev/null +++ b/Python/Algorithms/Maths/MarathiToEnglish_number.py @@ -0,0 +1,34 @@ +''' +English_digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] +Below is marathi numbers list + +This program will convert the input number into english number +''' +marathi_digits = ['०', '१', '२', '१', '४', '५', '६', '७', '८', '९'] +a = input("Enter marathi digit: ") +if a in marathi_digits: + print("English Digit: ", marathi_digits.index(a)) +# It will go to this condition if marathi number is of more than one digit +else: + c = 0 # counter is to check input is valid or not + n1 = '' + for i in a: + if i in marathi_digits: + n1 += str(marathi_digits.index(i)) + c = c + 1 +if c != 0: + print("English Digit: ", n1) +else: + print("Enter marathi number only") + +''' +OUTPUT-:Enter marathi digit:६७८ + English Digit: 678 + + Enter marathi digit:० + English Digit: 0 + + Enter marathi digit: seven + Enter marathi number only + +''' From 2c3b2b9cafab49b8e34729d60dabbb2f43573d9c Mon Sep 17 00:00:00 2001 From: aditya-gite-04 <55936621+aditya-gite-04@users.noreply.github.com> Date: Mon, 5 Oct 2020 20:31:41 +0530 Subject: [PATCH 2/2] Interpolation Search and Documentation (#567) * Create InterpolationSearch.py * Add files via upload * Update README.md * Update InterpolationSearch.py * Update InterpolationSearch.py * Update InterpolationSearch.py * Update InterpolationSearch.py * Update InterpolationSearch.py * Update InterpolationSearch.py --- .../InterpolationSearch.py | 25 ++++++ .../Algorithms/SearchingAlgorithms/README.md | 85 +++++++++++++++++- .../SearchingAlgorithms/searchalgos.png | Bin 0 -> 28290 bytes 3 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 Python/Algorithms/SearchingAlgorithms/InterpolationSearch.py create mode 100644 Python/Algorithms/SearchingAlgorithms/searchalgos.png diff --git a/Python/Algorithms/SearchingAlgorithms/InterpolationSearch.py b/Python/Algorithms/SearchingAlgorithms/InterpolationSearch.py new file mode 100644 index 00000000..ce5bdb6e --- /dev/null +++ b/Python/Algorithms/SearchingAlgorithms/InterpolationSearch.py @@ -0,0 +1,25 @@ +def interpolationSearch(arr, lo, hi, x): + if (lo <= hi and x >= arr[lo] and x <= arr[hi]): + # Probing the position with keeping + # uniform distribution in mind. + pos = lo + ((hi - lo) // (arr[hi] - arr[lo]) * (x - arr[lo])) + # Condition of target found + if arr[pos] == x: + return pos + # If x is larger, x is in right subarray + if arr[pos] < x: + return interpolationSearch(arr, pos + 1, hi, x) + # If x is smaller, x is in left subarray + if arr[pos] > x: + return interpolationSearch(arr, lo, pos - 1, x) + return - 1 + + +n = int(input("Enter number of elements : ")) +arr = list(map(int, input("\nEnter the numbers : ").strip().split()))[:n] +x = int(input("Enter the element to be searched :")) +index = interpolationSearch(arr, 0, n - 1, x) +if index != -1: + print("Element found at index", index) +else: + print("Element not found") diff --git a/Python/Algorithms/SearchingAlgorithms/README.md b/Python/Algorithms/SearchingAlgorithms/README.md index 8b8cd78a..2268e778 100644 --- a/Python/Algorithms/SearchingAlgorithms/README.md +++ b/Python/Algorithms/SearchingAlgorithms/README.md @@ -1,3 +1,82 @@ -# Changelog -#### 01-10-2020: -- Added Sequential Search \ No newline at end of file +

+ +

+

+ +## Introduction + +Searching for data stored in different data structures is a crucial part of pretty much every single application. + +There are many different algorithms available to utilize when searching, and each have different implementations and rely on different data structures to get the job done. + +Being able to choose a specific algorithm for a given task is a key skill for developers and can mean the difference between a fast, reliable and stable application and an application that crumbles from a simple request. + +* Linear Search +* Binary Search +* Jump Search +* Fibonacci Search +* Exponential Search +* Interpolation Search + +## Linear Search + +Linear search is one of the simplest searching algorithms, and the easiest to understand. We can think of it as a ramped-up version of our own implementation of Python's in operator. + +The algorithm consists of iterating over an array and returning the index of the first occurrence of an item once it is found. + +The time complexity of linear search is O(n), meaning that the time taken to execute increases with the number of items in our input list + +## Binary Search + +Binary search follows a divide and conquer methodology. It is faster than linear search but requires that the array be sorted before the algorithm is executed. + +Assuming that we're searching for a value val in a sorted array, the algorithm compares val to the value of the middle element of the array, which we'll call mid. + +* If mid is the element we are looking for (best case), we return its index. +* If not, we identify which side of mid val is more likely to be on based on whether val is smaller or greater than mid, and discard the other side of the array. +* We then recursively or iteratively follow the same steps, choosing a new value for mid, comparing it with val and discarding half of the possible matches in each iteration of the algorithm. + +We can only pick one possibility per iteration, and our pool of possible matches gets divided by two in each iteration. This makes the time complexity of binary search O(log n). + +## Jump Search + +Jump Search is similar to binary search in that it works on a sorted array, and uses a similar divide and conquer approach to search through it. + +It can be classified as an improvement of the linear search algorithm since it depends on linear search to perform the actual comparison when searching for a value. + +Given a sorted array, instead of searching through the array elements incrementally, we search in jumps. + +The time complexity of jump search is O(√n), where √n is the jump size, and n is the length of the list, placing jump search between the linear search and binary search algorithms in terms of efficiency. + +## Fibonacci Search + +Fibonacci search is another divide and conquer algorithm which bears similarities to both binary search and jump search. It gets its name because it uses Fibonacci numbers to calculate the block size or search range in each step. + +Fibonacci numbers start with zero and follow the pattern 0, 1, 1, 2, 3, 5, 8, 13, 21... where each element is the addition of the two numbers that immediately precede it. +The algorithm works with three Fibonacci numbers at a time. + +The time complexity for Fibonacci search is O(log n); the same as binary search. This means the algorithm is faster than both linear search and jump search in most cases. + +## Exponential Search + +Exponential search is another search algorithm that can be implemented quite simply in Python, compared to jump search and Fibonacci search which are both a bit complex. It is also known by the names galloping search, doubling search and Struzik search. + +Exponential search depends on binary search to perform the final comparison of values. The algorithm works by: + +* Determining the range where the element we're looking for is likely to be +* Using binary search for the range to find the exact index of the item + +Exponential search runs in O(log i) time, where i is the index of the item we are searching for. In its worst case, the time complexity is O(log n), when the last item is the item we are searching for (n being the length of the array). + +## Interpolation Search + +Interpolation search is another divide and conquer algorithm, similar to binary search. Unlike binary search, it does not always begin searching at the middle. + +The time complexity of interpolation search is O(log log n) when values are uniformly distributed. If values are not uniformly distributed, the worst-case time complexity is O(n), the same as linear search. + +Interpolation search works best on uniformly distributed, sorted arrays. Whereas binary search starts in the middle and always divides into two, interpolation search calculates the likely position of the element and checks the index, making it more likely to find the element in a smaller number of iterations. + +

+ +

+ diff --git a/Python/Algorithms/SearchingAlgorithms/searchalgos.png b/Python/Algorithms/SearchingAlgorithms/searchalgos.png new file mode 100644 index 0000000000000000000000000000000000000000..578abdf683e81f0fcb3e0434112d105a0dd5f5e6 GIT binary patch literal 28290 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