插入排序证明引发的对于循环不变式的定义

来源:互联网 发布:软件wbs 编辑:程序博客网 时间:2024/06/03 12:59

对插入排序正确性的证明

设一个无序数组为Array,长度为n(n > 1);

当对数组第二个元素排序时,依照排序算法,当n = 2时算法成立;
……
当对n > 2时进行数学归纳:
倘若n-1是已经排好序的,根据插入排序,算法将对n也成立;

证毕

循环不变式的定义

来自算法导论上的讨论:
有没有注意到这个算法在想法上类似于多米诺骨牌:
我们在推倒多米诺骨牌的第一个时后面紧接着的牌就会全部倒下.
1.第2张多米诺骨牌由于第一张而倒下.

k+1.第k+1张多米诺骨牌由于第k张而倒下.

直到结束

回到插入排序的讨论,也就是说第k+1的正确性依赖于前k次的结果,而k的正确性依赖第k-1的正确性…直到一个起始的位置位置;只要我们要保证起始的正确性与每次抽象讨论的第k+1正确性,即可保证对于任意的自然数都成立.

讨论至此,我们似乎看到这些类似情况的相同点,即依赖抽象命题p (k),并且若是p(k)为真则p(k+1)为真,然后从1到无穷使k遍历,使得对于任意自然数都成立。
那么我们给循环不变式下一个定义

定义:
循环不变式是一个依赖于自然数的数学命题P,P满足对于任意自然数k,若是P(K)为真则P(K+1)为真。

0 0
原创粉丝点击