程序员的数学基础课
黄申
LinkedIn 资深数据科学家
83374 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 58 讲
导读 (1讲)
基础思想篇 (18讲)
程序员的数学基础课
15
15
1.0x
00:00/00:00
登录|注册

04 | 数学归纳法:如何用数学归纳提升代码的运行效率?

项目中使用数学归纳法提升代码的运行效率
递归调用的代码和数学归纳法的逻辑是一致的
证明前nn个棋格放的麦粒数总和为2n12^{n}-1
证明第nn个棋格放的麦粒数为2n12^{n-1}
舍罕王赏麦的故事
假设n=k1n=k-1成立,再证明n=kn=k也是成立的
证明基本情况
数学归纳法 vs 广义归纳法
从经验事实中找出普遍特征的认知方法
从理论上证明某个结论
思考题
递归调用和数学归纳的逻辑
数学归纳法的应用
数学归纳法的步骤
归纳法
如何用数学归纳提升代码的运行效率?

该思维导图由 AI 生成,仅供参考

你好,我是黄申。
上次我们聊了迭代法及其应用,并用编程实现了几个小例子。不过你知道吗,对于某些迭代问题,我们其实可以避免一步步的计算,直接从理论上证明某个结论,节约大量的计算资源和时间,这就是我们今天要说的数学归纳法
平时我们谈的“归纳”,是一种从经验事实中找出普遍特征的认知方法。比如,人们在观察了各种各样动物之后,通过它们的外观、行为特征、生活习性等得出某种结论,来区分哪些是鸟、哪些是猫等等。比如我这里列出的几个动物的例子。
通过上面的表格,我们可以进行归纳,并得出这样的结论:
如果一个动物,身上长羽毛并且会飞,那么就是属于鸟;
如果一个动物,身上长绒毛、不会飞、而且吃小鱼和老鼠,那么就属于猫。
通过观察 个动物样本的 个特征,从而得到某种动物应该具有何种特征,这种方法就是我们平时所提到的归纳法。
我们日常生活中所说的这种归纳法和数学归纳法是不一样的,它们究竟有什么区别呢?具体数学归纳法可以做什么呢?我们接着上一节舍罕王赏麦的故事继续说。

什么是数学归纳法?

上节我们提到,在棋盘上放麦粒的规则是,第一格放一粒,第二格放两粒,以此类推,每一小格内都比前一小格多一倍的麦子,直至放满 个格子。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

数学归纳法在编程中的重要性及应用 文章通过引出数学归纳法的概念,以放置麦粒的问题为例,详细介绍了数学归纳法的基本步骤和应用。通过实例分析,读者可以深入理解数学归纳法的原理和应用,以及其在优化算法和提高代码效率方面的重要性。作者还通过编程模拟数学归纳法的证明过程,展示了递归调用和数学归纳的逻辑相似性。递归调用的代码和数学归纳法的逻辑一致,体现了数学归纳法在编程中的应用。数学归纳法的实现运行时间几乎为零,能够帮助节约资源并提升系统性能。读者被鼓励在日常工作中尝试使用数学归纳法来提升代码的运行效率,并思考其在实际项目中的应用。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《程序员的数学基础课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(107)

  • 最新
  • 精选
  • oddrock
    递归把计算交给计算机,归纳把计算交给人,前者是拿计算机的计算成本换人的时间,后者是拿人的时间换计算机的计算成本

    作者回复: 精辟的总结👍

    2018-12-18
    5
    303
  • cafu_chino
    老师下次可以提供Python的代码示例吗?对Java的使用不是很熟练

    作者回复: 可以,后期会整理出来

    2018-12-17
    3
    44
  • Neo_Zhang
    项目中还没碰到,但在以前做编程题时经常碰到找规律的问题,这时候只需抽象出一个公式即可。 另外可否给老师提个建议,就是在github上建一个仓库,这样我们可以fork下来,用自己熟悉的编程语言把老师讲的思路写进代码里push上去,方便大家相互学习 ^_^

    作者回复: 这是个好建议,我先问下是否版权问题

    2018-12-17
    23
  • lkj
    递归还有一个就是搜索目录文件,编程递归第一个练习就是这个 递归过程判断事目录还是文件,目录就继续递归,文件就根据缩进打印,最终打印出目录结构

    作者回复: 是的👌

    2019-05-25
    10
  • 予悠悠
    可以给老师提个建议吗?课程里提到的关键概念可不可以加上英文名呢?例如这篇里提到的迭代,递归,正向递推,逆向递推

    作者回复: 好,后面会加注,感谢建议

    2019-01-19
    10
  • 鱼鱼鱼培填
    用Python实现数学归纳法,一开始使用math.pow()函数发现不对,Python中该函数会使用科学技术法导致结果出错 #-*- coding:UTF-8 -*- class result(object): wheatNum = 0 wheatTotalNum = 0 class getWheatTotalNum(object): ''' 函数说明:使用递归嵌套, 进行数学归纳法证明 Param: k - 表示放到第几格 result - 表示当前格子的麦粒数 Return: boolean - 放到第K格时是否成立 ''' def prove(self, k, result): if k == 1: if (2 ** 1 - 1) == 1: result.wheatNum = 1 result.wheatTotalNum = 1 return True else: return False else: proveOfPreviousOne = self.prove(k - 1, result) result.wheatNum *= 2 result.wheatTotalNum += result.wheatNum proveOfCurrentOne = False if result.wheatTotalNum == (2 ** k - 1): proveOfCurrentOne = True if (proveOfPreviousOne & proveOfCurrentOne): return True else: return False if __name__ == '__main__': grid = 64 result = result() g = getWheatTotalNum() print(g.prove(grid, result))

    作者回复: 研究了细节,很赞👍

    2018-12-19
    2
    8
  • 田野
    关于这节课讲的内容在编程中具体的应用能这样理解不? 迭代法在实际应用中,如果迭代层次过深 ,会导致各种问题(耗时\内存占用等) ,遇到这种情况可以总结规律, 使用数学归纳法将其简化。(代码中不再使用迭代 使用数学归纳总结出来的结果)

    作者回复: 是的,特别是递归的实现比较耗资源

    2018-12-17
    8
  • zh
    想起罗斯的故事,1-100 的所有数求和,罗斯的方法就是数学归纳法的简单应用。平时还没有需要用到归纳法,递归方法也很少用。

    作者回复: 你是说高斯的故事吧😀

    2018-12-24
    6
  • 大鱼
    def get_result(n): """ :param n: n 为实际的格子数 """ return 1 if n == 1 else get_result(n - 1) * 2 + 1 差不多一行代码可以解决这个问题

    作者回复: 代码非常简洁👍

    2018-12-20
    5
  • HF
    迭代是一步步逻辑推理,归纳是得出一个计算规则,可以直接计算。计算效率优于推理

    作者回复: 没错

    2020-07-06
    3
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部