Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
e3d9057
Add exponential search
GohJunLe Aug 9, 2022
6197291
Merge pull request #1 from GohJunLe/GohJunLe-patch-1
GohJunLe Aug 9, 2022
c8fca7d
create README for exponential search
GohJunLe Aug 9, 2022
41038d3
Update data-structure images.
trekhleb Aug 27, 2022
8c7950a
Update data-structure images.
trekhleb Aug 27, 2022
a81c0bd
Update data-structure images.
trekhleb Aug 27, 2022
6914c65
Update data-structure images.
trekhleb Aug 27, 2022
f9b558b
Update data-structure images.
trekhleb Aug 27, 2022
1d02cd6
Update data-structure images.
trekhleb Aug 29, 2022
4d2d718
Add a link to minimalistic data structure sketches. (#933)
trekhleb Aug 30, 2022
0203bfe
Merge branch 'trekhleb:master' into change
GohJunLe Aug 31, 2022
2913a98
Delete src/algorithms/search/exponential-search directory
GohJunLe Sep 3, 2022
1baf610
Add exponential search
GohJunLe Sep 3, 2022
295fb99
Update src/algorithms/search/exponential-search/exponentialSearch.js
GohJunLe Sep 3, 2022
8e37e8f
Update src/algorithms/search/exponential-search/exponentialSearch.js
GohJunLe Sep 3, 2022
dd1843f
Update src/algorithms/search/exponential-search/exponentialSearch.js
GohJunLe Sep 3, 2022
7c13298
Update src/algorithms/search/exponential-search/exponentialSearch.js
GohJunLe Sep 3, 2022
fbf12c3
Update src/algorithms/search/exponential-search/exponentialSearch.js
GohJunLe Sep 3, 2022
820492a
Update src/algorithms/search/exponential-search/exponentialSearch.js
GohJunLe Sep 3, 2022
f1d7c4b
Update src/algorithms/search/exponential-search/exponentialSearch.js
GohJunLe Sep 3, 2022
01ca43d
Update exponentialSearch.js
GohJunLe Sep 3, 2022
38d1819
Update src/algorithms/search/exponential-search/exponentialSearch.js
GohJunLe Sep 3, 2022
c277288
Update README.md
GohJunLe Sep 3, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,8 @@ npm test -- 'playground'

### References

[▶ Data Structures and Algorithms on YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)
- [▶ Data Structures and Algorithms on YouTube](https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)
- [✍🏻 Data Structure Sketches](https://okso.app/showcase/data-structures)

### Big O Notation

Expand Down
16 changes: 16 additions & 0 deletions src/algorithms/search/exponential-search/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Exponential Search

In computer science, an exponential search is an algorithm.There are numerous ways to implement this with the most common being to determine a range that the search key
resides in and performing a binary search within that range. This takes O(log i) where i is the position of the search key in the list, if the search key is in the list,
or the position where the search key should be, if the search key is not in the list.Exponential search can also be used to search in bounded lists. Exponential search
can even out-perform more traditional searches for bounded lists, such as binary search, when the element being searched for is near the beginning of the array.

![Exponential Search](https://upload.wikimedia.org/wikipedia/commons/4/45/Exponential_search.svg)

## Complexity

**Time Complexity**: `O(log i)` - i is the index of the element being searched for in the list

## References

-[Wikipedia](https://en.wikipedia.org/wiki/Exponential_search)
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import exponentialSearch from '../exponentialSearch';

describe('exponentialSearch', () => {
it('should search number in sorted array', () => {
expect(exponentialSearch([], 1)).toBe(-1);
expect(exponentialSearch([1], 1)).toBe(0);
expect(exponentialSearch([1, 2], 1)).toBe(0);
expect(exponentialSearch([1, 2], 2)).toBe(1);
expect(exponentialSearch([1, 5, 10, 12], 1)).toBe(0);
expect(exponentialSearch([1, 5, 10, 12, 14, 17, 22, 100], 17)).toBe(5);
expect(exponentialSearch([1, 5, 10, 12, 14, 17, 22, 100], 1)).toBe(0);
expect(exponentialSearch([1, 5, 10, 12, 14, 17, 22, 100], 100)).toBe(7);
expect(exponentialSearch([1, 5, 10, 12, 14, 17, 22, 100], 0)).toBe(-1);
});

it('should search object in sorted array', () => {
const sortedArrayOfObjects = [
{ key: 1, value: 'value1' },
{ key: 2, value: 'value2' },
{ key: 3, value: 'value3' },
{ key: 4, value: 'value4' },
];

const comparator = (a, b) => {
if (a.key === b.key) return 0;
return a.key < b.key ? -1 : 1;
};

expect(exponentialSearch([], { key: 1 }, comparator)).toBe(-1);
expect(exponentialSearch(sortedArrayOfObjects, { key: 4 }, comparator)).toBe(3);
expect(exponentialSearch(sortedArrayOfObjects, { key: 1 }, comparator)).toBe(0);
expect(exponentialSearch(sortedArrayOfObjects, { key: 2 }, comparator)).toBe(1);
expect(exponentialSearch(sortedArrayOfObjects, { key: 3 }, comparator)).toBe(2);
});
});
56 changes: 56 additions & 0 deletions src/algorithms/search/exponential-search/exponentialSearch.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import Comparator from '../../../utils/comparator/Comparator';

/**
* Binary search implementation.
*
* @param {*[]} sortedArray
* @param {*} startIndex
* @param {*} endIndex
* @param {*} seekElement
* @param {function(a, b)} [comparatorCallback]
* @return {number}
*/

function binarySearch(sortedArray, startIndex, endIndex, seekElement, comparatorCallback) {
const comparator = new Comparator(comparatorCallback);
if (endIndex >= startIndex) {
const middleIndex = startIndex + Math.floor((endIndex - startIndex) / 2);
// If the element is present at the middle itself
if (comparator.equal(sortedArray[middleIndex], seekElement)) {
return middleIndex;
}
// If element is smaller than middleIndex, then it can only be present n left subarray
if (comparator.greaterThan(sortedArray[middleIndex], seekElement)) {
return binarySearch(sortedArray, startIndex, middleIndex - 1, seekElement, comparatorCallback);
}
// Else the element can only be present in right subarray
return binarySearch(sortedArray, middleIndex + 1, endIndex, seekElement, comparatorCallback);
}
// We reach here when element is not present in array
return -1;
}
/**
* Exponential search implementation.
*
* @param {*[]} sortedArray
* @param {*} seekElement
* @param {function(a, b)} [comparatorCallback]
* @return {number}
*/
export default function exponentialSearch(sortedArray, seekElement, comparatorCallback) {
const comparator = new Comparator(comparatorCallback);
const length = sortedArray.length;
// If element is present at first location itself
if (sortedArray.length !== 0) {
if (comparator.equal(sortedArray[0], seekElement)){
return 0;
}
}
// Find range for binary search by repeated doubling
let range = 1;
while (range < length && comparator.lessThanOrEqual(sortedArray[range], seekElement)) {
range *= 2;
}
// Call binary search for the found range.
return binarySearch(sortedArray, range/2, Math.min(range, length - 1), seekElement, comparatorCallback);
}
Binary file modified src/data-structures/heap/images/array-representation.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/data-structures/heap/images/max-heap.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/data-structures/heap/images/min-heap.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/data-structures/queue/images/queue.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/data-structures/stack/images/stack.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/data-structures/tree/images/tree.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/data-structures/trie/images/trie.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.