loop invariants and binary search
DESCRIPTION
Loop Invariants and Binary Search. Chapter 4.4, 5.1. Outline. Iterative Algorithms, Assertions and Proofs of Correctness Binary Search: A Case Study. Outline. Iterative Algorithms, Assertions and Proofs of Correctness Binary Search: A Case Study. Assertions. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/1.jpg)
Loop Invariants and Binary Search
Chapter 4.4, 5.1
![Page 2: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/2.jpg)
Outline
Iterative Algorithms, Assertions and Proofs of Correctness Binary Search: A Case Study
![Page 3: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/3.jpg)
Outline
Iterative Algorithms, Assertions and Proofs of Correctness Binary Search: A Case Study
![Page 4: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/4.jpg)
AssertionsAn assertion is a statement about the
state of the data at a specified point in your algorithm.
An assertion is not a task for the algorithm to perform.
You may think of it as a comment that is added for the benefit of the reader.
![Page 5: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/5.jpg)
Loop Invariants Binary search can be implemented as an iterative
algorithm (it could also be done recursively). Loop Invariant: An assertion about the current state
useful for designing, analyzing and proving the correctness of iterative algorithms.
![Page 6: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/6.jpg)
Other Examples of Assertions
Preconditions: Any assumptions that must be true about the input instance.
Postconditions: The statement of what must be true when the algorithm/program returns.
Exit condition: The statement of what must be true to exit a loop.
![Page 7: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/7.jpg)
Iterative Algorithms
Take one step at a time
towards the final destination
loop (done)
take step
end loop
![Page 8: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/8.jpg)
From the Pre-Conditions on the input instance we must establish the loop invariant.
Establishing Loop Invariant
![Page 9: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/9.jpg)
Maintain Loop Invariant
Suppose that We start in a safe location (pre-condition) If we are in a safe location, we always step
to another safe location (loop invariant)
Can we be assured that the computation will always be in a safe location?
By what principle?
![Page 10: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/10.jpg)
Maintain Loop Invariant• By Induction the computation will always be in a safe location.
(0)
, ( )
, ( ) ( 1)
S
i S i
i S i S i
![Page 11: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/11.jpg)
Ending The Algorithm Define Exit Condition
Termination: With sufficient progress,
the exit condition will be met.
When we exit, we know exit condition is true loop invariant is true
from these we must establish
the post conditions.Exit
Exit
0 km Exit
![Page 12: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/12.jpg)
Definition of Correctness<PreCond> & <code> <PostCond>
If the input meets the preconditions, then the output must meet the postconditions.
If the input does not meet the preconditions, then nothing is required.
![Page 13: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/13.jpg)
Outline
Iterative Algorithms, Assertions and Proofs of Correctness Binary Search: A Case Study
![Page 14: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/14.jpg)
Define Problem: Binary Search
PreConditions Key 25 Sorted List
PostConditions Find key in list (if there).
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
![Page 15: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/15.jpg)
Define Loop Invariant
Maintain a sublist. If the key is contained in the original list, then the key is
contained in the sublist.
key 25
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
![Page 16: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/16.jpg)
Define Step
Cut sublist in half. Determine which half the key would be in. Keep that half.
key 25
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
If key ≤ mid,then key is inleft half.
If key > mid,then key is inright half.
mid
![Page 17: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/17.jpg)
Define Step
It is faster not to check if the middle element is the key. Simply continue.
key 43
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
If key ≤ mid,then key is inleft half.
If key > mid,then key is inright half.
![Page 18: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/18.jpg)
Make Progress
The size of the list becomes smaller.
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
79 km
75 km
![Page 19: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/19.jpg)
Exit Condition
If the key is contained in the original list,
then the key is contained in the sublist.
Sublist contains one element.
Exit
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
0 km
• If element = key, return associated entry.
• Otherwise return false.
key 25
![Page 20: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/20.jpg)
Running Time
The sublist is of size n, n/2, n/4, n/8,…,1
Each step O(1) time.
Total = O(log n)
key 25
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
If key ≤ mid,then key is inleft half.
If key > mid,then key is inright half.
![Page 21: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/21.jpg)
Running Time
Binary search can interact poorly with the memory hierarchy (i.e. caching), because of its random-access nature.
It is common to abandon binary searching for linear searching as soon as the size of the remaining span falls below a small value such as 8 or 16 or even more in recent computers.
![Page 22: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/22.jpg)
<precondition>: A[1..n] is sorted in non-decreasing order<postcondition>: I f is in A[1..n], algorithm returns
1, its location
loop-invariant>: I f is
BinarySea
in
rch(A[1..n],
whil
)
e p q
key
keyq p
e
n
k y
if [ ]
els
2
1
return( )
return("Key n
A[1..n], then
e
endendif [ ]
end
is in A[p..
ot in list")
q]p qmid
q mid
p mi
key A m
key
id
key A p
e
d
plse
![Page 23: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/23.jpg)
Simple, right?
Although the concept is simple, binary search is notoriously easy to get wrong.
Why is this?
![Page 24: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/24.jpg)
Boundary Conditions
The basic idea behind binary search is easy to grasp. It is then easy to write pseudocode that works for a
‘typical’ case. Unfortunately, it is equally easy to write pseudocode that
fails on the boundary conditions.
![Page 25: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/25.jpg)
1
if [ ]
else
end
q mid
p
key A mid
mid
Boundary Conditions
1
if [ ]
else
end
q mid
p
key A mid
mid
or
What condition will break the loop invariant?
![Page 26: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/26.jpg)
Boundary Conditions
key 36
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
mid
sC eod lek cey t A[m rige hid] t lf: ha
Bug!!
![Page 27: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/27.jpg)
1
if [ ]
else
end
q mid
p
key A mid
mid
Boundary Conditions
1
if [ ]
else
end
q mid
p
key A mid
mid
if < [ ]
else
end
1q mid
p
key A mid
mid
OK OK Not OK!!
![Page 28: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/28.jpg)
key 25
3 5 6 13 18 21 21 25 36 43 49 51 53 60 72 74 83 88 91 95
Boundary Conditions
mid 2 p q mid
2 p q
or
Shouldn’t matter, right? Select mid 2p q
![Page 29: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/29.jpg)
6 74
Boundary Conditions
key 25
9591888372605351494336252121181353
If key ≤ mid,then key is inleft half.
If key > mid,then key is inright half.
midSelect mid 2
p q
![Page 30: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/30.jpg)
2518 74
Boundary Conditions
key 25
9591888372605351494336212113653
If key ≤ mid,then key is inleft half.
If key > mid,then key is inright half.
midSelect mid 2
p q
![Page 31: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/31.jpg)
2513 74
Boundary Conditions
key 25
9591888372605351494336212118653
If key ≤ mid,then key is inleft half.
If key > mid,then key is inright half.
•Another bug!
No progress toward goal:
Loops Forever!
midSelect mid 2
p q
![Page 32: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/32.jpg)
if [
mid
]2
1else
end
key A mi
p q
q mid
p mid
d
Boundary Conditions
if [
mid
]2
1else
end
key A mi
p q
q mid
p mid
d
if < [
mid 2
1]
else
end
key A mid
p q
q mid
p mid
OK OK Not OK!!
![Page 33: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/33.jpg)
if [
mid
]2
1else
end
key A mi
p q
q mid
p mid
d
Getting it Right
How many possible algorithms?
How many correct algorithms?
Probability of guessing correctly?
midr 2o ? p q
if < [ or ?]key A mid
elseo
end
1r q mid
p mid
![Page 34: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/34.jpg)
Alternative Algorithm: Less Efficient but More Clear
Still (log ), but with slightly larger constant.n
![Page 35: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/35.jpg)
A volunteer, please.
Card Trick
![Page 36: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/36.jpg)
Pick a Card
DoneThanks to J. Edmonds for this example.
![Page 37: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/37.jpg)
Loop Invariant:The selected card is one
of these.
![Page 38: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/38.jpg)
Which column?
left
![Page 39: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/39.jpg)
Loop Invariant:The selected card is one
of these.
![Page 40: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/40.jpg)
Selected column is placed
in the middle
![Page 41: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/41.jpg)
I will rearrange the cards
![Page 42: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/42.jpg)
Relax Loop Invariant:I will remember the same about each
column.
![Page 43: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/43.jpg)
Which column?
right
![Page 44: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/44.jpg)
Loop Invariant:The selected card is one
of these.
![Page 45: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/45.jpg)
Selected column is placed
in the middle
![Page 46: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/46.jpg)
I will rearrange the cards
![Page 47: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/47.jpg)
Which column?
left
![Page 48: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/48.jpg)
Loop Invariant:The selected card is one
of these.
![Page 49: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/49.jpg)
Selected column is placed
in the middle
![Page 50: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/50.jpg)
Here is your card.
Wow!
![Page 51: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/51.jpg)
Ternary Search
Loop Invariant: selected card in central subset of cards
How many iterations are required to guarantee success?
1Size of subset = / 3
wheretotal number of cards
iteration index
in
ni
![Page 52: Loop Invariants and Binary Search](https://reader036.vdocuments.mx/reader036/viewer/2022062811/568160a6550346895dcfc895/html5/thumbnails/52.jpg)
Learning Outcomes
From this lecture, you should be able to: Use the loop invariant method to think about iterative algorithms. Prove that the loop invariant is established. Prove that the loop invariant is maintained in the ‘typical’ case. Prove that the loop invariant is maintained at all boundary
conditions. Prove that progress is made in the ‘typical’ case Prove that progress is guaranteed even near termination, so that
the exit condition is always reached. Prove that the loop invariant, when combined with the exit
condition, produces the post-condition. Trade off efficiency for clear, correct code.