这段代码的数学归纳法?
Posted
技术标签:
【中文标题】这段代码的数学归纳法?【英文标题】:Mathematical induction of this Code? 【发布时间】:2013-12-15 12:58:32 【问题描述】:我真的不明白我如何在本准则中使用归纳证明。 我只想知道如何证明这段代码和算法的正确性。
证明我们永远不会计算已经计算过的项目。
countCells(x,y) 的算法
如果 (x,y) 处的单元格在外面
结果为0的网格;
否则 (x, y)处的单元格颜色不是异常颜色结果为0;
其他 将 (x, y) 处的单元格颜色设置为临时 颜色;结果是 1 加上每块中的单元格数 包含最近邻居的 blob;
public int countCells(int x, int y)
int result;
if(x<0 || x>=N || y<0 || y>=N) // N is the maximum value of the matrix
return 0;
else if(!getColor(x,y).equals(ABNORMAL)) //
return 0;
else
recolor(x, y, TEMPORARY);
return 1 + countCells(x-1, y+1) + countCells(x, y+1)
+ countCells(x+1, y+1) + countCells(x-1, y)
+ countCells(x+1, y) + countCells(x-1, y-1)
+ countCells(x, y-1) + countCells(x+1, y-1)
以下链接显示了它是如何工作的
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=104&docId=186514818
【问题讨论】:
证明正确性?你能指定countCells
应该做什么正确的事情吗?
在我看来,这是一种填充算法,它计算从(x, y)
开始时连接的异常颜色单元格的数量。不过,没有什么要证明的。
您不证明代码的正确性,而是证明基于它的算法的正确性。那么您的算法是否计算包含单元格的 blob 中的总元素?
我的计算机科学老师说我应该通过归纳来证明这一点。我不知道我如何证明。是的。此算法仅计算包含单元格的 blob 中的总元素。
输入:现有矩阵中任意点的二维矩阵,x坐标,y坐标。输出:包括像素(x,y)的blob计数
【参考方案1】:
归纳证明
证明基本情况条件(n = 1)
证明所有假设步骤 (n = k)
证明归纳步骤 + 1 (n = k + 1)
因此,使用步骤 1 的基数调用您的函数,让 k 等于其他一些通用输入,然后执行输入 + 1。
基本上,您希望测试函数的边缘情况以确保它们正常工作。你的老师可能希望你只为上面的函数编写测试条件。
【讨论】:
谢谢。但我仍然不明白我是如何从这个算法中通过归纳得到证明的。我刚刚发布了这个算法是如何工作的。你能点击我上面写的链接吗?以上是关于这段代码的数学归纳法?的主要内容,如果未能解决你的问题,请参考以下文章