遍历对称矩阵(或n维数组)的时间复杂度

时间:2019-02-16 20:49:11

标签: algorithm matrix multidimensional-array time-complexity complexity-theory

我对时间复杂度对称矩阵上进行迭代感到好奇。

我知道对于标准矩阵(二维数组),复杂度为O(Nˆ2)。但是,对于对称矩阵,我们仅对遍历其上三角部分而不是对其所有元素进行遍历。

这是迭代对称矩阵的常用算法:

for(int i=0; i < symmetricM.length; i++) 
        for(int j=i; j < symmetricM.length; j++ )
            System.out.println("Elem: "+symmetricM[i][j]);

如果可能的话,我想对任何对称的多维数组扩展相同的推理。

我无法自行计算,但是由于这种方法解决了许多问题,因此我希望在复杂性方面感到满意。

谢谢。

1 个答案:

答案 0 :(得分:2)

让我们看一下我们在对称二维数组中迭代的元素数量,由于大小为n^2/2并且有n个维度,所以它是2,因此我们提高了幂取2并除以2仅得到元素的一半。 O(n^2)

现在,让我们看一下在对称3维数组中迭代的元素数量。是n^3/6。您可以得出结论,以同样的方式计算volume of a 3 dimensional triangle,因为所有数字均位于此三角形区域。即使我们除以3,时间复杂度仍为O(n^3)

对于4维,它将是n^4/(4*3*2),即O(n^4)。但是对于m维,它将是n^m/m!,并且由于该维是参数,因此根据此方法,时间复杂度将为O(n^m/m!)

另一种计算方法是,如果删除该尺寸的对角线,则在没有重复元素且所有元素都不相同的情况下,要迭代的项的索引与组合相同。我们知道该组合的数量为n!/m!(n-m)!n choose m,所以这也可能是时间复杂度。

根据大多数factorial approximations,最大元素是n^n,因此当使用这些近似值并忽略较小的因素时,时间复杂度保持不变,因为:
n!/m!(n-m)! ≈ n^n/m!(n-m)^(n-m) > n^n/m!n^(n-m) = n^m/m!

因此最终时间复杂度将为O(n^m/m!)