1.

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.

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 asT(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/* 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;elsereturn 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;elsereturn 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);elseprintf("ceiling of %d is %d", x, arr[index]);getchar();return 0;}



Discussion

No Comment Found