Computer Science, asked by katrine4165, 11 months ago

Given a sorted array of integers, what can be the minimum worst case time complexity to find ceiling of a number x in given array? Ceiling of an element x is the smallest element present in array which is greater than or equal to x. Ceiling is not present if x is greater than the maximum element present in array. For example, if the given array is {12, 67, 90, 100, 300, 399} and x = 95, then output should be 100.

Answers

Answered by VyasNaman
4

Answer:

Given a sorted array of integers, what can be the minimum worst case time complexity to find ceiling of a number x in given array? Ceiling of an element x is the smallest element present in array which is greater than or equal to x. Ceiling is not present if x is greater than the maximum element present in array. For example, if the given array is {12, 67, 90, 100, 300, 399} and x = 95, then output should be 100.

(A) O(LogLogn)

(B) O(n)

(C) O(Logn)

(D) O(Logn * Logn)

Explanation:

We modify standard binary search to find ceiling. The time complexity T(n) can be written as

T(n) <= T(n/2) + O(1)

Solution of above recurrence can be obtained by Master Method. It falls in case 2 of Master Method. Solution is O(Logn).

#include<stdio.h>

/* Function to get index of ceiling of x in arr[low..high]*/

int ceilSearch(int arr[], int low, int high, int x)

{

int mid;

/* If x is smaller than or equal to the first element,

then return the first element */

if(x <= arr[low])

return low;

/* If x is greater than the last element, then return -1 */

if(x > arr[high])

return -1;

/* get the index of middle element of arr[low..high]*/

mid = (low + high)/2; /* low + (high – low)/2 */

/* If x is same as middle element, then return mid */

if(arr[mid] == x)

return mid;

/* If x is greater than arr[mid], then either arr[mid + 1]

is ceiling of x or ceiling lies in arr[mid+1…high] */

else if(arr[mid] < x)

{

if(mid + 1 <= high && x <= arr[mid+1])

return mid + 1;

else

return ceilSearch(arr, mid+1, high, x);

}

/* If x is smaller than arr[mid], then either arr[mid]

is ceiling of x or ceiling lies in arr[mid-1…high] */

else

{

if(mid – 1 >= low && x > arr[mid-1])

return mid;

else

return ceilSearch(arr, low, mid – 1, x);

}

}

/* Driver program to check above functions */

int main()

{

int arr[] = {1, 2, 8, 10, 10, 12, 19};

int n = sizeof(arr)/sizeof(arr[0]);

int x = 20;

int index = ceilSearch(arr, 0, n-1, x);

if(index == -1)

printf("Ceiling of %d doesn't exist in array ", x);

else

printf("ceiling of %d is %d", x, arr[index]);

getchar();

return 0;

}

Answered by Anonymous
2

Answer:

Answer:

Given a sorted array of integers, what can be the minimum worst case time complexity to find ceiling of a number x in given array? Ceiling of an element x is the smallest element present in array which is greater than or equal to x. Ceiling is not present if x is greater than the maximum element present in array. For example, if the given array is {12, 67, 90, 100, 300, 399} and x = 95, then output should be 100.

(A) O(LogLogn)

(B) O(n)

(C) O(Logn)

(D) O(Logn * Logn)

Explanation:

We modify standard binary search to find ceiling. The time complexity T(n) can be written as

T(n) <= T(n/2) + O(1)

Solution of above recurrence can be obtained by Master Method. It falls in case 2 of Master Method. Solution is O(Logn).

#include<stdio.h>

/* Function to get index of ceiling of x in arr[low..high]*/

int ceilSearch(int arr[], int low, int high, int x)

{

int mid;

/* If x is smaller than or equal to the first element,

then return the first element */

if(x <= arr[low])

return low;

/* If x is greater than the last element, then return -1 */

if(x > arr[high])

return -1;

/* get the index of middle element of arr[low..high]*/

mid = (low + high)/2; /* low + (high – low)/2 */

/* If x is same as middle element, then return mid */

if(arr[mid] == x)

return mid;

/* If x is greater than arr[mid], then either arr[mid + 1]

is ceiling of x or ceiling lies in arr[mid+1…high] */

else if(arr[mid] < x)

{

if(mid + 1 <= high && x <= arr[mid+1])

return mid + 1;

else

return ceilSearch(arr, mid+1, high, x);

}

/* If x is smaller than arr[mid], then either arr[mid]

is ceiling of x or ceiling lies in arr[mid-1…high] */

else

{

if(mid – 1 >= low && x > arr[mid-1])

return mid;

else

return ceilSearch(arr, low, mid – 1, x);

}

}

/* Driver program to check above functions */

int main()

{

int arr[] = {1, 2, 8, 10, 10, 12, 19};

int n = sizeof(arr)/sizeof(arr[0]);

int x = 20;

int index = ceilSearch(arr, 0, n-1, x);

if(index == -1)

printf("Ceiling of %d doesn't exist in array ", x);

else

printf("ceiling of %d is %d", x, arr[index]);

getchar();

return 0;

}

Similar questions