【数据结构(邓俊辉)学习笔记】绪论05——动态规划

文章目录

  • 0.前言
  • 1. Fibonacci数应用
    • 1.1 fib():递归
      • 1.1.1 问题与代码
      • 1.1.2 复杂度分析
      • 1.1.3 递归分析
    • 1.2 fib():迭代

0.前言

make it work,make it right,make it fast.
让代码能够不仅正确而且足够高效地运行。

1. Fibonacci数应用

1.1 fib():递归

在这里插入图片描述

1.1.1 问题与代码

上述fib()算法运行地较慢

__int64 fib ( int n ) { //计算Fibonacci数列的第n项(二分递归版):O(2^n)return ( 2 > n ) ?( __int64 ) n //若到达递归基,直接取值: fib ( n - 1 ) + fib ( n - 2 ); //否则,递归计算前两项,其和即为正解
}

在这里插入图片描述
CPU资源未被占满,进程在满负荷运行,但是依然运行地非常非常慢。

1.1.2 复杂度分析

上述推导看复杂度为指数( 2 n 2^n 2n
估算下
ϕ 43 \phi^{43} ϕ43 = 2 30 2^{30} 230 = 1 0 9 10^{9} 109flo = 1 sec(计算工作量大概可以用10地9次方条基本操作指令来度量,10的9次方就是现在主流计算机主频的cpu在1s中大致能够吞吐的计算量,亦是fib(43)计算大概需要1s)

1.1.3 递归分析

使用第二种手段对上述代码进行分析
在这里插入图片描述
**每个递归实例从原理上来讲只需要计算一次。**诀窍和改进放在也在于此。

1.2 fib():迭代

在这里插入图片描述
方法A:
将Fibonacci数的各项所计算的结果制作成一个表格,将每项计算结果存入表中,每次需要递归实例的时候便可以查表获取。智能屏蔽此次和后续调用。在O(1)时间内返回结果。
方法B:
计算方向为自小而大,自底而上,这样由原来的递归算法改进为迭代型算法,同样可以完成刚才工作。如果比作上楼梯,那么在每个台阶上只需停留一次。

例如fib(5):
f(5) = f(4) + f(3)
f(4) = f(3) + f(2)
f(3) = f(2) + f(1)
f(2) = f(1) + f(0)
f(1) = f(0) + f(-1)
迭代的计算是自底而上,所以是算f(1) f(2) f(3)f(4) f(5)
g = g+f 等同于 f(1) = f(0) + f(-1) 再迭代
g = g+f 等同于 f(2) = f(1) + f(0) ,
这次f(0)是未知的,所以f = g-f就是算出下次迭代的末项f(0)
f(0) = f(1) - f(-1) 等同于 f = g-f

具体的代码分析可以参考Fibonacci数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/650516.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

沉浸式推理乐趣:体验线上剧本杀小程序的魅力

在这个信息爆炸的时代,人们的娱乐方式也在不断地推陈出新。其中,线上剧本杀小程序以其独特的沉浸式推理乐趣,成为了许多人的新宠。它不仅让我们在闲暇之余享受到了推理的快乐,更让我们在虚拟的世界里感受到了人性的复杂与多彩。 线…

Hot 100总结【leetcode】

文章目录 哈希1. 1 两数之和2. 49 字母异或词分组3. 128 最长连续序列4. 283 移动零5. 11 盛最多水的容器6. 15 三数之和7. 42 接雨水 滑动窗口8. 3 无重复的最长子串9. 438 找到字符串中所有字母异位词子串10. 560 和为k的子数组11. 239 滑动窗口最大值12. 76 最小覆盖子串 普…

PC-3000 SSD (Extended): 修复固态硬盘、恢复数据的专用工具

天津鸿萌科贸发展有限公司从事数据安全业务20余年,在数据恢复、数据取证、数据备份等领域有丰富的案例经验、前沿专业技术及良好的行业口碑。同时,公司面向取证机构及数据恢复公司,提供数据恢复实验室建设方案,包含数据恢复硬件设…

Axure实现tab页面切换功能

1. 实现效果 2. 实现原理 创建两个标签,并实现点击时选中状态点击时,设置面板状态 3. 实现步骤 3.1 实现可切换的标签 在页面上拖拽两个矩形作为两个tab标签,并命名 tab1 和 tab2 设置每个矩形的边框显示,只显示下边框即可 …

C语言入门课程学习记录4

C语言入门课程学习记录4 第18课 - signed 与 unsigned第19课 - 再论数据类型第20课 - 经典问题剖析第21课 - 程序中的辅助语句(上)第22课 - 程序中的辅助语句(下) 本文学习自狄泰软件学院 唐佐林老师的 C语言入门课程,…

nvm下载的node没有npm

nvm下载的node没有npm 相信大家最近可能发现自己使用的nvm下载nodejs没有npm了。 会出现这种情况: C:\Users\89121>nvm install 15 Downloading node.js version 15.14.0 (64-bit)... Complete Downloading npm version 7.7.6... Download failed. Rolling Bac…

c++在visual studio上的默认配置

右键 新建项 右键源文件 属性

李彦宏:程序员将不复存在! 周鸿祎回怼!网友:先把百度程序员都开除了!

近日,百度创始人、董事长兼首席执行官李彦宏在央视《对话》•开年说的访谈中指出:“基本上说以后其实不会存在“程序员”这种职业了,因为只要会说话,人人都会具备程序员的能力”。 “未来的编程语言只会剩下两种,一种…

ubuntu 22.04 编译 ORBSLAM3

源码地址(带注释):ORBSLAM3 根据你安装的openCv版本修改cmake 修改2个文件的2个地方: ORB_SLAM3_detailed_comments-master/CMakeLists.txt ORB_SLAM3_detailed_comments-master/Thirdparty/DBoW2/CMakeLists.txt 查找openCv的地…

赋能智慧校园!A3D数字孪生可视化,轻量又高效!

放假之后,学生们会逐步返学,大量人员出入校园,安全更是不容忽视,如何在短时间内对大批人员及设施进行智能监管?数字化转型是关键手段,我们可以融合线上线下数据,搭建3D立体的智慧校园&#xff0…

TinyML之Hello world----基于Arduino Nano 33 BLE Sense Rev2的呼吸灯

早期版本的Hello World 这应该是一个逼格比较高的呼吸灯了,用ML来实现呼吸灯功能,之前已经有大佬发过类似的文章:https://blog.csdn.net/weixin_45116099/article/details/126310816 当前版本的Hello World 这是一个ML的入门例程&#xff…

【树莓派4B】如何点亮树莓派的LED灯

在之前一系列文章中,使用python、行人入侵检测,确没有使用树莓派的硬件。控制引脚进行输出: 如何写python点亮led灯闪烁,我灯接在gpio13,GPIO19,gpio26。我都想闪烁。 你可以使用Python的GPIO库来控制树莓派上的LED灯。首先&…