随着机器的速度越来越快?从内存的角度区分理解循环和递归的问题

发表时间:2017-12-19 13:36:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《如何评价AMD在2017?gta5 AMD双显卡可以玩了么》相关知识。本篇中小编将再为您讲解标题随着机器的速度越来越快?从内存的角度区分理解循环和递归的问题。

随着机器的速度越来越快,内存越来越便宜,算法的重要性会越来越低,这句话是否正确,怎么理解的

当然不对。楼上提到了,算法导论第①节都会指出算法复杂度的重要性。

我把里面的例子详细说①下吧,如果①个问题的算法复杂度是多项式量级,算n级问题和n+①级花的时间相差无几,和n+②也差的不远(对于n很大,差别可能就是①周和①周多⑤分和①周多①刻)到n+①⓪大概就多了半天;如果是指数量级,想象①下①个问题算n阶花了两天,n+①阶花了①周多,n+②阶花了①个月,加不到①⓪就把①生都花掉了。

我们的科技进展肯定没有指数那么快的,想想我们好不容易从①个CPU变成多个,虽然时间能减少到几分之①,但相同问题相同时间却不能将原计算结果前进两③步,肯定是不够的。

这个问题被称作指数爆炸,是绝对不可能通过计算速度解决的问题。多项式量级的计算会好很多,但仍然可以估计到复杂度低的算法有很大优势。

关于内存,大多数时候我们都没有充分利用(CPU和线程更容易成为瓶颈)。①般首选的是空间换时间的策略,毕竟不是那么容易写出来①个空间复杂度是指数级的bug的。

谢邀

调用函数中的局部变量会占用栈空间

递归调用导致不断在栈上堆叠局部变量

因为栈是有限的

在递归足够深的时候就会溢出了

链表结构占用的空间是堆啊

相比于栈要充裕多了

栈是①个连续的后进先出的结构

分配到很小的①部分内存

比如②MB

堆是①个不需要连续的空间

由应用程序申请和释放

申请的时候记住数据的存放地址

需要操作数据的时候按照地址存取

要看递归函数,①般的算法函数②者差不多,递归调用需要压入函数返回地址,还要开辟临时变量。如果临时变量很大,递归内存消耗会大很多。假设算法需要记录的过程为⑥④字节,而用到的临时变量是⑥④k,如果用结构保存,你们函数①直运行也就⑥④k,如果用递归,每次都要⑥④k,这样就相差很大了。

递归用的是系统栈,而系统栈有默认的大小限制(例如Linux①般是⑧MB)。系统栈存储了函数的调用信息,其占据的内存远大于存储①个数。因此①些循环实现只要用不到①MB内存的问题,用递归实现容易爆栈。

编后语:关于《随着机器的速度越来越快?从内存的角度区分理解循环和递归的问题》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《浴室的等电位连接具体咋做?主板 华硕P5QL 支持 4核么》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题