You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归计算行列式算法的时间复杂度分析

递归行列式计算的时间复杂度疑问解答

问题描述

将以下代码通过递归计算行列式。请问:代码中的for循环时间复杂度为O(n),每次调用函数时处理n-1个元素,那么时间复杂度是否为各次调用的乘积,即O(n)O(n-1)…*O(1)?

递归行列式计算代码

function y = detm(A)
    n = length(A);
    y = 0;
    if n == 1
        y = A(1,1);
    elseif n == 2
        y = A(1,1).*A(2,2)-A(1,2).*A(2,1);
    elseif n > 2
        for i = 1:n
            temp = A(2:end,:);
            temp(:,i) = [];
            if mod(i,2) == 0
                y = y - A(1,i)*detm(temp);
            else
                y = y + A(1,i)*detm(temp);
            end
        end
    end
end

解答

没错,你的分析完全正确!咱们一步步拆解这个递归逻辑的时间复杂度:

  1. 递归结构的核心逻辑
    对于n阶矩阵:

    • 外层有一个**O(n)**的for循环(循环n次);
    • 每次循环都会生成一个(n-1)阶的子矩阵,并递归调用detm计算这个子矩阵的行列式;
    • 基准情况(n=1或n=2)都是O(1)的常数时间运算,没有额外递归开销。
  2. 时间复杂度的递推与推导
    设T(n)为计算n阶行列式的时间开销,递推公式可以写成:

    • T(1) = O(1)
    • T(2) = O(1)
    • T(n) = n * T(n-1) + O(n)
      (这里的O(n)是循环中创建子矩阵、加减乘等辅助操作的开销)

    展开这个递推式后,主导项就是n * (n-1) * (n-2) * ... * 1 = n!,而所有低阶项(比如循环里的O(n)辅助开销累加)和n!的增长速度比起来完全可以忽略。所以最终的时间复杂度就是O(n!),也就是你所说的各次调用时间复杂度的乘积结果。

  3. 额外的实用提醒
    这种递归展开行列式的方法虽然直观,但效率极低——n!的增长速度快到离谱,比如n=20时,20!已经是2.4×10¹⁸的量级,几乎不可能在合理时间内完成计算。实际工程场景中,通常会用LU分解这类时间复杂度为O(n³)的算法来计算行列式,效率提升几个数量级都不止。


内容的提问来源于stack exchange,提问作者gbox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:29:15