Which of the following is the correct recurrence for the worst case of Ternary Search?
(A)
T(n) = T(n/3) + 4, T(1) = 1
(B)
T(n) = T(n/2) + 2, T(1) = 1
(C)
T(n) = T(n + 2) + 2, T(1) = 1
(D)
T(n) = T(n – 2) + 2, T(1) = 1
Answer: (A)
Explanation:
Following is a typical implementation of Binary Search.
// A recursive ternary search function. It returns location of x in // given array arr[l..r] is present, otherwise -1 int ternarySearch(int arr[], int l, int r, int x) { if (r >= l) { int mid1 = l + (r - l)/3; int mid2 = mid1 + (r - l)/3; // If x is present at the mid1 if (arr[mid1] == x) return mid1; // If x is present at the mid2 if (arr[mid2] == x) return mid2; // If x is present in left one-third if (arr[mid1] > x) return ternarySearch(arr, l, mid1-1, x); // If x is present in right one-third if (arr[mid2] < x) return ternarySearch(arr, mid2+1, r, x); // If x is present in middle one-third return ternarySearch(arr, mid1+1, mid2-1, x); } // We reach here when element is not present in array return -1; }
In ternary search, we divide the given array into three parts and determine which has the key (searched element). We can divide the array into three parts by taking mid1 and mid2 which can be calculated as shown below. Initially, l and r will be equal to 0 and n-1 respectively, where n is the length of the array. So the recurrence relation is T(n) = T(n/3) + 4, T(1) = 1
Hence Option (A) is the correct answer.
Quiz of this Question
Please comment below if you find anything wrong in the above post