如何使用初始化维护终止技术证明算法正确?

时间:2017-06-15 00:26:15

标签: c algorithm loop-invariant

执行该功能时必须满足的条件是什么? (断言)

我想确保我的断言会在运行第i个循环后描述我所知道的内容。

int linearsearch(int arr[], int n, int target) {
    for (int i = 0; i < n; i++) {
        if (arr[i] == target) return i;
    }
    return -1;
}

这只是一个迭代线性搜索函数,如果找到目标则返回目标索引,否则返回-1。

1 个答案:

答案 0 :(得分:2)

线性搜索问题的循环不变量必须对先前搜索过的所有数组元素进行声明,即它们都不等于target

j &lt; i :arr j ≠target

您需要证明以下几点:

  • 在进入循环之前显示不变量保持
  • 显示如果在迭代之前不变量保持不变,它也会在迭代完成时保留
  • 显示如果循环通过中间返回结束,则算法会生成正确的结果
  • 显示如果循环正常结束,算法也会生成正确的结果