Computer science 证明程序的正确性

Computer science 证明程序的正确性,computer-science,proof,correctness,proof-of-correctness,Computer Science,Proof,Correctness,Proof Of Correctness,该函数递归地从包含整数元素的数组中查找并返回最小的元素 Min(A, b, e) if (b=e) return A[b] m = (b+e)/2 // floor is taken x = Min(A, b, m) y = Min(A, m +1, e) If(x < y) return x else return y Min(A、b、e) 如果(b=e) 返回A[b] m=(b+e)/2//已占用楼层 x=最小值(A、b、m) y=最小值(A,m+1,e

该函数递归地从包含整数元素的数组中查找并返回最小的元素

Min(A, b, e)
if (b=e)
     return A[b]
m = (b+e)/2 // floor is taken
x = Min(A, b, m)
y = Min(A, m +1, e)
If(x < y)
     return x
else
     return y
Min(A、b、e)
如果(b=e)
返回A[b]
m=(b+e)/2//已占用楼层
x=最小值(A、b、m)
y=最小值(A,m+1,e)
If(x
我的前提是:b和e是大于零的整数

我的post条件是:返回一个x或y的整数(对此不确定)

那么,我如何通过证明前置条件和后置条件是归纳的来证明这是正确的呢


抱歉的格式,在这个新的

证明:通过数学归纳法进行证明

基本情况:考虑B= E的情况。我们正在查看列表中大小为1的部分;具有一个元素的列表的最小元素是该列表的一个元素,在本例中,算法返回该元素

归纳假设:现在假设算法正确地返回所有大小小于等于k的列表的最小元素。证明:它返回大小为k+1的列表的最小值

归纳步骤:我们有e=b+k+1,并希望表明我们返回了最小元素。我们知道m等于(e+b)/2=(2b+k+1)/2=b+(k+1)/2。这将把尺寸k+1的列表分为尺寸地板((k+1)/2)和尺寸线((k+1)/2)两部分。对于所有大于零的k值,这两个值都小于或等于k(我们的基本情况从k=1开始,所以这意味着我们很好)。因此,根据归纳假设,x是列表下半部分的最小值,y是列表上半部分的最小值。如果小于y,则算法返回x,否则返回y。由于列表A中的最小值必须出现在列表的一半中,并且我们从A的两部分返回最小值中的较小值,我们知道我们在A中返回最小值。这就是证明。

您是否必须按照您的方式对任务进行编码?分治方法在这里没有多大意义,因为您必须检查数组元素的每个元素一次,因此可以应用更简单的尾部递归方案(例如
def-fun-MyMin(a,idxcur)=return(idxcur==0)?a[idxcur]:min(MyMin(a,idxcur-1),a[idxcur]);