我正在处理一个2D数组,我的目标是尽可能减少我的函数(用C编写)的运行时间。我正在对2D数组进行统计计算,例如查找平均值和最小值。因此,存在涉及计算此类属性的嵌套循环。在这种情况下,将2D数组转换为1D数组会提高性能吗?
如果放置了可以使答案更正确的代码.....我认为,即使是1D或2D,计算数组中的所有元素也需要相同的步骤数(计算平均值相同)]
2D在某些情况下可能更好,如果您的数据是以Ith行中的每一组元素进行组织的,并且您只想对该行中的元素进行某些操作,则为
嵌套循环具有与普通循环相同的步数(使用额外变量i,j而不是仅使用i ...这是唯一的额外事情。这可能会使程序为< [j和j ++操作的额外时间,比较j与COLS的值以及某些汇编操作(如分支)可以重复....我认为这没什么大不了的,因为这些天处理器已经更快,RAM更大,不会以这种方式影响性能,如果您需要数组具有行和列,就不会认为这是一种方式)
#define ROWS 3
#define COLS 3
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int Arr[ROWS][COLS] = { { 10, 20, 30 }, { 40, 50, 60 }, { 70, 80, 90 } };
int Arr2[] = { 10, 20, 30, 60, 50, 40, 90, 80, 70 };
int counter1D, counter2D;
counter1D = counter2D = 0; //for storing number of iterations
puts("2D Way");
for (int i = 0; i < ROWS; i++) {
printf("print :the %d ROW\n", i);
for (int j = 0; j < COLS; j++) {
printf("%d\n", Arr[i][j]);
counter2D++;
}
}
//print all elements in array
//1D way :
puts("1D way");
for (int i = 0; i < ROWS * COLS; i++) {
printf("print the %d element %d\n", i, Arr2[i]);
counter1D++;
}
printf("2D counter %d 1D counter %d ", counter2D, counter1D);
return 0;
}
这是一个证明它们采取相同步骤的示例……两个用于计算循环步骤的计数器具有相同的值如果您输入您的代码,我们可能会提出更好的想法....