刚看了算法导论的循环不变式的疑惑
原因:之所以会去看循环不变性,是突然想到,要如何证明自己的递归算法的正确性,于是看着看着就看到了循环不变式,问题就来了。分析:
一直在想,作者想给我们传达什么意思,什么叫做不变,不变在哪里,因为书中只给出了这个所谓的循环不变式的三个性质,所以一直纳闷,作者是怎么定义这个循环不变式的,想了想说说自己的见解,也不知是不是就是作者要表达的意思。如理解有错,请指教。
Definition:所谓的循环不变式,是一个笼统的说法,是一个整体上观察的整体性质不变,如书中举的例子(插入排序),其整体性质就是在插入之前,前面已经是排好顺序的了,这就是它不变的地方。也就是比如 5 2 4 6 1 3,再排序起初,5是排好序的(单5一个当然是排好序的),从第二开始拿出,插入之后,成为2 5,也是排好序的,接下来当第3个拿来时是4它前面也是排好序的了(2 5),所以能保证每次插入前都是排好序的。也就是说插入排序的不变,不变在,在待排结点之前前面的结点已经是排好序的了。
而循环不变式有三个性质(简单说,想了解自己看算法导论):
1.初始正确。2.保持(其实也就是保持要解决问题的不变性)3.终止,即循环结束。
而证明上面的插入排序的正确性,关键是保证了,1,2的正确性,到3终止时,就能得出结果(这里就是全部排好序了)。个人觉得三个要证明第2个才是最重要的,第2而证明了,不久可以由终止条件推出结果了吗?反正书上是说第3个最重要。这是我的理解,对其“不变”所指意思的理解。