归纳法其实是先提出一个问题或语句 P(n)P(n),再来证明其对任何自然数 nn 都成立,例如,我们要考察的是前 nn 个奇数之和,那么其 P(n)P(n) 可能会是以下这条语句:

1+3+5+⋯+(2n−1)=n2

1+3+5+\cdots+(2n-1)=n^2
归纳法的思路是建立起一条涵盖所有自然数的“扫描式”证据链(推导链),该过程有点类似于一排多米诺骨牌倒下时的情况。 P(1)P(1) 是显然的,然后我们需证明接下来的每块骨牌都是如此,即如果之前的倒下了,那么下一块一会随之倒下。

也即我们要证明如下的隐含关系:

P(n−1)⇒P(n)

P(n-1)⇒ P(n)
该结果就能贯穿于 nn 的所有值(在 P(n−1)P(n-1) 成立的前提下,是否 P(n)P(n) 成立),如果成立,则得证。

P(n−1)=(n−1)2⇓P(n)=P(n−1)+(2n−1)=n2

P(n-1)=(n-1)^2\\ \Downarrow\\ P(n)=P(n-1)+(2n-1)=n^2
如此一来,归纳步骤就建立起来了,我们现在就可以确定将该公式适用于所有自然数了。

经典案例

1. 二叉树的内部节点

一棵带根节点的二叉树,也即内部的每个节点(internal node)都应该有两个子节点,当然由于它并不需要是完全平衡的,其叶子节点可以有不同的深度,请用数学归纳法证明,如果一棵树有 nn 个叶子节点(leaf node),其应该有 n−1n-1 个内部节点。

P(n)=n−1

P(n)=n-1
数学归纳法 P(n−1)=n−2P(n-1)=n-2 成立的前提下,证明 P(n)=n−1P(n) = n-1。
由一棵二叉树的结构可知,想要增加一个叶子节点,我们需要在当前的二叉树下的某个叶子节点增加两个分支,使其变为一个内部节点,也即想要增加一个叶子,增加一个内部节点。

P(n−1)=n−2⇓P((n−1)+1)=(n−2)+1=n−1

P(n-1)=n-2\\ \Downarrow\\ P((n-1)+1)=(n-2)+1=n-1

数学归纳法与算法设计相关推荐

  1. 算法设计与分析之循环与递归

    前言: 循环与递归可以说是算法设计中最基本但却也是最重要的工具方法.循环和递归对于学习过高级程序设计语言的人来说都并不陌生,但还是有必要仔细的探究一下循环和递归之间的相似和区别.循环与递归最大的相似之 ...

  2. 哈工大威海算法设计与分析_计算机算法设计与分析第一章 算法概述

    晓强Deep Learning的读书分享会,先从这里开始,从大学开始.大家好,我是晓强,计算机科学与技术专业研究生在读.我会不定时的更新我的文章,内容可能包括深度学习入门知识,具体包括CV,NLP方向 ...

  3. 算法设计之—直接 遍历/穷举法、贪心算法、动态规划、回溯法、EM方法

    算法是对完成特定问题的程序执行序列描述,表象为从问题初始状态到问题结束状态的所有路径之中寻找可行路径,若无先验经验,根据执行方式不同可以划分为无规则和有规则(启发式)方法. 无规则方法为穷举,改进方法 ...

  4. 算法设计与分析——算法思想总结

    算法设计与分析 1.分治法 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同.递归的解这些子问题,然后将各子问题的解合并得到原问题的解. 分治法所能解 ...

  5. 循环赛日程表非递归Java_王晓东《算法设计与分析》课件.ppt

    <王晓东<算法设计与分析>课件.ppt>由会员分享,可在线阅读,更多相关<王晓东<算法设计与分析>课件.ppt(356页珍藏版)>请在人人文库网上搜索. ...

  6. 【算法设计与分析】递归与分治 | 复习笔记

    文章目录 算法总体思想 递归的概念 定义 n的阶乘 Fibonacci数列 Ackerman函数 排列问题 整数划分问题 Hanoi塔问题 递归小结 分治法的适用条件 分治法的基本步骤 分治法的复杂性 ...

  7. 《算法设计与分析》部分算法总结

    1.蛮力法 蛮力法的概述和定义: 蛮力法--简单说是一种简单直接的算法设计策略,也叫作暴力法,枚举法或者穷举法,蛮力法解决问题常常简单粗暴,常常基于问题的描述和所涉及的概念,定义直接求解,逐一列举并且 ...

  8. 算法设计方法:递归的内涵与经典应用

    摘要: 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归.毋庸置疑地,递归确实是一个奇妙的 ...

  9. 【算法设计zxd】第3章 迭代法 杨辉三角,穿越沙漠,内存移动,竖式相乘(阶乘)

    目录 迭代:(辗转法)        一种 不断用变量的旧值递推新值的过程 [例3-1] 输出如图的杨辉三角形. [例3-2]穿越沙漠问题 [例3-2]内存移动问题 [例3-4]编程求当n<=1 ...

最新文章

  1. C#创建和调用DLL
  2. RxJava使用(二)filter 操作符
  3. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 't
  4. sdut 1028 Catch That Cow( BFS)
  5. VTK:绘图之StackedPlot
  6. [蓝桥杯2017决赛]分考场、OpenJudge:分成互质数
  7. swf文件在线预览 html,在线浏览swf文件
  8. JavaWeb网上图书商城完整项目--day02-14.登录功能的login页面处理
  9. byte转换为string乱码_每日一课 | 如何将int转换为String
  10. 拼多多的车开向五环内!将继续撒钱,撒到你用为止...
  11. n卡eth挖矿设置_ETH2.0要来了,要不要布局显卡挖矿?
  12. 算法题:求一个数的三次方根
  13. oracle ebs bug,ORACLE EBS 价目表的导入效能-存储过程BUG
  14. 如何突破思维局限去思考世界,去读读以下三个理论
  15. OpenGL 亮度调节
  16. [蛋蛋无厘头日记]收到礼物喵~o(∩_∩)o
  17. 微信小程序之身份证照片正反上传
  18. 实用命令-pv: 管道查看器
  19. matebook14支持触摸屏吗_用过华为MateBook 14 2020款,才发现这“屏”真的很优秀
  20. tsconfig.json中常见配置项的含义解析

热门文章

  1. Doris之故障恢复(重点)
  2. Python高阶——argparse(命令行与参数解析)
  3. Git教程——分支 (branch)
  4. Bug(九) —— error LNK 2019 无法解析的外部符号 __imp__timeGetTime@0
  5. MIPS架构之start.s汇编分析
  6. 高精度计时器 -- C++/Windows版
  7. [转]企业网站首页设计常见的6种布局方式
  8. 例题:打印正三角形。两层for循环,难点明白行与列的关系
  9. 关于Oracle安装完毕后,登录时遇到的错误的解决的方法
  10. Oracle根底数据标准存储名目浅析(三)——日期标准(三)