Recursion nxn矩阵递归行列式算法的时间和空间复杂度

Recursion nxn矩阵递归行列式算法的时间和空间复杂度,recursion,time-complexity,big-o,space-complexity,determinants,Recursion,Time Complexity,Big O,Space Complexity,Determinants,我试图找出下面算法的运行时和空间复杂性 有人说它的运行时复杂性是O(n!),我猜这是因为有n!递归调用求解n*n矩阵的递归算法。但我不确定我是否正确 还有,空间复杂度也是n 写出一个明确的递归关系可能会有所帮助,该关系控制递归算法直接实现的运行时。注意,在处理n×n矩阵时,求和需要对大小为(n-1)×(n-1)的矩阵进行n次递归调用。每个递归调用需要大约(n-1)2个额外的时间来设置,因为我们需要从原始矩阵中提取一个大小相同的子矩阵,所以该算法每次调用的总开销将是Θ(n3),因为我们线性地做了

我试图找出下面算法的运行时和空间复杂性

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


还有,空间复杂度也是n

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

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

完全忽略此处的立方项,请注意,展开递归将产生以下效果:

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)的矩阵,等等,这些矩阵的空间使用总计为Θ(n3)


还有一系列其他的算法,你可以用更少的时间和空间来计算行列式。例如,有些问题基于高斯消去法并在时间O(n3)内运行。

这个问题可能更适合或甚至更适合(因为它涉及的是算法和复杂性,而不是编程)。谢谢您的回答!抱歉,我仍然不太明白为什么空间复杂度是Θ(n3),您说过系统在任何给定时间只需要足够的存储空间来存储一个分支。一个分支应该有n个级别(n,n-1,n-2,…1)。那么这是否意味着每个递归调用也需要一个矩阵的nn存储空间呢。那么所需的总空间是n个级别乘以nn每个级别所需的空间量=n^3?您只需要递归的一个分支的存储空间。这将有n个层,每个层需要大约n^2的空间来存储与该层关联的矩阵。因此,是的,您需要根据创建的新矩阵所需的空间来缩放所有内容。谢谢!对于运行时的复杂性,你知道它的大O可能是什么吗?我的意思是,它是超指数的,所以实际的答案是“不要这样计算,因为它至少是n个运算。”如果你对理论答案感兴趣,我们可以一起解出一个,但我怀疑它是否有用。(顺便说一句,我是以数学和理论的狂热爱好者的身份说这番话的!)