例如,从用户那里获取大小为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]);
}
}
但即使二维数组也以与一维数组相同的方式保存。它本质上只是一个尺寸的增加,为什么会有差异?
答案 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)...