Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Алферова, З. В. Математическое обеспечение экономических расчетов с использованием теории графов

.pdf
Скачиваний:
20
Добавлен:
20.10.2023
Размер:
8.54 Mб
Скачать

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

Определим

основные

сигнализирующие функции

применитель­

но к вычислительным

машинам.

Тм

(п) определяет

 

Сигнализирующая

времени

длительность

процесса вычислений и рассчитывается по формуле

 

 

 

Тм(п) = т а х

Тм{р),

 

 

 

 

 

\р\<п

 

 

где М — некоторая вычислительная

машина, на которой реализу­

ется

алгоритм;

 

 

 

 

р — произвольное слово, обрабатываемое машиной М;

\р \ — длина слова р\

 

 

 

 

Тм(р)—время

обработки

самого короткого слова р

в машине М.

п — произвольное натуральное число.

 

Под словом будем понимать исходную информацию, необходи­

мую для одноразового решения задачи.

 

Чтобы найти Тм

(п),

нужно,

как

видно из формулы, для каж­

дого слова, по длине не превосходящего п, определить наименьшее

время его обработки. Затем среди всех этих времен берется мак­

симальное. Оно и будет значением функции

Тм (п).

Таким образом, Тм (п)—это время, с

одной стороны, заведо­

мо достаточное для обработки слова р длиной п, а с другой сто­ роны, необходимое, так как среди слов длиною п имеется хотя бы

одно, которое нельзя обработать меньше чем за время Тм

(п).

Сигнализирующая

емкости

Ем

(п)

определяет объем

требуе­

мой памяти и рассчитывается по формуле

 

 

 

 

 

Ем{п) = т а х £ м ( р ) ,

 

 

 

 

 

 

| р | < "

 

 

 

 

где Ем

(р) — объем

памяти,

необходимый для

обработки

самого

 

короткого слова р в машине

М.

 

 

 

Сигнализирующая колебаний Км (X) определяет число изме­

нения направлений движения лент за время Тм

(р):

 

 

 

 

Км(п)

= т а х

Км

(р),

 

 

 

где Км

(р)—число

изменения направлений движения

лент при

 

обработке самого короткого слова.

 

 

 

Сигнализирующая

режима

RM

(п) определяет максимальное

число

случаев использования

дополнительной

памяти

за

время

Тм(р):

 

Ям(п)

= т а х # м

(р),

 

 

 

 

 

 

 

 

\<П

130

где RM

(р) — число случаев использования дополнительной памя­

 

ти при обработке самого короткого слова.

При

оценке сложности вычислений могут

рассматриваться не

только

отдельные сигнализирующие функции,

но и их совокуп­

ность, определяемая сигнализирующим оператором. В общем слу­

чае сигнализирующий оператор Ос ставит в соответствие

некото­

рой одноместной функции У%{х) ее сигнализирующую

Ф»(х), где

Ф = Т, Е, К, R. В нашей

терминологии в качестве такой одномест­

ной функции выступает

реализуемая

алгоритмом

задача

3* (р),

а в качестве сигнализирующей — ФА[

{р) •

 

 

 

 

Таким образом, сигнализирующие функции предназначены для

количественной

оценки

вычислительной

сложности

алгоритмов.

Они дают верхние оценки сложности вычислений.

 

Нахождение

нижних оценок

является

более сложным

делом и

требует

специ­

альной теории. Первые оценки сложности вычислений для кон­ кретных предикатов и функций были получены в конце 50-х — на­ чале 60-х годов в работах Г. С. Цейтина, М. О. Рабина, Б. А. Трахтенброта и его учеников. Однако здесь сразу пришлось столкнуться с большими трудностями, связанными с получением нижних оце­ нок, близких к верхним для памяти, и особенно времени вычисле­ ния. В настоящее время имеется целый ряд работ, в которых по­ лучены оценки сложности вычислений для булевых функций, для специального класса рекурсивных функций, для классов функций, вычислимых на конечных автоматах, и т. п.

Оценки сложности практически применимы не только для оцен­ ки вычислительной сложности алгоритмов, но также и для оценки сложности программ и конкретных схем их реализации.

Вопрос о сложности программ привлек внимание многих авто­ ров. М. Блюм [12] рассматривал соотношение между сложностью программ и временем вычисления. Г. С. Цейтин [78] получил оцен­

ку

сложности кратчайших программ,

порождающих

последова­

тельности данной длины. Д. Пейджер

[64] доказал

алгоритмичес­

кую

неразрешимость

проблемы

нахождения

минимальных

программ для таблиц.

Я. М. Барздинь [8] определяет

верхние и

нижние оценки сложности программ, распознающих принадлеж­ ность натуральных чисел, не превышающих п, рекурсивно пере­ числимому множеству.

Следовательно, под сложностью программы понимается ее длина. Точное определение этого понятия связано с уточнением метода программирования. Если под методом программирования

понимать

частично рекурсивную

числовую функцию

ср (р, х)

(где

р — программа,

а х^п

— любое

натуральное

число

из

множества

М),

то

под сложностью

программ понимается

числовой

функцио­

нал К

(М,

п).

 

 

 

 

 

 

 

 

 

 

Под длиной

программы

понимается

некоторая числовая харак­

теристика

программы Q(p).

В качестве

такой

характеристики

мо­

гут

выступать

объем

памяти,

занимаемый

программой,

или

число ее команд.

 

 

 

 

 

 

 

 

S*

 

 

 

 

 

 

 

 

 

 

 

131

§ 5. 2. АКСИОМАТИЧЕСКИЙ ПОДХОД К ОЦЕНКЕ СЛОЖНОСТИ

Число шагов, требуемых для вычислений значений функций, зависит, вообще говоря, от типа используемой машины, выбора программы вычислений и принципа кодирования входных и вы­ ходных данных. Однако аксиоматический подход к изучению слож­ ности алгоритмов и вычислений, предложенный Блюмом, является настолько общим, что почти не зависит от этих условий. Так, функция, которая требует для своего вычисления огромного числа шагов, может иметь более быструю программу. Другая же функ­ ция может обладать таким свойством, что, как бы быстро ни ра­ ботала программа для вычисления этой функции, существует дру­ гая программа, вычисляющая ту же функцию, которая работает значительно быстрее.

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

Теория сложности,

излагаемая Блюмом,

машинно-независима,

т. е. он

оценивает сложность рекурсивных

функций

независимо

от типа используемой для их вычисления машины.

 

 

 

Для

ввода

аксиом

и доказательства

теорем,

основанных на

этих аксиомах,

с каждой машиной Mi связывают

 

две функции:

1) частично рекурсивную функцию ф г ( р ) ,

которая

на

этой машине

вычисляется, и

2) частично рекурсивную

функцию

Ф,

( р ) , назы­

ваемую сигнализирующей функцией, которую можно понимать как число шагов или размер памяти, используемой машиной Mi, при заданном р (в качестве машины Mi Блюм подразумевает машину Тьюринга).

Теперь аксиомы могут быть сформулированы следующим об­

разом:

 

 

функция ф*(р) определена,

Аксиома

1. Частично

рекурсивная

если определена ее сигнализирующая

функция

Ф» (р).

Другими

словами, при заданном

р на входе машины Mi

через

конечное

число шагов

вычисляют

ф* (р), если

определена

функция Ф* (р).

Аксиома 2. Мера вычисления М принимает значения

Таким образом, функция М равна единице, если машина Mi перерабатывает входное слово р точно за т шагов, в противном случае М равна нулю.

132

В качестве т может рассматриваться также число ячеек па­ мяти.

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

Теорема ускорения гласит, что, как бы ни была выбрана ма­ шина для вычисления заданной функции, может быть построена другая машина, которая вычисляет ту же самую функцию за мень­ шее число шагов для бесконечно многих аргументов.

Тем самым доказывается существование бесконечно оптимизи­ руемых в смысле сложности классов функций.

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

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

оматической теории доказано, что нет и не может быть такой

еди­

ной

эффективной

процедуры,

которая в любом случае позволяла

бы

осуществить

оптимизацию

алгоритмов и программ. Таким

об­

разом, теория и практика оптимальных преобразований должны

рассматриваться

только

в рамках одной

алгоритмической

систе­

мы, тем самым

доказана

тщетность попыток преобразования

ал­

горитмов в различных алгоритмических системах.

 

 

Кроме того, теоретически доказано существование двух

оценок

сложности — нижней и

верхней. Такие

оценки имели место

на

практике, но они носили скорее интуитивный, а не теоретический характер. Аксиоматическая теория дала обоснование и доказа­ тельство правомерности таких оценок. Хотя практическое получе­

ние

нижних оценок связано часто с большими трудностями, тем

не менее усилия в этом направлении оправданы

и могут обеспе­

чить

получение

положительного результата, в

то

время

как рабо­

ты

в

области

эквивалентных преобразований

из

одних

систем в

другие не могут дать положительного результата.

133

§ 5. 3. ОЦЕНКА СЛОЖНОСТИ С ИСПОЛЬЗОВАНИЕМ ГРАФОВ

Несмотря на то, что в настоящее время в теории алгоритмов оценкам сложности уделяется большое внимание, исследования в этой области в большинстве своем остаются чисто теоретически­

ми. Из работ, имеющих практическую

направленность,

следует

отметить работы Д. А. Поспелова [62] и В. В. Шуракова

[80], в ко­

торых используется представление

алгоритмов в виде графов.

Д. А. Поспелов представляет алгоритмы в виде функциональ­

ного графа, а программы — в виде двух

графов: функционального

графа и графа управления.

 

 

 

 

 

Всякий алгоритм можно представить в виде некоторой после­

довательности функциональных операторов.

 

ФХ(Х,

У)

=

(г/,,

уа

,-.-,y1ni);

 

Ф2(Х,

Y)

=

{yu

у2

у1г)\

 

т(Х,

У) = и

У2

Упт).

 

При этом X означает множество исходных данных, а У— мно­ жество промежуточных результатов, получаемых в процессе вы­ полнения функциональных операторов Ф,.

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

На рис. 25а приведена граф-схема для алгоритма, определяе­

мого такой последовательностью

функциональных

операторов:

 

Ф\(хи

х2)

= (уи

yl

Уз);

 

 

 

Ф г ( 0 2 )

=

{уи

 

yl);

 

 

 

 

(у1

0?

) =

( # ? ) ;

 

 

 

 

Ф*(Уи

У и

У*) = (У\ ) •

 

 

Такая функциональная граф-схема отражает структуру алго­

ритма.

 

 

 

 

 

 

 

 

В функциональном

графе программы

вершины

графа отожде­

ствлены с линейными

фрагментами

программы, а дуги — с

функ­

циональными связями между фрагментами. Две вершины

графа

Ф, и Ф3- соединяются между

собой дугой, идущей из Фг- в Ф;- тогда

и только тогда, когда результат

фрагмента, соответствующего вер­

шине Ф,-, используется в качестве оператора во фрагменте,

соот­

ветствующем вершине Фу

 

 

 

 

 

 

 

Аналогично строится граф управления. Совмещение этих

двух

134

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

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

Представление программ в виде граф-схем используется при мульти­ программном преобразовании алго­ ритмов с целью их распараллелива­ ния. Время реализации функциональ­ ных операторов является одной из мер оценки сложности в таких алгоритмах.

у X?

Рис. 256. Граф программы

25а. Граф-схема алгоритма

135

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

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

Сложность алгоритма

можно характеризовать в основном дву­

мя параметрами: числом

операций

N И общим

объемом

информа­

ции, используемой алгоритмом, И.

С числом

операций

связано

время выполнения алгоритма на конкретной машине. Объем ин­ формации связан с объемом памяти, необходимой машине для реализации этого алгоритма.

Число операций связано прямой зависимостью с временем вы­ числения алгоритма {Т — ф (N)). Но выполнение различных опе­ раций требует различного времени. Так, операции сложения и вы­ читания, как наиболее простые, требуют меньшего машинного вре­ мени для своего выполнения. Отюда следует, что для определения сложности алгоритма необходимо знать не только общее количест­ во операций, но также и количество используемых в алгоритме типов операций и количество операций каждого типа в отдельно­ сти.

Количество операций для заданного алгоритма определяется следующим образом.

На основании анализа графа получаем вектор встречаемости операций в алгоритме

#={<?ь Q 2 . - - - , Q v , Q r } , где Qi — количество операций i-ro типа;

г количество операций в исследуемом классе задач и отно­ сительные частоты операций:

Pi= при Л/ = 2 Qi •

Умножая время выполнения каждой операции на количество этих операций и суммируя результаты по всем операциям, полу­ чим время реализации алгоритма

Т= i Qi-ti • i = l

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

136

где

ti

— время реализации t-й операции,

 

 

 

 

 

t3

— время

реализации

эталонной

операции

сложения.

Тогда

количество условных

элементарных операций

составит:

 

 

 

 

 

 

N3=

£

Bi-Qi

,

 

 

 

а общее время их реализации —

 

 

 

 

 

 

 

 

 

 

 

 

 

T,=N,-ta

 

 

 

 

 

Объем

информации,

используемой

алгоритмом, определяется

как

суммарный

объем,

необходимый

для

размещения

програм­

мной, исходной, промежуточной и выходной информации:

 

 

 

 

 

 

И = Ип

+ Ии

+ И в + И п р

,

 

 

где

И — общий объем информации,

 

 

 

 

 

Ип

 

объем программной информации,

 

 

 

 

Ии

 

— объем исходной информации,

 

 

 

 

 

Ив

 

— объем выходной информации,

 

 

 

 

И п р

— объем промежуточной информации.

 

 

 

На

 

основании этих параметров оценки сложности в

работе [74]

вводится

обобщенный параметр — коэффициент

сложности К, оп-

^Na

ределяемыи отношением А

С л =

- ~

 

 

 

Таким образом, коэффициент сложности характеризуется чис­

лом эталонных

 

операций,

выполняемых

при обработке

единицы

информации.

 

 

 

 

 

 

 

 

Определить

сложность

алгоритма

по

приведенной

методике

можно только

в

том случае,

если

известен вектор встречаемости

операций N={QU

Q2, . . . , Q r } .

Этот показатель может быть полу­

чен в результате

реализации

программы. В работе [75] предложе­

на программа

 

анализа

алгоритмов,

представленных

в языке

АЛГЭК. В результате работы по этой программе определяется частота использования следующих групп операций:

1)

+

, —

7)

:

=

(текстовое)

2)

X ,

/

8)

:

=

(арифметическое)

3)

= ,

Ф

9)

 

переход

4)

>

10)

 

обращение к библиотеке

5)

<

^

11)

 

элемент

6)

условный

оператор

 

 

 

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

Желательно иметь такой метод оценки сложности алгоритмов, который позволял бы оценить алгоритм до его представления в алгоритмическом языке. Это необходимо и на этапе проектирова­ ния механизированной обработки информации, и на этапе проекти­ рования АСУ, и на этапе проектирования вычислительных центров.

137

В данной работе для определения числа операций и, в частно­ сти, вектора встречаемости операций в алгоритме без записи его на алгоритмическом языке предлагается использовать аппарат графов.

Для определения числа операций алгоритм представляется в виде графа без контуров. Заметим, что любая логическая схема алгоритма может быть преобразована в бесконтурную путем запи­ си цикла максимальное число раз [23].

Как известно, в любом алгоритме можно выделить два вида элементов: операционные элементы и решающие элементы. Опе­ рационным элементам соответствуют отдельные операции или по­ следовательности операций, не прерываемые условной передачей управления. Решающим элементам соответствуют логические опе­ рации, вызывающие условные передачи управления. В качестве такой операции в большинстве случаев используется операция сравнения.

При построении графа алгоритма каждой элементарной опе­ рации (сложение, вычитание, умножение, деление, переадресация, сравнение и т. п.) сопоставляется вершина графа G(X,U). Вер­ шина графа Xi соединяется с вершиной Xi+\ в том и только в том случае, если операция, соответствующая вершине х%+\, выполняет­ ся непосредственно после операции х\. Таким образом, в графах, отражающих алгоритм, из каждой вершины, соответствующей операционному элементу, будет исходить точно по одной дуге, а из каждой вершины, соответствующей решающему элементу, — точно по две дуги.

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

жены друг в друга в соответствии

с их

соподчиненностью.

Для определения числа операций по

графу ориентация дуг в

нем меняется на противоположную.

 

 

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

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

Число операций для каждой из вершин графа G (X, U) опре­ деляется в результате умножения значения параметра mit соот­ ветствующего данной вершине, на произведение параметров 1} по пути, ведущему от заданной вершины к конечной:

Ni~miY\lj >

138

где / соответствует номерам тех дуг, которые ведут из вершины Xi в конечную вершину.

Суммарное число операций данного вида получается в резуль­ тате суммирования полученных количеств по всем путям, связы­ вающим соответствующие им вершины с конечной.

Рассмотрим расчет числа операций на примере составления сводки о реализации фондов в отделе строительных материалов. Граф алгоритма этой задачи, построенный с учетом изложенных требований, представлен на рис. 26.

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

Рис. 26. Граф алгоритма для расчета числа операций

139

Соседние файлы в папке книги из ГПНТБ