C 如何使用初始化维护终止技术证明算法正确?
在执行功能时必须满足哪些条件?(断言) 我想确保我的断言能够描述在运行第I个循环后我所知道的是真的C 如何使用初始化维护终止技术证明算法正确?,c,algorithm,loop-invariant,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; } int-linearsearch(int-arr[],int-n,int-target){ 对于(i
int linearsearch(int arr[], int n, int target) {
for (int i = 0; i < n; i++) {
if (arr[i] == target) return i;
}
return -1;
}
int-linearsearch(int-arr[],int-n,int-target){
对于(int i=0;i
这只是一个迭代线性搜索函数,如果找到目标,则返回目标的索引,否则返回-1。线性搜索问题的循环不变量必须声明以前搜索过的所有数组元素,即它们都不等于
目标
:
∀ j- 显示不变量在进入循环之前保持不变
- 表明如果不变量在迭代之前保持不变,那么它在迭代完成时也保持不变
- 表明,如果循环在中间返回,则生成正确的结果
- 表明如果循环正常结束,算法也会产生正确的结果
断言(arr!=NULL)代码>在循环之前。很少需要:assert(n您需要假设arr
至少指向n
int(我想包含在同一个对象中)。然后您自然会得到arr!=NULL
并且I认为您还必须假设arr
至少指向n
int。