一维和二维阵列的时间复杂度

时间:2016-03-30 17:25:20

标签: c arrays multidimensional-array time time-complexity

例如,从用户那里获取大小为n的一维数组的输入,我们知道它的时间复杂度为O(n)。

for(i=0;i<n;i=i+1)
     {
         scanf("%d",&a[i]);
     }

现在,如果数组是二维的,则时间复杂度为O(n ^ 2)

for(i=0;i<n;i=i+1)
{
   for(j=0;j<n;j=j+1)
   {
       scanf("%d",&a[i][j]);
   }
}

但即使二维数组也以与一维数组相同的方式保存。它本质上只是一个尺寸的增加,为什么会有差异?

2 个答案:

答案 0 :(得分:1)

时间复杂度的差异是因为您要存储的元素数量。

对于线性1D数组,您以线性方式存储n个元素,并且它也以线性方式存储。所以时间复杂度为O(n)

对于2D数组,假设您正在存储m个元素,这些元素实际上只以线性方式存储在内存中。但是,您使用的是分为行(和列)的元素。现在,例如,每行和每列的大小为n,然后您正在阅读n*n元素,这只是m元素(m == n*n)。因此,复杂性为O(m)O(n^2)

答案 1 :(得分:1)

一种感知问题,因为如果你有n个元素,那么它将是O(n),但是如果你根据一个数组维度进行测量,你将不会是n ^ 2,除非它是一个方形矩阵(我看到你的是)...所以最好把它想象成O(h * w)或者只是0(n)...