为简单程序(如访谈算法)构造不变量的提示是什么?

时间:2016-07-13 15:48:30

标签: algorithm invariants loop-invariant

我一直在想如何证明一个简单程序的正确性。例如,像First Missing Positive这样的面试问题。该计划如下:

public class Solution{
    public int firstMissingPositive(int[] A){
        int i = 0;
        while(i < A.length){
            if(A[i] != (i+1) && A[i] >= 1 && A[i] <= A.length && A[A[i]-1] != A[i]){
                int tmp = A[A[i]-1];
                A[A[i]-1] = A[i];
                A[i] = tmp;
            }
            else{
                i++;
            }
        }
        for(i = 0; i < A.length; i++){
            if(A[i] != (i+1))
                return i+1;
        }
        return A.length+1;
    }
}

如何构建此程序的不变量?构造简单算法的不变量的一般技巧是什么?

0 个答案:

没有答案