【问题标题】: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计数

标签: java c++ algorithm


【解决方案1】:

归纳证明

证明基本情况条件(n = 1)

证明所有假设步骤 (n = k)

证明归纳步骤 + 1 (n = k + 1)

因此,使用步骤 1 的基数调用您的函数,让 k 等于其他一些通用输入,然后执行输入 + 1。

基本上,您希望测试函数的边缘情况以确保它们正常工作。你的老师可能希望你只为上面的函数编写测试条件。

【讨论】:

  • 谢谢。但我仍然不明白我是如何从这个算法中通过归纳得到证明的。我刚刚发布了这个算法是如何工作的。你能点击我上面写的链接吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
相关资源
最近更新 更多