Meta binary search (also called one-sided binary search by Steven Skiena in The Algorithm Design Manual on page 134) is a modified form of binary search that incrementally constructs the index of the target value in the array. Like normal binary search, meta binary search takes O(log n) time.
Input: [-10, -5, 4, 6, 8, 10, 11], key_to_search = 10 Output: 5 Input: [-2, 10, 100, 250, 32315], key_to_search = -2 Output: 0
The exact implementation varies, but the basic algorithm has two parts:
- Figure out how many bits are necessary to store the largest array index.
- Incrementally construct the index of the target value in the array by determining whether each bit in the index should be set to 1 or 0.
- Store number of bits to represent the largest array index in variable lg
- Use lg to start off the search in a for loop
- If element is found return pos
- Otherwise incrementally construct index to reach the target value in the for loop
- If element found return pos otherwise -1
Below is the implementation of the above approach:
= 0; $i–)
if ($A[$pos] == $key_to_search)
// Incrementally construct the
// index of the target value
$new_pos = $pos | (1 << $i); // find the element in one // direction and update $position if (($new_pos < $n) && ($A[$new_pos] <= $key_to_search)) $pos = $new_pos; } // if element found return $pos // otherwise -1 return (($A[$pos] == $key_to_search) ? $pos : -1); } // Driver code $A = [ -2, 10, 100, 250, 32315 ]; $ans = bsearch($A, 10, 5); echo $ans; // This code is contributed by AdeshSingh1 ?>
- Why is Binary Search preferred over Ternary Search?
- Linear Search vs Binary Search
- Interpolation search vs Binary search
- Binary Search in PHP
- Binary Search
- Binary Search using pthread
- Binary Search in Java
- Uniform Binary Search
- Variants of Binary Search
- The Ubiquitous Binary Search | Set 1
- Binary Search a String
- Complexity Analysis of Binary Search
- Binary Search (bisect) in Python
- Randomized Binary Search Algorithm
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.