循环不变量证明循环正确性的简单理解("Introduction to Algorithms"笔记一)
Posted on 2009-02-15 19:33 kethin 阅读(2345) 评论(0) 收藏 举报要证明循环正确,必须在以下三个环节中,考虑 循环不变量的真假。
循环初始状态:在所有循环体执行前,循环不变量成立。
循环进行时:如果在一个循环体开始执行之前,不变量成立,那么在下一个循环体执行之前,不变量仍然成立。
循环终结后:当整个循环结束时,不变量可以直接说明算法的正确性。
以Insertsort为例,要证明其外循环的正确性。
INSERTION-SORT(A)
1 for j ← 2 to length[A]
2 do key ← A[j]
3 ▹ Insert A[j] into the sorted sequence A[1 ‥ j - 1].
4 i ← j - 1
5 while i > 0 and A[i] > key
6 do A[i + 1] ← A[i]
7 i ← i - 1
8 A[i + 1] ← key
首先,用语言来描述本例的“循环不变量”——循环指针j之前,即A[1....j-1]这一部分,是 已经确认为有序的部分。
初始状态: j为2时,A[1...j-1] 就是 A[1],明显有序。不变量成立
进行时:我们来判断,每一步循环体执行后,A[1...j-1]是否仍然有序。 (过程略)每轮循环体执行后,不变量保持成立。
循环结束后:j此时为n+1, A[1....j-1]为A[1....n],即整个数组,根据以上两条,不变量至此仍然是成立的,即整个数组为有序状态,达到算法预期的目的,可以判断循环正确!
浙公网安备 33010602011771号