SCIP 1.2 总结

总结:这一节的核心思想就是让读者自己建立一个 递归计算 和 迭代计算 过程的相互转换模型,并了解这种模型只是对计算空间资源的优化,还有存在其他方法能对计算步骤优化,以及他们只是对时间优化影响因素之一。

具体总结笔记如下:

1、学习目标:a.了解哪些过程值得去定义(递归好还是迭代好?)。

                        b.了解他们执行后的结果是怎样的。

2、应该掌握的方法:a.了解不同的过程产生怎样的行为(结果)之后,再从需要的行为(结果)出发,使用相应的过程。

                                   b.能在计算行为的层层递进中观察到每一个局部,并能从全局上得到一个结论。

3、线性递归函数(过程):能调用自身的函数,它的计算过程分为:

                                             a.递归计算过程:先展开,后返回,要保留轨迹。

                                             b.迭代计算过程:变量固定,每一次迭代更新变量,最后一次迭代直接输出。

4、可以把上面两种计算过程叫做:

                         a.非尾递归,下一个函数结束以后此函数还有后续,所以必须保存本身的环境以供处理返回值。

                         b.尾递归,进入下一个函数不再需要上一个函数的环境了,得出结果以后直接返回。

5、树形递归:自定向下的递归计算过程,适用于结构高度层次化的数据。但是和线性迭代计算过程(自低向上)一比,计算量差距巨大。(1.22 斐波那契数的计算)

6、n——需要解决的问题的大小

     R(n)—解决问题问题所需要调用的资源(计算的空间量——寄存器多少,计算的时间量——步骤的多少)

7、增长的阶:K*F(n)=R(n),计算资源和增长的阶成正比。增长的阶用于描述计算过程所需要的计算资源量随着计算问题变大变小的变化。即:问题大小线性增长时,计算资源量是线性指数级别,还是对数级别的增长。

(以前读书学数学的时候,讨论的都是n的大小对结果大小的影响,没想到还有对过程大小量的影响哈哈哈,算法可以改变的n对R(n)的影响,比如让R(n)从指数级增长降低到线性,甚至对数级

8、在1.16习题中,作者提醒在改造递归计算成迭代计算时,提醒要增加一个状态变量,为什么?因为在尾递归中,变量固定有限,并且在每次迭代时,变量要更新。需要一个状态变量来保存过程中一些状态变化,因为其他变量不能带走,而需要状态变量将这个值Carry到最后。

9、递归变迭代——减少运算的空间资源

     递归迭代的步骤优化——减少运算所需的计算步骤(如1.24对求幂的优化,从一个一个连乘自己自己的平方带入自己的平方

10、但优化了计算步骤和空间资源后,时间不能产生相同等级的优化:

                   原因1:系统资源的占用情况不同

                   原因2:编译器的优化程度不同

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值