【发布时间】: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计数