Presentation is loading. Please wait.

Presentation is loading. Please wait.

Linear and Binary Search

Similar presentations


Presentation on theme: "Linear and Binary Search"— Presentation transcript:

1 Linear and Binary Search
CS100A Lecture 14, 20 October 1998 Linear and Binary Search Base-2 logarithms Linear Search: Find (the value of) x is array b. This description is too vague, for several reasons: How are we to indicate that x appears in b? What if it appears more than once in b? What is to be done if x is not in b? In general, when approaching a new programming job, the first task is to make the specification of the job as precise as possible. CS100A, Lecture 14, 20 October 1998

2 One way to specify the task:
Write a method that returns the index of the first element of b that equals x. If x does not occur in b, return b.length. Example: b = {1, 2, 8, 5, 2, 9} (so b.length = 6) If x is 1, return 0 If x is 2, return 1 If x is 5, return 3 if x is 3, return 6 // return value i that satisfies: 0<=i<=b.length, // x not in b[0..i-1], // (i = b.length or x=b[i]) public static int linearSearch (int [ ] b, int x) Need a loop. It will compare elements of b with x, beginning with b[0], b[1], … Invariant: 0<=i<=b.length and x not in b[0..i-1] x is not here i b.length b CS100A, Lecture 14, 20 October 1998

3 i= 0; // Inv: 0 i b.length while ( ) { b x is not here }
CS100A, Lecture 14, 20 October 1998

4 // return the value i that satisfies: 0<=i<=b.length,
// x not in b[0..i-1], and (i = b.length or x=b[i]) public static int linearSearch (int [ ] b, int x) { int i= 0; // Inv: 0<=i<=b.length and x not in b[0..i-1], while (i < b.length && x != b[i]) i= i+1; return i; } Alternative method body // Inv: 0<=i<=b.length and x not in b[0..i-1], while (i < b.length) { if (x == b[i]) return i; Worst case, makes up to b.length array comparisons. CS100A, Lecture 14, 20 October 1998

5 Find x in sorted (in ascending order) array b.
Binary search Find x in sorted (in ascending order) array b. Like a search in a telephone directory Specification. Store an integer in k to truthify: b[0..k] <= x < b[k+1..b.length-1] means that every value means that every value in here is <= x here is > x Examples: b x k <= x >x k b.length b CS100A, Lecture 14, 20 October 1998

6 Store an integer in k to truthify
Binary search Store an integer in k to truthify b[0..k] <= x < b[k+1..b.length-1] Invariant k= ; j= ; while ( ) { int e = ; // We know that -1 <= k < e < j <= b.length if ( b[e] <= x ) else } <= x >x k b.length b k j b.length <= x >x b CS100A, Lecture 14, 20 October 1998

7 // Given sorted b, return the integer k that satisfies
Binary search // Given sorted b, return the integer k that satisfies // b[0..k] <= x < b[k+1..b.length-1] public static int binarySearch( int [ ] b) { int k= -1; int j= b.length; // Invariant: -1 <= k < j <= b.length and // b[0..k] <= x < b[k+1..b.length] while (k+1 != j) { int e = (k+j)/2; // We know -1 <= k < e < j <= b.length if ( b[e] <= x ) k= e; else j= e; } return k; CS100A, Lecture 14, 20 October 1998

8 Points about this binary search of a sorted array
It works when the array is empty (b.length = 0) --return -1. If x is in b, finds its rightmost occurrence If x is not in b, finds position where it belongs In general, it’s faster than a binary search that stops as soon as x is found. The latter kind of binary search needs an extra test (x = b[k]) in the loop body, which makes each iteration slower; however, stopping as soon as x is found can be shown to save only one iteration (on the average). It’s easy to verify correctness of the algorithm --to see that it works. You should memorize the specification and the development of the algorithm. CS100A, Lecture 14, 20 October 1998

9 How fast is binary search?
b.length no.of iterations log(b.length+1) = 1 = 3 = 7 = 15 = = = j is the “base 2 logarithm of 2j. m is the base 10 logarithm of 10m. To search an array of a million entries using linear search may require a million iterations of the loop. To search an array of a million entries using binary search requires only 20 iteration! Linear search is a linear algorithm; the time it takes is proportional in the worst case to the size of the array. Binary search is a logarithmic algoririthm; the time it takes is proportional in the worst case to the size of the array. CS100A, Lecture 14, 20 October 1998


Download ppt "Linear and Binary Search"

Similar presentations


Ads by Google