[英]Rewriting nested for loop as a single for loop without redundancy in C for OpenMP
我正在嘗試制作一個 function,在 arrays 的列表中,將每個數組與它后面的每個數組進行比較:數組 0 將自己與 Arrays 1、2、3、4 等進行比較,數組 1 將自己進行比較到 Arrays 2、3、4 等等,但不是 0,因為我們已經比較過了。 rest 也是如此:數組 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
循環比較?
for (int i = 0; i <= (number_of_arrays - 1)*number_of_arrays; i++)
{
if(i%number_of_arrays > i/number_of_arrays)
printf("Comparing Array %d with Array %d\n", i/number_of_arrays, i%number_of_arrays);
}
您可以使用continue
添加一個簡單的if
條件。
for (int i = 0; i <= (number_of_arrays - 1)*number_of_arrays; i++){
if(i/numer_of_arrays >= i%number_of_arrays)
continue;
printf("Comparing Array %d with Array %d", i/number_of_arrays, i%number_of_arrays);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.