Binary Chop 9步走
1. Pre Post
Pre: 题中信息
Post: 要满足的条件 ∧ i的范围
2. Rewrite Post
改成Binary形式:
| ① | ② | ③ |
|---|---|---|
| Post第一部分 | j = i+1 | 0 ≤ i < j ≤ N(或者给定数字) |
3. Choose invariants
P0: Re-Post ①
P1: Re-Post ③
4. Establish
5. Guard
6. vf.
7. Loop body
| Case i := h | Case j := h |
|---|---|
| (i := h).P0 = { text substitution } Post①中i替换成h | (j := h).P0 = { text substitution } Post①中j替换成h |
8. Putting it together
i, j := 0, 1000
;do j ≠ i+1 →
“choose h so that i < h < j”
;if Post①中i替换成h → i := h
[] Post①中j替换成h → j := h
fi
od
9. The finished algorithm
用h := (i+j) div 2 替换 “choose h so that i < h < j”,剩下照抄
i, j := 0, 1000
;do j ≠ i+1 →
h := (i+j) div 2
;if Post①中i替换成h → i := h
[] Post①中j替换成h → j := h
fi
od