最小值算法的正确性

问题描述

我的任务是证明寻找数组中最小元素的索引所用算法的正确性。我想知道我的过程是否正确。任何反馈都很好,因为这是我第一次学习算法,但是我仍然在寻找解决方法。

前提条件:arr[a_1,a_2,a_3,...,a_n],其中a_i是实数,n> = 1。

后置条件:smallestIndex = m,对于[1,n]中的所有i,为1 arr[m] <= arr[i]。

我的算法:

smallestIndex <- 1
i <- 2
while i <= n
    if arr[i] < arr[smallestIndex]
        smallestIndex <- i
    i <- i + 1
endwhile
return smallestIndex

我的循环不变性:arr[smallestIndex] <= arr[m]对于[1,i-1]范围内的m。

基本步骤:由于smallestIndex <- 1i <- 2在while循环开始之前,因此对于[1,1]范围内的m,循环不变性“ arr [1]

归纳步骤:假设循环不变性在第k次迭代后为真,然后为smallestIndex <- r,其中1 arr[k+1] < arr[r],则{ {1}}或其他smallestIndex <- k+1仍为r。在这两种情况下,自smallestIndex开始,对于范围[1,k + 1]中的m,循环不变式仍然成立。这样就解决了归纳步骤。

循环后终止步骤:由于arr[smallestIndex] <= arr[m]在每次迭代后增加1,因此,当i时,循环条件为false,因此循环终止。自i <- n+1起,对于范围[1,n]中的m,循环不变性仍然成立。由于范围[1,n]是数组arr[smallestIndex] <= arr[m]的全长,因此可以说arrsmallestIndex中最小元素的索引。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...