递归算法的时间复杂度表达式:
想想斐波那契函数,它的递归关系是f(n) = f(n-1) + f(n-2);乍一看,我们会发现,在斐波那契函数执行期间来计算递归调用的次数似乎并不那么的容易。
备忘录
备忘录技术是用来优化递归算法时间复杂度的技术。通过缓存和重用中间结果的方式,备忘录可以极大地减少递归调用的次数,也就是减少执行树中分枝的数量。所以,当我们使用备忘录来分析递归算法的时间复杂度时候应该把这减少的部分考虑到。
再把斐波那契函数拎出来说事。通过备忘录技术,我们会对每一个下标n进行斐波那契数进行保存操作。我们也能够确信的是每一个斐波那契数的计算也仅仅出现一次。众所周知的是根据递归关系,一个斐波那契数f(n)依赖于所有n-1在前的斐波那契数。结果就是,计算f(n)递归将调用n-1次,以计算它所依赖的所有先前的数。
现在我们就可以利用文章开头列出的公式来计算备忘录技术应用后的时间复杂度:O(1)n=O(n)。
结论
希望能给大家带来一定的帮助,欢迎一键三连,谢谢。