Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
27
Добавлен:
03.03.2016
Размер:
541.7 Кб
Скачать

Сетевой подход к оценке трудоемкости алгоритмов

Сетевой подход удобен для анализа вручную и позволяет вычислять среднюю, минимальную и максимальную трудоемкость алгоритма на графах, не содержащих циклы. Для примера рассмотрим граф алгоритма, изображенный на рис.4. Воспользовавшись формулой (4) для рис.4 можем записать:

n0 = 1 ;

n1 = 1 * n0 = 1 ;

n2 = 0.5 * n1 = 0.5 ;

n4’ = 0.5 * n1 = 0.5 ;

n5’ = n4’ + 0.6n2 = 0.5 + 0.6 * 0.2 = 0.8 ;

n3’ = 0.4n2 + 0.25n5’ = 0.4 * 0.5 + 0.25 * 0.8 =0.4 ;

n6 = n3’ + 0.75n5’ = 0.4 + 0.75 * 0.8 = 1 ;

n7’ = 1 * n6 =1 .

За счет отсутствия циклов система оказывается легко разрешимой. Затраты времени на анализ могут быть снижены дополнительно, если ввести эффективную нумерацию состояний графа алгоритма. Последняя заключается в том, что номер вершины должен быть таким, чтобы входящие в эту вершину дуги начинались в вершинах с меньшими номерами. Если после такой нумерации уравнения записывать в порядке возрастания их номеров, то они будут сразу решаться, так как неизвестные с меньшими номерами будут уже вычислены. В приведенном примере нумерация вершин не соответствует указанному требованию, но уравнения записывались в порядке их решения.

При наличии в графе алгоритма циклов последние следует заменить операторами с эквивалентной трудоемкостью. Если в графе алгоритма имеются циклы в цикле, то, очевидно, первоначально следует заменить эквивалентными операторами внутренние циклы, а затем переходить к замене внешних циклов. Расчет трудоемкости алгоритма выполняется по вышеприведенной методике.

Обозначим через pc вероятность замыкания цикла, т. е. вероятность перехода по дуге из конца цикла в его начало. Тогда в соответствии с выражением (4) можно записать :

nc = 1 + pcnc , (6)

где nc - среднее число повторений цикла.

Из выражения (6) имеем:

(7)

Тогда среднее число процессорных операций цикла будет равно :

kc = nckтс ,

где kтс - средняя трудоемкость тела цикла;

kс - средняя трудоемкость цикла.

Среднее число обращений к файлам и среднее количество информации, передаваемое при обращении в цикле к файлам, определяется аналогично.

Рассмотрим пример.

В алгоритме на рис.3 имеется два цикла. Первый содержит операторы V3,V4,V5, а второй состоит только из оператора V7. Первый цикл усложнен входами внутрь цикла из операторов V1 и V2 . Для избавления от входов в цикл не через начало цикла V3 произведем элементарные преобразования графа алгоритма. Эквивалентный граф после очевидных преобразований изображен на рис.5. Из рис.5 следует, что операторы V4 и V5 , которые использовались для входа в тело цикла не через его начало, вынесены отдельно под номерами 4’ и 5’.

Количество повторений циклов из выражения (7) равно :

где nc1, nc2 - число повторений первого и второго циклов.

Граф алгоритма без циклов приведен на рис.4.

Вышеприведенный подход позволяет вычислить среднюю трудоемкость алгоритма. Для оценки максимальной и минимальной трудоемкости алгоритма необходимо перебрать все возможные пути, ведущие из начальной вершины графа алгоритма в конечную, и выбрать из них пути, дающие максимальную и минимальную трудоемкость. Следует учесть, что, например, путь с минимальным количеством процессорных операций может иметь не минимально возможное число обращений к файлам. При наличии циклов в графе алгоритма для тела цикла определяется минимальная и максимальная трудоемкость. Находится минимальное и максимальное число повторений цикла и формируются соответствующие эквивалентные по трудоемкости операторы.

В качестве примера оценим минимальное и максимальное число процессорных операций для графа алгоритма, изображенного на рис.4. Для упрощения примем, что все операторы имеют трудоемкость, равную 1000 процессорных операций. Через Ai и Bi будем обозначать соответственно минимальное и максимальное число процессорных операций, которое будет иметь место в момент выхода процесса из i-й вершины графа.

A0 = 0; B0 = 0;

A1 = min(A0) + 1000 = 1000; B1 = max(B0) + 1000 = 1000;

A2 = min(A1) + 1000 = 2000; B2 = max(B1) + 1000 = 2000;

A4’ = min(A1) + 1000 = 2000; B4’ = max(B1) + 1000 = 2000;

A5’ = min(A2,A4’) + 1000 = 3000; B5’ = max(B2,B4’) + 1000 = 3000;

A3’ = min(A2,A5’) + 1000 = 3000; B3’ = max(B2,B5’) + 1000 = 4000;

A6 = min(A3’,A5’) + 1000 = 4000; B6 = max(B3’,B5’) + 1000 = 5000;

A7 = min(A6) + 1000 = 5000; B7 = max(B6) + 1000 = 6000.

Соседние файлы в папке Компьютерные системы 3 курс