首页 > 代码库 > C++ 之 over-eager evaluation 超前评估
C++ 之 over-eager evaluation 超前评估
C++之超急评估
over-eager evaluation vs.eager evaluation vs. lazy evaluation
在前面已经提到了C++地懒惰求值:不要为你程序功能之外的任何事情付出任何代价。在你总是需要执行某种计算,但是该计算地结果并不总是被用到地时候,lazy evaluation 绝对可以提高你的程序的性能。但是当计算的结果总是被需要的时候,我们的 “未雨绸缪”却可以给程序的性能带来极大的提升。
PS: 至于eager evaluation便是 “走一步看一步”,如果当前需要这个结果,那么计算处该结果。无论后面是否会被用到。
over-eager evaluation
关于over-eager evaluation的用法,下面的几个简单并且常见的例子便是很好的解释:
STL 之 vector的增长方式
在STL中,vector的空间的增长方式是 eager evaluation的最好的例子,在当前空间的capacity满时,再添加元素时,我们分配的内存时当前内存的两倍,并不仅仅只是用来刚好装下当前的新元素。关于STL的vector的insert的源代码,便可以说明:
PS: 下述代码截自: http://blog.csdn.net/shoulinjun/article/details/23450597
|
|
Caching 技术
在读取磁盘上的文件时,我们可以预先读取一些放在内存,降低下一次读取到该区域的开销,根据程序执行的 “局部性原理”。
分期摊还,就是降低单次操作的时间复杂度。
维护流式数据的 min max avg 值:
维护一个数据结构保存当前已有数据的最大值或最小值或平均值,降低单次操作的时间复杂度(严格的讲,这里的时间复杂度指的是平均时间复杂度)。
以时间换空间的例子。
比如,要求维护一个返回最小值的栈,这就是典型的使用额外的数据结构来维护最小值,使得返回最小值的时间复杂度为O(1)。代码为 :
|
|
Final words:
- 如果你预期程序常常需要某个运算,那么你可以“未雨绸缪”,使用数据结构(如上面的Cache以及min stack)降低该操作的单次时间复杂度。从而提高整个程序的运行效率。
- 这里的over-eager evaluation与lazy evaluation并不矛盾,前者是为某些一定会做的操作未雨绸缪;后者时绝不为不必要的操作付出额外的代价。
C++ 之 over-eager evaluation 超前评估
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。