n x n矩阵的递归行列式算法的运行时和空间复杂度

时间:2019-07-14 19:52:37

标签: recursion time-complexity big-o space-complexity determinants

我正在尝试找出以下算法的运行时间和空间复杂度。

enter image description here

有人说它的运行时复杂度是O(n!),我猜是因为有n !!递归调用求解n * n矩阵的递归算法。但是我不确定我是否正确。

此外,空间复杂度是否也是n!?

1 个答案:

答案 0 :(得分:0)

写出一个明确的递归关系可能会有所帮助,该关系控制着递归算法的直接实现的运行时。注意,在处理n×n矩阵时,求和需要对大小为(n-1)×(n-1)的矩阵进行n次递归调用。每个递归调用都需要大约(n-1) 2 的额外设置时间,因为我们需要从原始矩阵中提取该大小的子矩阵,因此该算法的每次调用总开销将是Θ(n 3 ),因为我们多次进行二次求线性。这意味着我们完成的工作大致是

  

T(n)= nT(n-1)+ n 3

完全忽略此处的三次项,请注意扩展递归将具有以下效果:

  

T(n)= nT(n-1)+ ...

     

= n(n-1)T(n-2)+ ...

     

= n(n-1)(n-2)T(n-3)+ ...

最终我们将得到n!出现的术语,再加上立方中的一堆额外术语。因此,这里所做的功至少为Ω(n!),而且一旦考虑三次项,可能还要大得多。

关于空间复杂度-处理空间复杂度时,请记住,一旦递归的一个分支终止,我们就可以重用该分支正在使用的空间。这意味着我们只需要查看任何一个分支即可查看需要多少空间。

通过这种简单的实现,我们显式地计算递归调用的子矩阵,我们将需要空间来存储一个大小为n×n的矩阵,其中一个大小为(n-1)×(n-1) ,大小为(n-2)×(n-2)等的一个。空间使用量总计为Θ(n 3 )。

还有许多其他算法可用于以更少的时间和空间计算行列式。例如,某些基于高斯消去并在时间O(n 3 )上运行。