У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


( A or B or C and D ) матиме значення true , як тільки один із операндів матиме значення true. Отже, треба розташовувати логічні операнди таким чином, щоб на початку виразу послідовних логічних додавань знаходився операнд, який найчастіше має значення “істина”.

Якщо ж компілятор не зупиняє обчислень при відомому результаті логічного виразу, то в деяких випадках можна зменшити кількість логічних перевірок, наприклад замінивши оператор

if (( a > b ) and ( c > d )) then …

на

if ( a > b ) then

if ( c > d ) then …

7. Індексація.

Якщо можна не використовувати багатовимірні масиви, то краще цього не робити (при кожному звертанні до елемента багатовимірного масива, наприклад, A[i,j], відбувається перерахування дійсної адреси елементу масива, оскільки у пам’яті масив розташований лінійно). Отже, якщо це можливо, зведіть до мінімуму кількість звертань до елементів масивів, особливо багатовимірних.

Приклад (множення матриць).

for i := 1 to n do

for j := 1 to n do

begin

c[i,j] := 0.0;

for k := 1 to n do

c[i,j] := c[i,j] + a[i,k]*b[k,j];

end;

Кращий варіант (введемо зайву змінну temp):

for i := 1 to n do

for j := 1 to n do

begin

temp := 0.0;

for k := 1 to n do

temp := temp + a[i,k]*b[k,j];

c[i,j] := 0;

end;

8. Оптимізація циклів.

Цикли завжди утворюють критичну область, отже, мінімальна оптимізація в тілі циклу може значно покращити характеристики програми.

9.Видалення надмірних операцій

Повторні обчислення в циклах є типовою помилкою, яка впливає на ефективність. В наступних прикладах із циклів видалені інваріантні вирази.

Замість:

for i := 1 to n do

for k := 1 to n do

x[i,k] := A[i] + sin(k*i); | Краще:

for i := 1 to n do

begin

Ai := A[i];

for k := 1 to n do

x[i,k] := Ai + sin(k*i);

end;

Замість:

for i := 1 to n do

S := S + x[i]/n; | Краще:

for i := 1 to n do

S := S + x[i];

S := S/n;

10. Порядок вкладання циклів

Організація та виконання циклів типу for вимагають деяких неявних додаткових затрат часу часу на ініціалізацію змінної циклу та на перевірку на кожному кроці необхідності завершення циклу. Правильною організацією вкладених циклів можна економити час роботи програми. Розглянемо приклад.

for i := 1 to 1000 do

for j := 1 to 100 do

for k:= 1 to 10 do

begin

(* 1000*100*10 кроків *)

end; | Неявні операції:

1 ініціалізація i + 1000 перевірок на завершення;

1000 ініціалізацій j + 100000 перевірок;

1000000 ініціалізацій k +1000000 перевірок

Усього:

1001001 ініціалізація + 1101000 перевірок

Якщо порядок вкладання циклів є інваріантним щодо тіла циклу (для множення матриць, наприклад, це не так), то краще організувати вкладені цикли таким чином:

for k := 1 to 10 do

for j := 1 to 100 do

for i:= 1 to 1000 do

begin

… (1000*100*10)

end; | Неявні операції:

1 ініціалізація k + 10 перевірок завершення;

10 ініціалізацій j + 1000 перевірок;

1000 ініціалізацій i + 1000000 перевірок

Усього:

1011 ініціалізацій + 1001010 перевірок

Отже, будемо користуватись правилом: в інваріантних випадках порядок вкладання циклів визначається зростанням кількості ітерацій циклу (від найкоротших до найдовших).

ЛІТЕРАТУРА

Н. Вирт. Систематическое программирование. – М.: Мир, 1977. – 183 с.

Ален И. Голуб. С и С++. Правила программирования. – М.: БИНОМ, 1996. – 272 с.

У. Дал, Э. Дейкстра, К. Хоор. Структурное программирование. – М.: Мир, 1973. – 247 с.

Э. Дейкстра. Дисциплина программирования. – М.: Мир, 1978. – 275 с.

Д. Ван Тассел. Стиль, разработка, эффективность, отладка и испытание программ. – М.: Мир, 1985. – 332 с.

М. Зелковиц, А. Шоу, Дж. Гэннон. Принципы разработки программного обеспечения. – М.: Мир, 1982. – 368 с.

Г. С. Иванова. Основы программирования: Учебник для вузов. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. – 416 с.

Г. С. Иванова. Технология программирования: Учебник для вузов. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2002. – 320 с.

Э. Йодан. Структурное проектирование и конструирование програм. – М.: Мир, 1979. – 415 с.

Б. Керниган, Р. Пайк. Практика программирования. – СПб.: Невский диалект, 2001. – 381 с.

Э.Б. Коффман. Turbo Pascal. – М.: Издательский дом «Вильямс», 2002. – 896 с.

Р. Линнер, Х. Миллс, Б Уитт. Теория и практика структурного программирования. – М.: Мир, 1982. – 406 с.


Сторінки: 1 2