binary search - cse.chalmers.se › edu › course › dit960 › slides › 3.pdf · binary search...
TRANSCRIPT
![Page 1: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/1.jpg)
Binary search
![Page 2: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/2.jpg)
Searching
Suppose I give you an array, and ask you to find if a particular value is in it, say 4.
5 3 9 2 8 7 3 2 1 4
The only way is to look at each element in turn.This is called linear search.You might have to look at every element before you find the right one.
![Page 3: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/3.jpg)
Searching
But what if the array is sorted?
1 2 2 3 3 4 5 7 8 9
Then we can use binary search.
![Page 4: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/4.jpg)
Binary search
Suppose we want to look for 4.We start by looking at the element half way along the array, which happens to be 3.
1 2 2 3 3 4 5 7 8 9
![Page 5: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/5.jpg)
Binary search
3 is less than 4.Since the array is sorted, we know that 4 must come after 3.We can ignore everything before 3.
1 2 2 3 3 4 5 7 8 9
![Page 6: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/6.jpg)
Binary search
Now we repeat the process.We look at the element half way along what's left of the array. This happens to be 7.
1 2 2 3 3 4 5 7 8 9
![Page 7: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/7.jpg)
Binary search
7 is greater than 4.Since the array is sorted, we know that 4 must come before 7.We can ignore everything after 7.
1 2 2 3 3 4 5 7 8 9
![Page 8: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/8.jpg)
Binary search
We repeat the process.We look half way along the array again.We find 4!
1 2 2 3 3 4 5 7 8 9
![Page 9: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/9.jpg)
Performance of binary search
Binary search repeatedly chops the array in half● If we double the size of the array, we need to look at
one more array element● With an array of size 2n, after n tries, we are down to 1
element● On an array of size n takes O(log n) time!
On an array of a billion elements, need to search 30 elements(compared to a billion tries for linear search!)
![Page 10: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/10.jpg)
Implementing binary search
Keep two indices lo and hi. They represent the part of the array to search.
Let mid = (lo + hi) / 2 and look at a[mid] – then either set lo = mid+1, or hi = mid-1, depending on the value of a[mid]
1 2 2 3 3 4 5 7 8 9
lo himid
![Page 11: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/11.jpg)
Implementing binary search
Keep two indices lo and hi. They represent the part of the array to search.
Let mid = (lo + hi) / 2 and look at a[mid] – then either set lo = mid+1, or hi = mid-1, depending on the value of a[mid]
1 2 2 3 3 4 5 7 8 9
lo hi mid
hi = mid - 1
![Page 12: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/12.jpg)
Sorting
![Page 13: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/13.jpg)
Sorting
5 3 9 2 8 7 3 2 1 4
1 2 2 3 3 4 5 7 8 9
Zillions of sorting algorithms (bubblesort, insertion sort, selection sort, quicksort, heapsort, mergesort, shell sort, counting sort, radix sort, …)
![Page 14: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/14.jpg)
Insertion sort
Imagine someone is dealing you cards. Whenever you get a new card you put it into the right place in your hand:
This is the idea of insertion sort.
![Page 15: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/15.jpg)
Insertion sort
Sorting :
Start by “picking up” the 5:
5 3 9 2 8
5
![Page 16: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/16.jpg)
Insertion sort
Sorting :
Then insert the 3 into the right place:
5 3 9 2 8
3 5
![Page 17: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/17.jpg)
Insertion sort
Sorting :
Then the 9:
5 3 9 2 8
3 5 9
![Page 18: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/18.jpg)
Insertion sort
Sorting :
Then the 2:
5 3 9 2 8
2 3 5 9
![Page 19: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/19.jpg)
Insertion sort
Sorting :
Finally the 8:
5 3 9 2 8
2 3 5 8 9
![Page 20: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/20.jpg)
Complexity of insertion sort
Insertion sort does n insertions for an array of size nDoes this mean it is O(n)? No! An insertion is not constant time.To insert into a sorted array, you must move all the elements up one, which is O(n).Thus total is O(n2).
![Page 21: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/21.jpg)
In-place insertion sort
This version of insertion sort needs to make a new array to hold the resultAn in-place sorting algorithm is one that doesn't need to make temporary arrays● Has the potential to be more efficient
Let's make an in-place insertion sort!Basic idea: loop through the array, and insert each element into the part which is already sorted
![Page 22: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/22.jpg)
In-place insertion sort
The first element of the array is sorted:
5 3 9 2 8
5 3 9 2 8
White bit: sorted
![Page 23: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/23.jpg)
In-place insertion sort
Insert the 3 into the correct place:
5 3 9 2 8
3 5 9 2 8
![Page 24: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/24.jpg)
In-place insertion sort
Insert the 9 into the correct place:
3 5 9 2 8
3 5 9 2 8
![Page 25: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/25.jpg)
In-place insertion sort
Insert the 2 into the correct place:
3 5 9 2 8
2 3 5 9 8
![Page 26: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/26.jpg)
In-place insertion sort
Insert the 8 into the correct place:
2 3 5 9 8
2 3 5 8 9
![Page 27: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/27.jpg)
In-place insertion
One way to do it: repeatedly swap the element with its neighbour on the left, until it's in the right position
2 3 5 9 4
2 3 5 4 9
![Page 28: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/28.jpg)
In-place insertion
2 3 4 5 9
2 3 5 4 9
while n > 0 and array[n] > array[n-1] swap array[n] and array[n-1] n = n-1
![Page 29: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/29.jpg)
In-place insertion
An improvement: instead of swapping, move elements upwards to make a “hole” where we put the new value
2 3 5 9 4
2 3 5 9
![Page 30: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/30.jpg)
In-place insertion
2 3 5 9 4
2 3 5 9
2 3 5 9
![Page 31: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/31.jpg)
In-place insertion sort
for i = 1 to n insert array[i] into array[0..i)
An aside: we have the invariant that array[0..i) is sorted● An invariant is something that holds whenever the
loop body starts to run● Initially, i = 1 and array[0..1) is sorted● As the loop runs, more and more of the array
becomes sorted● When the loop finishes, i = n, so array[0..n) is
sorted – the whole array!
This notationmeans
0, 1, …, i-1
![Page 32: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/32.jpg)
Insertion sort
O(n2) in the worst caseO(n) in the best case (a sorted array)Actually the fastest sorting algorithm in general for small lists – it has low constant factors
![Page 33: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/33.jpg)
Divide and conquer
Very general name for a type of recursive algorithmYou have a problem to solve.● Split that problem into smaller subproblems● Recursively solve those subproblems● Combine the solutions for the subproblems to
solve the whole problem
![Page 34: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/34.jpg)
To solve this...
![Page 35: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/35.jpg)
1. Split the probleminto subproblems
2. Recursively solvethe subproblems
3. Combinethe solutions
![Page 36: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/36.jpg)
Mergesort
We can merge two sorted lists into one in linear time:
792 3 5 8 1 2 3 4
7 92 3 5 81 2 3 4
![Page 37: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/37.jpg)
Mergesort
A divide-and-conquer algorithmTo mergesort a list:● Split the list into two equal parts● Recursively mergesort the two parts● Merge the two sorted lists together
![Page 38: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/38.jpg)
Mergesort
1. Split the list into two equal parts
485 3 9 2 7 3 2 1
85 3 9 2 47 3 2 1
![Page 39: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/39.jpg)
Mergesort
2. Recursively mergesort the two parts
85 3 9 2 47 3 2 1
853 92 4 7321
![Page 40: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/40.jpg)
Mergesort
3. Merge the two sorted lists together
792 3 5 8 1 2 3 4
7 92 3 5 81 2 3 4
![Page 41: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/41.jpg)
Complexity of mergesort
An array of size n gets split into two arrays of size n/2:
n
n/2 n/2
![Page 42: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/42.jpg)
Complexity of mergesort
The recursive calls will split these arrays into four arrays of size n/4:
n
n/2 n/2
n/4 n/4 n/4 n/4
![Page 43: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/43.jpg)
n
n/2 n/2
n/4 n/4 n/4 n/4
n/8 n/8 n/8 n/8 n/8 n/8 n/8 n/8
log n“levels”
O(n) time per level
Total time isO(n log n)!
... ... ... ... ... ... ... ...
![Page 44: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/44.jpg)
Complexity analysis
Mergesort's complexity is O(n log n)● Recursion goes log n “levels” deep● At each level there is a total of O(n) work
General “divide and conquer” theorem:● If an algorithm does O(n) work to split the input
into two pieces of size n/2 (or k pieces of size n/k)...
● ...then recursively processes those pieces...● ...then does O(n) work to recombine the results...● ...then the complexity is O(n log n)
![Page 45: Binary search - cse.chalmers.se › edu › course › DIT960 › slides › 3.pdf · Binary search Suppose we want to look for 4. We start by looking at the element half way along](https://reader035.vdocuments.site/reader035/viewer/2022062603/5f1db6e7dc44f7638e72722c/html5/thumbnails/45.jpg)
Sorting so far
There are a huge number of sorting algorithms● No single best one, each has advantages
(hopefully) and disadvantages
Insertion sort:● O(n2) so not good overall● Good on small arrays though – low constant factors
Merge sort:● O(n log n), hooray!● But not in-place and high constant factors