【发布时间】:2020-05-27 20:05:53
【问题描述】:
我正在尝试创建一个函数,在数组列表中,将每个数组与其后面的每个数组进行比较:数组 0 将自身与数组 1、2、3、4 等进行比较,数组 1会将自身与数组 2、3、4 等进行比较,但不是 0,因为我们已经比较了它。其余部分也是如此:数组 2 将自己与 3、4 等进行比较。
通常这可以通过一个简单的嵌套 for 循环来完成:
for (int i = 0; i <= number_of_arrays - 1; i++){
for (int j = i+1; j<= number_of_arrays; j++){
printf("Comparing Array %d with Array %d", i, j);
}
}
但是,由于我使用的是 OpenMP,我不能在另一个内部使用 #pragma omp for。
该解决方案通常也使用collapse(2),但我也不能使用,因为我的内部循环的计数器取决于我的外部循环的计数器。
为了不出现这个问题,我必须把它变成一个单一的for循环,一般的解决方案似乎是:
for (int i = 0; i <= (number_of_arrays - 1)*number_of_arrays; i++){
printf("Comparing Array %d with Array %d", i/number_of_arrays, i%number_of_arrays);
}
}
然而,这将导致我的代码冗余,例如,我会将数组 0 与数组 1 进行比较,然后将数组 1 与数组 0 进行比较。
我怎样才能将我拥有的东西变成一个不会进行冗余比较的 for 循环?
【问题讨论】: