Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.