【发布时间】:2014-08-02 10:55:45
【问题描述】:
在这里,我可以像这样声明一个二维数组
int dp[105][140000]
或者像这样
int dp[140000][105]
当我使用这个数组时,我发现第一个和第二个之间存在显着的时间差异。第一个比第二个快得多。这是为什么? 例如我正在运行的这段代码
for(int i=1;i<=n;++i)
for(int k=1;k<60;++k)
{
int x = (~fact[k]) & ((1<<17)-1);
for(int s=x;s;s=(s-1)&x)
{
if(dp[i-1][s]+abs(A[i]-k) < dp[i][s|fact[k]])
{
dp[i][s | fact[k]] = dp[i-1][s] + abs(A[i]-k);
dpchoosen[i][s|fact[k]] = k;
dptracer[i][s|fact[k]] = s;
}
}
}
【问题讨论】:
-
缓存。彼此相邻处理的元素应在内存中彼此相邻放置。
-
我不明白为什么缓存在这两种情况下都会更好或更差。无论哪种方式,数组成员都按顺序排列。 @weak_coder ,我认为您至少需要提供一些基本细节,说明您对数组的实际操作,以便人们有机会很好地回答您的问题。
-
“当我使用这个数组时...” - 什么工作?。贴出代码。
-
问题不清楚,应提供更多信息...
-
n是什么???fact是什么?你如何设法在两个数组声明中使用相同的代码?
标签: c++ multidimensional-array