听到经理的问题,杨成没有急于作答。
他回想起以前刚来到代码战争时做的第一个任务。
求解斐波那契数列的第N项。
当时他是如何对分治法做优化的呢?
“使用缓存,或者说是记忆化!”
杨成顿时脱口而出。
函数每次调用时,可以将先前的操作结果记录在某个对象里面,从而避免无谓的重复运算。这种优化被称作“记忆化”。
在这个问题,如果给递归算法使用了这种技术。
当在递归执行第一次,遇到一个子问题时,就计算它的解,并且记忆在对象中。
以后再遇到重复的子问题,无须再计算,直接读取对象中的记忆。
这样就能大大地减少运算量!
带着这样的思路,杨成开始优化已有的程序。
很快,经理便看到了一个全新版的算法。
他看到一行行测试用例通过。
“小伙子不错!”
经理拍拍他的肩膀。
“对已有的代码做改动,记忆化是可行的”。
“你还可以尝试一下动态规划的思路,它无须递归的代价,所以理论上效率会更高”。