Реферат: Оптимизация программ
для K:=I+J, K+1 пока K<100+J
цикл
начало
A[K]:= A[K]+1 конец;
K:=10;
Здесь I,K - индуктивные переменные. В данном случае из цикла удалено индуктивное выражение K:=I+J.
4.2.2. Замена сложных операций на более простые
Весьма важным преобразованием из этой группы является понижение силы операций, заменяющее в индуктивных вычислениях сложные операции на более простые; например, возведение в степень или деление заменяется умножением ( например, выражение Х/4.О заменяется на выражение Х* О.25), а умножение - сложением.
Например, применение этого преобразования позволяет переходить от цикла
для K:=1, K+1 пока K<=100
цикл V:=(K-1)*N+I
к более эффективно работающему фрагменту:
V:=I;
для K:=1, K+1 пока K<=100
цикл
начало A[V]:=A[V]+1;
V:=V+N конец
Замена сложных операций на более простые не всегда приводит к оптимизации, на самом деле это может даже привести к замедлению, например для программ с циклами, состоящими из нескольких частей, из которых лишь немногие выполняются на каждом шаге цикла.
4.2.3. Исключение избыточных выражений
В группу преобразований по упрощению действий входят также исключение избыточных (лишних) выражений. Оно заключается в замене вхождений выражений на переменную, значение которой совпадает со значением выражения.
Например, эта операция осуществляет переход от фрагмента
если B>0 то
начало
A:=A+2; X:=A*B+C; конец
иначе Y:=A*B+D;
Z:= A*B;
к фрагменту
если B>0 то
начало
A:=A+2; W:=A*B; X:=W+C; конец
иначе начало