【发布时间】:2016-07-18 20:39:36
【问题描述】:
以从用户那里获取大小为 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]);
}
}
但是即使是二维数组也以与一维数组相同的方式保存。本质上只是尺寸的增加,为什么会有区别?
【问题讨论】:
-
内循环运行
n次,内循环的内容会执行n次,因此内循环的内容会执行n*n=n to the power of 2次. -
您正在为另一个数组(
n元素)的每个元素处理一个数组(n元素)的所有元素。n * n = n ^ 2. -
内存中的内存不一定总是相同的,并且根据具体情况,它们可能具有非常不同的访问成本
-
@owacoder 我理解,但是由于一维和二维数组以相同的方式存储元素,所以二维数组可以被认为是一个大尺寸的一维数组。无论如何,我理解哈里斯的观点。谢谢
标签: c arrays multidimensional-array time time-complexity