top of page
Caută
  • Poza scriitoruluioanaunciuleanu

Exponential Search in C++


Exponential search is an algorithm used for finding a value in an array. The array must be ordered. This algorithm is based on the Binary Search Algorithm. This search jumps 2^I elements at every iteration. I is the value of loop control variable, and it verifies if the search element is between the last and the current jumps.

This algorithm, also known as doubling search, galloping search, Struzik search is used for searching sorted, unbounded (infinite) lists.

To explain it in a simpler way, we have to start with a sub-array of size 1, compare its last element with the searched value, and then double the size to 2, and then to 4, until the last element of the sub-array is not greater. In this way, the searched value must be between i/2 and I, this is because in the previous iteration we couldn’t find a greater value.



// Exponential Search

#include <iostream>
using namespace std;

int binarySearch(int arrayOfNumbers[], int searchForNumber, int left, int right)
{
	if (right >= left)
	{
		int middle = left + (right - left) / 2;

		if (arrayOfNumbers[middle] == searchForNumber)
        {
            printf("The number %d is found at index %d", searchForNumber, middle);
            return middle;
        }

		if (arrayOfNumbers[middle] > searchForNumber)
        {
            return binarySearch(arrayOfNumbers, searchForNumber, left, middle - 1);
        }
		return binarySearch(arrayOfNumbers, searchForNumber, middle + 1, right);
	}

	printf("The number %d was not found in the array", searchForNumber);
	return -1;
}

int exponentialSearch(int arrayOfNumbers[], int numberOfElements, int searchForNumber)
{
    // Check if the desired number is on first position
    if (arrayOfNumbers[0] == searchForNumber)
        return 0;
    //ad a variable i for the jump
    int i = 1;
    while (i < numberOfElements && arrayOfNumbers[i] <= searchForNumber)
        {
            // multiply i each iteration
            i = i*2;
        }
    // apply binary search in the interval where the value is between i/2 and i
    return binarySearch(arrayOfNumbers, searchForNumber, 0, numberOfElements - 1);
}

int main(void)
{
	int arrayOfNumbers[] = {1, 4, 9, 15, 22, 25, 38, 42, 77, 85};
	int searchForNumber = 77;

	int numberOfElements = sizeof(arrayOfNumbers) / sizeof(arrayOfNumbers[0]);
	int result = exponentialSearch(arrayOfNumbers, numberOfElements, searchForNumber);
}

304 afișări0 comentarii

Postări recente

Afișează-le pe toate

Weighted Job Scheduling in JAVA

You receive a list of jobs that have three elements: start time, finish time and profit. You have to schedule the jobs with no overlapping, in order to obtain the maximum profit. Solution: 1. static

Tiling Problem in JAVA

You can use a board that is 2 x n size. The tiles are of size 2 x 1. Count the number of ways to tile the board. Tiles can be placed vertically 2 x 1 or horizontally as 1 x 2. Solution: 1. static

bottom of page