I have seen many example of binary search,many method how to optimize it,so yesterday my lecturer write code (in this code let us assume that first index starts from 1 and last one is N,so that N is length of array,consider it in pseudo code.code is like this:
L:=1;
R:=N;
while( L<R)
{
m:=div(R+L,2);
if A[m]> x
{
L:=m+1;
}
else
{
R:=m;
}
}
Here we assume that array is A,so lecturer said that we are not waste time for comparing if element is at middle part of array every time,also benefit is that if element is not in array,index says about where it would be located,so it is optimal,is he right?i mean i have seen many kind of binary search from John Bentley for example(programming pearls) and so on,and is this code optimal really?it is written in pascal in my case, but language does not depend.
It really depends on whether you find the element. If you don’t, this will have saved some comparisons. If you could find the element in the first couple of hops, then you’ve saved the work of all the later comparisons and arithmetic. If all the values in the array are distinct, it’s obviously fairly unlikely that you hit the right index early on – but if you have broad swathes of the array containing the same values, that changes the maths.
This approach also means you can’t narrow the range quite as much as you would otherwise – this:
would normally be
… although that would reasonably rarely make a significant difference.
The important point is that this doesn’t change the overall complexity of the algorithm – it’s still going to be O(log N).
That’s true whether you check for equality or not. Every binary search implementation I’ve seen would give that information.