当前课程知识点:数据结构(上) > 第一章 绪论(下) > (xc)动态规划 > 01XC-3: Fib():封底估算
没错 我们这里又碰到了指数
不同的是 我们这次要对这个指数
来做一次准确地估计
反过来验证一下
我们刚才实际
运行这段代码的效果
为什么是那样
我们来看一下 在这里
作为封底估算的一种基本技能
也要求大家能够记下
这样一个大概的估计式
具体地讲 也就是Φ的指数
也就是36次幂
和2的25次幂是相当的
怎么来记忆这个呢?
我们说 很好记
36是6的平方
而25是5的平方
好记吧
基于这样的一个大致估计
我们就可以来估计一下
Fibonacci数的第43项
刚才我们已经明显地
感觉到延迟的那一项
所需要计算的成本
那么 根据这个来估算
大致就等于2的30次方
2的30次方是多少呢?
等于2的10次方的3次方
而2的10次方呢
是等于10的3次方
当然是约等于
所以当然就是10的9次方了
也就是说我们的计算工作量
大概可以用10的9次方条
基本操作指令来度量
而前面刚刚讲过
10的9次方就是现在主流的计算机
一个gigahertz主频的CPU
在一秒钟之内
大致能够吞吐的计算量
这也就是为什么
当我们的计算大致接近43
甚至更大的时候
我们会明显地感觉到延迟
为了更好的理解指数
对于我们实际的计算
延迟的那种感受
我们再来推算一下
这里用到另一个近似式
也就是Φ的5次方大致就是10
因此我们可以来估算一下
Φ的67次方
也就是对应我们算出
Fibonacci数的第67项
大概需要多少时间
我们来看 它的计算成本
大概是10的14方条基本指令
为了吞吐或者执行这么多条指令
我们需要多少时间呢?
在同样的9次方的主频下
我们做一次除法 或者说14减9
应该会得到10的5次方 这么多秒
10的5次方是多少?
大家应该已经学会“封底估算”
应该有这种直觉了
前面也讲过 10的5次方
大致就是一天
换而言之 刚才那段程序
如果我不中止的话
它在算出第67项之前
我们也许应该先下课
大家回去休息一晚上
第二天 我们再来看它运行的结果
一天 仅仅对于第67项
这个是很可怕的一件事
当然 为了再进一步地 有所感觉
我们不妨来 再估算一下
多少呢?我们来看一下
为了算出Fibonacci数的第92项
我们大致需要多少时间
同样地 根据刚才那个估算
我们需要的指令的数目
大概是10的19次方
同样地 10的19次方
除以10的9次方
19减9 我们会得到
10的10次方秒
10的10次方秒是多少?
我们此前刚刚介绍过
它就对应于
我们俗称的叫三生三世
或者准确地讲就是三个世纪
三个century
大家可以看到这里确实
远远地超过了我们的直觉
利用这个算法
即便是算出不超过一百项
我们就需要用我们一生
都难以承受之久的等待
这说明什么呢?
说明这个算法不好
从严格的意义上讲
它甚至不是一个算法
虽然从表面上看
它还像那么一回事
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验