证明程序的正确性

时间:2015-11-06 00:48:56

标签: 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

我的前提是:b和e是大于零的整数

我的帖子条件是:返回x或y的整数(不确定)

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

对不起格式,这是新的。

1 个答案:

答案 0 :(得分:0)

证明:证据是通过数学归纳法。

基本情况:考虑b = e的情况。我们正在查看大小为1的列表A的一部分;具有一个元素的列表的最小元素是列表的一个元素,在这种情况下算法返回。

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

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