使用2D数组vs使其平坦以减少C语言中的运行时间

问题描述 投票:0回答:1

我正在处理一个2D数组,我的目标是尽可能减少我的函数(用C编写)的运行时间。我正在对2D数组进行统计计算,例如查找平均值和最小值。因此,存在涉及计算此类属性的嵌套循环。在这种情况下,将2D数组转换为1D数组会提高性能吗?

c arrays multidimensional-array runtime benchmarking
1个回答
0
投票

如果放置了可以使答案更正确的代码.....我认为,即使是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; }
这是一个证明它们采取相同步骤的示例……两个用于计算循环步骤的计数器具有相同的值

如果您输入您的代码,我们可能会提出更好的想法....

© www.soinside.com 2019 - 2024. All rights reserved.