zoukankan      html  css  js  c++  java
  • 计算斐波那契数列

    • O(n)复杂度方法

    • O(logn)复杂度方法

    计算矩阵的n次方,可以先求矩阵的n/2次方,然后再平方即可。

     1 #include <cassert>
     2 
     3 struct Matrix2By2
     4 {
     5     Matrix2By2
     6     (
     7         long long m00 = 0,
     8         long long m01 = 0,
     9         long long m10 = 0,
    10         long long m11 = 0
    11     )
    12         :m_00(m00), m_01(m01), m_10(m10), m_11(m11)
    13     {
    14     }
    15 
    16     long long m_00;
    17     long long m_01;
    18     long long m_10;
    19     long long m_11;
    20 };
    21 
    22 Matrix2By2 MatrixMultiply
    23 (
    24     const Matrix2By2& matrix1,
    25     const Matrix2By2& matrix2
    26 )
    27 {
    28     return Matrix2By2(
    29         matrix1.m_00 * matrix2.m_00 + matrix1.m_01 * matrix2.m_10,
    30         matrix1.m_00 * matrix2.m_01 + matrix1.m_01 * matrix2.m_11,
    31         matrix1.m_10 * matrix2.m_00 + matrix1.m_11 * matrix2.m_10,
    32         matrix1.m_10 * matrix2.m_01 + matrix1.m_11 * matrix2.m_11);
    33 }
    34 
    35 Matrix2By2 MatrixPower(unsigned int n)
    36 {
    37     assert(n > 0);
    38 
    39     Matrix2By2 matrix;
    40     if (n == 1)
    41     {
    42         matrix = Matrix2By2(1, 1, 1, 0);
    43     }
    44     else if (n % 2 == 0)
    45     {
    46         matrix = MatrixPower(n / 2);
    47         matrix = MatrixMultiply(matrix, matrix);
    48     }
    49     else if (n % 2 == 1)
    50     {
    51         matrix = MatrixPower((n - 1) / 2);
    52         matrix = MatrixMultiply(matrix, matrix);
    53         matrix = MatrixMultiply(matrix, Matrix2By2(1, 1, 1, 0));
    54     }
    55 
    56     return matrix;
    57 }
    58 
    59 long long Fibonacci_Solution3(unsigned int n)
    60 {
    61     int result[2] = { 0, 1 };
    62     if (n < 2)
    63         return result[n];
    64 
    65     Matrix2By2 PowerNMinus2 = MatrixPower(n - 1);
    66     return PowerNMinus2.m_00;
    67 }
    View Code
  • 相关阅读:
    Sample Page
    3.21之前刷题总结
    存储过程动态组建查询where语句
    SQL常备知识
    学习SilverLight:(1)SilverLight3.0和JavaScript交互
    SQL SERVER 2005 Tempdb
    学习atlas
    sql server系统表详细说明(转)
    js 基数排序的过程
    vuerouter 刷新页面后 url地址不变 参数还在 保留当前页 routerlink取值 this.$route
  • 原文地址:https://www.cnblogs.com/larry-xia/p/10659613.html
Copyright © 2011-2022 走看看