
Сообщение от
Deviaphan
А если они не зависят друг от друга, то добро пожаловать в жестокий мир многопроцессорного программирования.
Например,
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
| for (i=0; i<9; ++i)
{
for (j=i+1; j<10; ++j)
{
if (a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
} |
|
и
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
| for (i=9; i>0; --i)
{
for (j=i-1; j>=0; --j)
{
if (a[j]>a[i])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
} |
|
эквивалентны, но параллелизма не терпят. Можно перевернуть и Гаусса, и определитель матрицы и произведение матриц. Если цикл не занимается вводом/выводом, или последовательным доступом (например, к линейному списку), то можно перевернуть и зависимость. Даже в авторасписании бывают перевернутые циклы. А если ты в конкретном случае не можешь перевернуть зависимость, то счастливо отвлечься на изучение математических дебрей.
Добавлено через 8 минут

Сообщение от
Deviaphan
А что именно перебирается при помощи индекса, если это не массив?
Телом цикла может быть второй цикл и оба вместе могут решать уравнение каким нибудь методом последовательного приближения, тогда внешний цикл перебирает не индекс, а абстрактный счётчик. По идее счёткчик в этом случае не нужен, там должен быть цикл с постусловием достижения некоторого значения невязки, но на него вешают защиту от затягивния в виде составного условия повторения, ложного не только при малой невязке, но и при превышении заданного числа итераций. У меня таких циклов было по шесть штук на проект и крутились они часами.
Добавлено через 11 минут
Ну и, наконец, самый тупой вариант - поиск определённого по счёту элемента линейного списка.
C++ |
1
2
3
4
5
6
| int & larray::operator [] (unsigned int index)
{
int *p;
for (p=start, ++index; (index>0)&&(p->next=NULL); p=p->next, --index);
return *p;
} |
|
Ну и факториал, конечно,:
C++ |
1
2
3
4
5
6
7
8
9
| int factorial(unsigned int x)
{
int r=1;
for (; i>0; --i)
{
r*=i;
}
return r;
} |
|
. Случаи, когда сравнение трогать нельзя, в контексте его оптимизации не рассматриваются. Но там инкремент/декремент врядли не примерно по ровну.