编程基础---Memoization技术优化递归的重复计算
2015-04-16 11:40
218 查看
Memoization 技术
是一种将函数返回值缓存起来的方法,Memoization 原理非常简单,就是把函数的每次执行结果都放入一个键值对(数组也可以,视情况而定)中,在接下来的执行中,在键值对中查找是否已经有相应执行过的值,如果有,直接返回该值,没有才 真正执行函数体的求值部分。很明显,找值,尤其是在键值对中找值,比执行函数快多了。Fibonacci(斐波那契)问题
Fibonacci问题是可以通过简单的递归方法来解决,时间复杂度O(2^n):int fib ( n ) { if ( n == 0 || n == 1 ) { return 1; } else { return fib( n - 2 ) + fib ( n - 1 ); } }注:在这里,我们考虑Fibonacci 系列从1开始,因此,该系列看起来:1,1,2,3,5,8,...
fibonacci
函数Memoization的代码,时间复杂度O(n^2):
Memoization
技术思考
单例模式:本质上是构造一次,每次要用到的时候不需要重复构造,直接取出即可,我们不妨把构造变成计算,那么就是,计算一次,然后存储,不在重复计算。
备忘录模式:
每个对象都含有内部状态,但是对象的状态都在不断变化,如何保留这些变化,备忘录模式协助我们保留用户的状态,那么本质上也是,计算一次,然后存储,下次需要的时候直接取出。不需要redo前面的计算。
从上可知,都存在以下抽象的操作
1)compute
2)save
3)if (saved) get else compute then save
这种在算法中称作Memoization algorithm, 在动态规划中应用为重叠子结构。
相关文章推荐
- 递归优化 POJ1579 记忆化搜索 剪枝 去掉重复计算
- 【openjudge 计算概论(A)】[基础编程练习2]
- python 编程语言基础技术框架
- 通过闭包避免递归过程中的重复计算
- 数学思想方法-分布式计算-linux/unix技术基础(3)
- linux应用基础编程及优化调试
- Java 技术: 使您轻松地进行多线程应用程序编程(生产者消费者模式的优化)
- 请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)
- 量化中max_bits重复计算之优化
- .NET4.0并行计算技术基础(8)
- Py修行路 python基础 (十四)递归 及 面向对象初识及编程思想
- .NET4.0并行计算技术基础(8) 推荐
- JAVA代码—算法基础:计算已排序的数组中不重复的元素个数
- Hadoop学习笔记—4.初识MapReduce 一、神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算。对于大数据
- 编程: 第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?
- .NET4.0并行计算技术基础(10) 推荐
- 构筑无所不在计算的基础—TRON技术体系结构 以及老家
- PAT 基础编程题目集 4-8简单阶乘计算
- 浅谈.NET下的多线程和并行计算(八)Winform中多线程编程基础上