07-Linear and Binary Search
07-Linear and Binary Search
Algorithms
Lecture 7 – Searching Algorithms
1 Linear Search
2 Binary Search
Linear Search in Array
0, 1, 1, 2, 3, 5, 8, . . .
LinearSearch(A, low , high, key )
if high < low :
return NOT_FOUND
if A[low ] = key :
return low
return LinearSearch(A, low + 1, high, key )
LinearSearch(A, low , high, key )
if high < low :
return NOT_FOUND
if A[low ] = key :
return low
return LinearSearch(A, low + 1, high, key )
n
n−1
n−2
...
2
1
0
Runtime of Linear Search
work
n c
n−1 c
n−2 c
...
2 c
1 c
0 c
Runtime of Linear Search
work
n c
n−1 c
n−2 c
...
2 c
1 c
0 c
∑︀n
Total: i=0 c = Θ(n)
Iterative Version
1 Linear Search
2 Binary Search
Searching Sorted Data
Searching in a sorted array
Input: A sorted array A[low . . . high]
(∀low ≤ i < high : A[i] ≤ A[i + 1]).
A key k.
Output: An index, i, (low ≤ i ≤ high) where
A[i] = k.
Otherwise, the greatest index i,
where A[i] < k.
Otherwise (k < A[low ]), the result is
low − 1.
Searching in a Sorted Array
Example
3 5 8 20 20 50 60
1 2 3 4 5 6 7
Searching in a Sorted Array
Example
search(2) → 0
3 5 8 20 20 50 60
1 2 3 4 5 6 7
Searching in a Sorted Array
Example
search(2) → 0
search(3) → 1
3 5 8 20 20 50 60
1 2 3 4 5 6 7
Searching in a Sorted Array
Example
search(2) → 0
search(3) → 1
search(4) → 1
3 5 8 20 20 50 60
1 2 3 4 5 6 7
Searching in a Sorted Array
Example
search(2) → 0 search(20) → 4
search(3) → 1
search(4) → 1
3 5 8 20 20 50 60
1 2 3 4 5 6 7
Searching in a Sorted Array
Example
search(2) → 0 search(20) → 4
search(3) → 1 search(20) → 5
search(4) → 1
3 5 8 20 20 50 60
1 2 3 4 5 6 7
Searching in a Sorted Array
Example
search(2) → 0 search(20) → 4
search(3) → 1 search(20) → 5
search(4) → 1 search(60) → 7
3 5 8 20 20 50 60
1 2 3 4 5 6 7
Searching in a Sorted Array
Example
search(2) → 0 search(20) → 4
search(3) → 1 search(20) → 5
search(4) → 1 search(60) → 7
search(90) → 7
3 5 8 20 20 50 60
1 2 3 4 5 6 7
BinarySearch(A, low , high, key )
BinarySearch(A, low , high, key )
if high < low :
return low − 1
BinarySearch(A, low , high, key )
if high < low :
⌊︁ low − 1
return ⌋︁
high−low
mid ← low + 2
BinarySearch(A, low , high, key )
if high < low :
⌊︁ low − 1
return ⌋︁
high−low
mid ← low + 2
if key = A[mid]:
return mid
BinarySearch(A, low , high, key )
if high < low :
⌊︁ low − 1
return ⌋︁
high−low
mid ← low + 2
if key = A[mid]:
return mid
else if key < A[mid]:
return BinarySearch(A, low , mid − 1, key )
BinarySearch(A, low , high, key )
if high < low :
⌊︁ low − 1
return ⌋︁
high−low
mid ← low + 2
if key = A[mid]:
return mid
else if key < A[mid]:
return BinarySearch(A, low , mid − 1, key )
else:
return BinarySearch(A, mid + 1, high, key )
Example: Searching for the key 50
1 2 3 4 5 6 7 8 9 10 11
3 5 8 10 12 15 18 20 20 50 60
Example: Searching for the key 50
1 2 3 4 5 6 7 8 9 10 11
3 5 8 10 12 15 18 20 20 50 60
low high
Example: Searching for the key 50
1 2 3 4 5 6 7 8 9 10 11
3 5 8 10 12 15 18 20 20 50 60
1 2 3 4 5 6 7 8 9 10 11
3 5 8 10 12 15 18 20 20 50 60
1 2 3 4 5 6 7 8 9 10 11
3 5 8 10 12 15 18 20 20 50 60
(︁⌊︁ n ⌋︁)︁
T (n) = T +c
2
Binary Search Recurrence Relation
(︁⌊︁ n ⌋︁)︁
T (n) = T +c
2
Binary Search Recurrence Relation
(︁⌊︁ n ⌋︁)︁
T (n) = T +c
2
T (0) = c
Runtime of Binary Search
n
n/2
n/4
...
2
1
0
Runtime of Binary Search
work
n c
n/2 c
n/4 c
...
2 c
1 c
0 c
Runtime of Binary Search
work
n c
n/2 c
n/4 c
...
2 c
1 c
0 c
∑︀log2 n
Total: i=0 c = Θ(log2 n)
Iterative Version
BinarySearchIt(A, low , high, key )
while low⌊︁ ≤ high: ⌋︁
high−low
mid ← low + 2
Iterative Version
BinarySearchIt(A, low , high, key )
while low⌊︁ ≤ high: ⌋︁
high−low
mid ← low + 2
if key = A[mid ]:
return mid
Iterative Version
BinarySearchIt(A, low , high, key )
while low⌊︁ ≤ high: ⌋︁
high−low
mid ← low + 2
if key = A[mid ]:
return mid
else if key < A[mid ]:
high = mid − 1
Iterative Version
BinarySearchIt(A, low , high, key )
while low⌊︁ ≤ high: ⌋︁
high−low
mid ← low + 2
if key = A[mid ]:
return mid
else if key < A[mid ]:
high = mid − 1
else:
low = mid + 1
Iterative Version
BinarySearchIt(A, low , high, key )
while low⌊︁ ≤ high: ⌋︁
high−low
mid ← low + 2
if key = A[mid ]:
return mid
else if key < A[mid ]:
high = mid − 1
else:
low = mid + 1
return low − 1
Real-life Example
english spanish
sorted sorted
2 1
1 3
3 2
Real-life Example
english french italian german spanish
house maison casa Haus casa
chair chaise sedia Sessel silla
pimple bouton foruncolo Pickel espenilla
english spanish
sorted sorted
2 1
1 3
3 2
Real-life Example
english french italian german spanish
house maison casa Haus casa
chair chaise sedia Sessel silla
pimple bouton foruncolo Pickel espenilla
english spanish
sorted sorted
2 1
1 3
3 2
Real-life Example
english french italian german spanish
house maison casa Haus casa
chair chaise sedia Sessel silla
pimple bouton foruncolo Pickel espenilla
english spanish
sorted sorted
2 1
1 3
3 2
Real-life Example
english french italian german spanish
house maison casa Haus casa
chair chaise sedia Sessel silla
pimple bouton foruncolo Pickel espenilla
english spanish
sorted sorted
2 1
1 3
3 2
Real-life Example
english french italian german spanish
house maison casa Haus casa
chair chaise sedia Sessel silla
pimple bouton foruncolo Pickel espenilla
english spanish
sorted sorted
2 1
1 3
3 2
Real-life Example
english french italian german spanish
house maison casa Haus casa
chair chaise sedia Sessel silla
pimple bouton foruncolo Pickel espenilla
english spanish
sorted sorted
2 1
1 3
3 2
Summary
Summary