浅谈:算法中的斐波那契数(六)

方法五:矩阵求幂

斐波那契数列矩阵方程:

算法

  • 若 N 小于等于 1,则返回 N。
  • 使用递归函数matrixPower 计算给定矩阵 A 的幂。幂为 N-1,其中 N 是第 N 个 斐波那契数。
  • matrixPower 函数将对 N/2 个斐波那契数进行操作。
  • 在 matrixPower 中,调用 multiply 函数将两个矩阵相乘。
  • 完成计算后,返回 A[0][0] 得到第 N 个斐波那契数。

Java 实现

复制代码
class Solution {
    int fib(int N) {
        if (N <= 1) {
          return N;
        }
        int[][] A = new int[][]{{1, 1}, {1, 0}};
        matrixPower(A, N-1);

        return A[0][0];
    }

    void matrixPower(int[][] A, int N) {
        if (N <= 1) {
          return;
        }
        matrixPower(A, N/2);
        multiply(A, A);

        int[][] B = new int[][]{{1, 1}, {1, 0}};
        if (N%2 != 0) {
            multiply(A, B);
        }
    }

    void multiply(int[][] A, int[][] B) {
        int x = A[0][0] * B[0][0] + A[0][1] * B[1][0];
        int y = A[0][0] * B[0][1] + A[0][1] * B[1][1];
        int z = A[1][0] * B[0][0] + A[1][1] * B[1][0];
        int w = A[1][0] * B[0][1] + A[1][1] * B[1][1];

        A[0][0] = x;
        A[0][1] = y;
        A[1][0] = z;
        A[1][1] = w;
    }
}

复杂度分析

相关推荐
小孟的CDN5 小时前
使用pytorch进行batch_size分批训练,并使用adam+lbfgs算法——波士顿房价预测
pytorch·算法·batch·代码·adam+lbfgs
七夜zippoe5 小时前
NPU存储体系 数据在芯片内的旅程与分层优化策略
人工智能·昇腾·cann·ascend c·l1 buffer
仰泳的熊猫5 小时前
1037 Magic Coupon
数据结构·c++·算法·pat考试
IT_陈寒6 小时前
JavaScript性能优化:5个V8引擎隐藏技巧让你的代码提速50%
前端·人工智能·后端
AI架构师易筋6 小时前
模型上下文协议(MCP)完全指南:从AI代理痛点到实战开发
人工智能·microsoft·语言模型·llm·mcp
Robot侠6 小时前
视觉语言导航从入门到精通(二)
开发语言·人工智能·python·llm·vln
qdprobot6 小时前
齐护AiTall pro ESP32S3 小智AI对话 MQTT MCP 开发板Mixly Scratch Steam图形化编程创客教育
人工智能·mqtt·scratch·mixly·mcp·小智ai·齐护机器人aitall pro
程砚成6 小时前
美容行业的未来:当科技照进美与健康
大数据·人工智能
AI科技星6 小时前
质量定义方程的物理数学融合与求导验证
数据结构·人工智能·算法·机器学习·重构