逻辑之旅

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

数学归纳法应用场景

与正整数有关的数学问题;

(高中数学)证明等式成立、证明数列通项公式成立。

 

数学归纳法基础结构

1. 证明 n=1 时表达式成立(可能存在特殊情况,把特殊情况单独列出,排除干扰);

2. 证明 如果当 n=m 时表达式成立,则 n=m+1 时表达式同样成立。

类似多米诺骨牌效应:1 是推到 第一块骨牌;2 是证明 骨牌之间的空隙 足以让 前一块压倒后一块。

(图片来自网络)

 

循环不变式

循环不变式指的是:在每轮迭代开始前和结束后,我们要操作的数据必须保持的某种特性(比如在插入排序中,数组前面部分必须是递增/递减的)。

循环不变式是进行循环的必备条件,因为它保证了循环进行的有效性。

循环不变式 (loop invariant)用来帮助我们理解算法的正确性。 (出自《算法导论中文版》第二章 2.1 插入排序)

对于循环不变式,必须证明它的三个性质:(与数学归纳法类似,但是归纳步骤是无穷使用的;而循环不变式循环结束相当于终止归纳)

  1. 初始性:在循环的第一轮迭代开始之前,应该是正确的;
  2. 保持:如果循环的第一次迭代开始之前正确,那么,在下一次迭代开始之前,它也应该保持正确;
  3. 终止:当循环结束时,不变时给了我们一个有用的性质,它有助于表明算法是正确的。

循环不变式的应用 属于 算法设计模式中的 增量模式(incremental),算法过程是一个一个往上线性递增推导。

 

递归

在计算机编程中,递归指函数不断调用自身的过程。

如果用 fn(n) 指代递归函数(其中 n 是正整数),那么 fn(n) 中会调用它自身 fn(n-m) 。

当 fn(n) 中只调用 fn(n-1) 时,此时递归的过程 可以看做是 数学归纳法 的反向过程。

下图是某个比较简单的递归例子,在递归函数中,只调用自身一次,而且是调用 fn(n-1),可以看出与数学归纳法比较相近。

 

 

递归的性质:

1. 一个问题可以分成一个或多个子问题,子问题会更加简单;

2. 不能无限调用自身,当递归到一定程度,子问题可以用非递归方法解决,结束递归。

 

递归与 数学归纳法 的相同之处:

1. 存在可解的最小子问题;

2. 大问题可以从小问题的结果出发解决;

3. 如果不限制时间空间,都可以解决无限增长的问题。

 

posted on 2019-07-05 14:09  LinMiaoj  阅读(507)  评论(0编辑  收藏  举报