伪代码的归纳证明

时间:2016-10-18 20:34:34

标签: algorithm pseudocode proof induction

给出伪代码

MUL(a,b) 
   x=a
   y=0
   WHILE x>=b DO
      x=x-b
      y=y+1
   IF x=0 THEN
      RETURN(true)
   ELSE
      RETURN(false)

在while循环运行 n 次之后,让x(n)和y(n)表示x和y的值。

我必须通过归纳证明来证明

  

x(n)+ b * y(n)= a

我做了什么:

  

P(n):x(n)+乘(n)= a

设a和b为任意数,则第一个循环将给出x(1)= a - b和y(1)= 0 + 1 = 1

  

P(1):x(1)+ by(1)= a< => a = a

所以P(1)是真的。

假设P(n)为真。我们想表明P(n + 1)也是正确的。

对于步骤n + 1,循环将给出x(n + 1)= x(n)-b和y(n + 1)= y(n)+ 1

  

P(n + 1):x(n + 1)+乘以(n + 1)= a< => x(n)+ by(n)= a

假设P(n)为真,则P(n + 1)也为真,证明完成。

我的问题:由于这是我第一次在伪码上使用归纳证明,我不知道该怎么做。我只是想知道这是否是解决问题的正确方法,如果不是,该过程应该是什么样的?

由于

1 个答案:

答案 0 :(得分:0)

当你在问题中(几乎)得到它时,回答这个感觉就像是矫枉过正,但无论如何我都会这样做:

你的方法很好,虽然你不应该忽略根本没有执行循环迭代的情况,这是 a< b 并对应于 P 0 。如果你证明 P 1 为真,那么当 P P n + 1 为真> n 是真的,你没有说 P 0

因此,通过这种轻微的修改,通过归纳法推导证明如下:

P n 定义为执行循环 n 迭代后表达式x + b*y的值:

  

P n :x n + b.y n = a

要证明 P n 对于所有 n> = 0

是真的

1。基本案例: P 0

请注意,这是一种可能的情况:当首次评估while循环的条件时,尚未执行任何迭代,因此 n 为0,但我们确实有两个值播放时的变量: x 0 y 0

循环的前置条件由循环之前的赋值语句决定:

x=a
y=0

所以我们有:

  

P 0 :x 0 + by 0 = a + b.0 = a

2。归纳步骤: P n + 1

这里我们假设 P n 对于给定的 n 是真的:

  

P n :x n + b.y n = a

这是启动循环的下一次迭代时的前置条件,其中执行以下语句:

x=x-b
y=y+1

通过替换,我们获得该特定迭代的后置条件,根据定义, P n + 1

  

P n + 1 :( x n - b)+ b。(y n + 1)= x < sub> n + by n = P n = a