【发布时间】:2016-12-11 09:26:05
【问题描述】:
我想用归纳法和矛盾法证明“在数组中找到最大元素的算法”的正确性。
ans=-infinity
for (i=0; i<n; i++)
ans= max(ans, A[i])
其中A[0:n-1] 是数组,max 是返回其两个参数中最大值的函数。
我在做什么:
基本情况:i=0, ans= max(-infinity,A[0])=A[0],因为只处理了一个元素,所以它是最大值。
归纳假设:i=k<n-1, 假设算法正确找到最多 k 次迭代。
归纳步:i=k+1,令ans_{i}表示算法得到的最大元素直到i步,让ans'_{i}表示数组A[0:i-1]中的另一个最大元素。
然后从归纳假设,ans_{k} = ans'_{k}
现在,为了矛盾起见,假设ans_{k+1} < ans'_{k+1}
现在,我应该如何表现这个矛盾?
有什么建议吗?我应该改变这种方法吗?
【问题讨论】:
-
属于 math.stackexchange.com(“属于 Stack Exchange 网络中的另一个站点”并没有作为建议提供。说真的,伙计们,很难设置“其他”选项吗?在建议列表中?)
-
你不需要矛盾的证明,因为归纳证明已经完成了这项工作。
-
那里的符号多么冗长,如果我理解您想要达到的目标,请击败我。看,问题可以简单地表述为:“如果 M(i-1) 是
arr[0...i-1]的最大值,那么 M(i)=max(arr[i], M(i-1)) 是 @ 的最大值987654335@"。演示很简单:“如果 M(i-1)>=arr[i],则 M(i-1)=M(i) - 根据最大函数定义 - 将大于任何arr[0...i]。如果 M( I-1)arr[i] 然后arr[i]大于任何arr[0...i-1]- 通过订单操作的传递性 - 所以 M(i)=arr[i] - 与 max 函数返回的值完全相同”
标签: arrays algorithm max correctness