https://www.zhihu.com/question/28062458

http://blog.csdn.net/hikean/article/details/9749391

对于Fibonacci数列,1,1,2,3,5,8,13,21...

   F(0) = 1, F(1) = 1, F(i) = F(i-1) + F(i-2) 求解第n项。
1、递归
long fib(int n)
{
if (n == || n == )
{
return ;
}
return fib(n-) + fib(n-);
}
    这是最好写,也是效率最低的方法,时间复杂度是指数级别的。
2、遍历
long fib(int n)
{
if (n == || n == )
{
return ;
}
vector <long> fibs(, );
for (int i = ; i <= n; ++i)
{
fibs.push_back(fibs[i-] + fibs[i-]);
}
return fibs[n];
}
    这个方法也是很容易想到的,时间复杂度是 O(n), 空间复杂度也是 O(n)。
3、遍历优化版
    fibs[n]只和前两个元素相关,因此任意时刻我们只要有前两项就可以了。这样空间复杂度可以做到 O(1),我们用个循环数组就可以了。
long fib(int n)
{
if (n == || n == )
{
return ;
} int fib[];
fib[] = fib[] = ;
int idx = ;
for (int i = ; i <= n; ++i)
{
idx = (idx + ) % ;
fib[idx] = fib[(idx + )%] + fib[(idx + )%];
}
return fib[idx];
}
4、矩阵相乘
    把一维问题拉到二维。

所以,

    现在问题是如何快速计算一个矩阵的n次方。这里可以利用A^n = A^(n/2)*A^(n/2) * (n % 2 == 1 ? A : I)进行分治。
matrix power(matrix A, int n)
{
matrix ans = I;
while(n > )
{
if (n % == )
{
ans *= A;
}
A *= A;
n /= ;
}
return ans;
}

这个算法的时间复杂度是O(logN).

5、特征值分解

对于矩阵的 n 次方求解,可以通过矩阵的特征值分解来完成。过程如下:

6、差分方程求解
    如果了解差分方程,那么这个解析解就很容易得到了。

最新文章

  1. 【USACO 2.4】Overfencing(bfs最短路)
  2. MongoDb 聚合报错
  3. 分布式消息系统Kafka初步
  4. CSS3教程:pointer-events属性值详解 阻止穿透点击
  5. bzoj 1269 [AHOI2006]文本编辑器editor
  6. linux sed 命令
  7. ComboBox控件
  8. Phpwind v9.0 存储型xss跨站漏洞
  9. The app icon set named &quot;AppIcon&quot; did not have any applicable content.
  10. isdigit()判断是不是数字
  11. LeetCode OJ 122. Best Time to Buy and Sell Stock II
  12. 从零自学Hadoop(24):Impala相关操作上
  13. springMVC注解总结
  14. mongo 复制集命令
  15. 8,EasyNetQ-多态发布和订阅
  16. Python 爬虫常用模块
  17. neo4j的配置文件(图文详解)
  18. IPython介绍及安装
  19. linux processes identifiers
  20. 基于 Keras 用深度学习预测时间序列

热门文章

  1. px2rem-loader(Vue:将px转化为rem,适配移动端)
  2. C++之STL(标准模板库)
  3. 20140312 Excel表格画折现图次坐标轴
  4. 面试问烂的 MySQL 查询优化,看完屌打面试官!
  5. Python flask构建微信小程序订餐系统✍✍✍
  6. Reverses CodeForces - 906E (最小回文分解)
  7. 城市代码表mysql
  8. K8S之WebApi部署
  9. HttpServlet中service方法的源码解读
  10. Jinja2模板引擎