- •Министерство образования и науки РФ
- •ПРЕДИСЛОВИЕ
- •1. Логические схемы алгоритмов
- •3. Граф-схемы алгоритмов.
- •4. Формальные преобразования операторных схем алгоритмов
- •4.1 Формулы перехода
- •4.2 Подчинённость операторов логическим функциям [2]
- •4.3 Эквивалентность алгоритмов
- •4.4 Полная система преобразования схемных формул перехода
- •4.5 Равносильные преобразования матричных схем алгоритмов
- •4.6 Минимизация логических схем алгоритмов с учётом заданных распределений сдвигов
- •5. Объединение операторных схем алгоритмов
- •Заключение
- •Библиографический список
5
1. Логические схемы алгоритмов
Формальный язык для описания алгоритмов (ЛСА) был первоначально ориентирован на задачи оптимизации программ для ЭВМ, а в последствии оказался удобным и для оптимизации микропрограмм. Задачи этих классов широко распространены как в области проектирования средств вычислительной техники, так и при построении систем автоматического управления, связи и многих других.
Реализация алгоритма есть последовательное выполнение команд ЭВМ, каждая из которых в свою очередь является последовательностью элементарных действий-микрокоманд, выполняемых за один машинный такт.
Функцию задания алгоритма А.А.Ляпунов [1] предложил записывать определенным способом, а именно в виде конечной строки, состоящей из символов элементарных действий А i , где i изменяется от 1 до n (n – целое положительное число), логических функций αp (p =1,m) и специальных символов начала и конца стрелок с индексом, где индекс также целое положительное число.
Символы A1,A2,…,An он предложил называть операторами, а символы α1, α2,...-логическими условиями. Логическое условие ( ЛУ) - это такая функция, которая может принимать лишь два значения – 0 или 1. Оказалось, что с помощью введенных понятий возможно формально описать любой алгоритм, используя
терминологию логики. Действительно, допустим символ α (х =х ) означает, что
1 1 2
α1=1, если равенство истинно и α1=0 в противном случае.
Рассмотрим некоторый алгоритм как определенную последовательность операторов.
U=A1 α1 1 A2 α2 2 A3 α3 3… ¯ 2A10 α10 3…Ak |
(1.1) |
Будем считать, что ЛУ, за исключением α2 ,равны единице, а α2 =0. Тогда выражение (1.1) можно переписать в виде
U =A1 A2 α2 2 A3 … ¯ 2A10 …Ak |
(1.2) |
так как действия стрелок трактуются следующим образом: после выполнения оператора A1проверяется его ЛУ α1; если α1=1, то выполняется следующий оператор, т.е. А2,а если α1=0 , то необходимо в строке отыскать конец стрелки ¯ 1 и выполнить стоящее справа от неё элементарное выражение. Так как все ЛУ, кроме α2 ,равны 1,то это и позволяет нам перейти от выражения (1.1) к выражению (1.2).
Определение
Логической схемой алгоритма (ЛСА) будем называть конечную строку, состоящую из символов операторов А1,А2,…,Аn, логических условий со стрелками α1 1, α2 2 ,… αm m и концов стрелок ¯ 1 , ¯ 2,… ¯ m такую, что для каждого начала стрелки c индексом i найдётся один и только один конец
стрелки с тем же индексом.
6
Из этого определения следует, что несколько начал стрелок могут иметь одинаковые индексы, но все они привязаны к единственному концу стрелки с этим индексом.
Примечание
Определение ЛСА относится к классу детерминированных алгоритмов, так как в классе стохастических алгоритмов переходов от оператора Ai может быть более одного.
Каждый отдельный оператор или логическое условие назовём “элементарным выражением”, а фрагмент строки из элементарных выражений со стрелками, где для каждого индекса i имеется не более одного начала стрелки и одного конца с индексом i – “выражением”.
Из ранее приведённых рассуждений вполне понятно, что в любой ЛСА порядок выполнения операторов определяется состоянием всех ЛУ. Будем для определённости считать, что ЛУ могут изменять своё состояние, но только во время выполнения некоторого оператора.
Таким образом, описание алгоритма в общем виде в терминах ЛСА может быть представлено:
U = U (A1,…,An; p1,…,pm) , |
(1.3) |
здесь Ai (i = 0, n) - множество операторов,
pj ( j = (1, к) -множество логических переменных, входящих в функции
αt (p1,p2,…,pm).
Всевозможные наборы состояний логических переменных p1, …,pm обозначим
1, 2,…, m, m+1,… |
(1.4) |
Тогда процесс реализации ЛСА для произвольной последовательности наборов (1.4) определяется следующим образом :
1. Выбираем начальный набор независимых логических переменных 1. 2 . Анализируем самое левое элементарное выражение ЛСА: если это ЛУ,
то может быть два продолжения: при рi =1 переходим к анализу следующего элементарного выражения, а при рi = 0 переходим к анализу элементарного выражения, стоящего справа от конца стрелки с индексом i. При выполнении оператора совершается переход от набора 1 к s , где S – индекс выполняемого оператора.
Строка операторов, полученная в результате описанных действий, является значением ЛСА для заданной последовательности наборов (1.4)
Введём обозначения:
U - алгоритм произвольного вида, заданный в терминах ЛСА; B={А1,А2,…,Аn}- конечное множество операторов заданной ЛСА;
Ф={p1,p2,..,pm} – конечное множество ЛУ (или независимых логических переменных) заданной ЛСА.
В работе Ю.Н.Янова[2] введено понятие “распределения сдвигов оператора”, смысл которого заключается в следующем. Оператор во время выполнения может изменить состояние некоторых или всех ЛУ, поэтому каждому оператору может быть поставлено в соответствие подмножество Аi – Фi Í Ф.
7
Отсюда следует, что распределение сдвигов оператора может быть трёх видов: 1.Универсальное, когда Фi={p1,p2,..,pm} и оператор Аi может изменить
состояния всех ЛУ, т.е. Фi = Ф.
2.Пустое, когда Фi={} , а оператор Аi при своём выполнении не влияет на состояния ЛУ.
3.Нормальное, когда Фi Í Ф.
Последовательность наборов логических переменных будем называть “допустимой” для реализации ЛСА в виде А1,А2,…Аm,Am+1… ,если всякий набор m+1 либо совпадает с набором m ,либо отличается от последнего значениями тех логических переменных, которые определены заданным распределением сдвигов оператора Аm .
Весьма важным понятием в алгоритмической системе ЛСА является понятие “равносильности”. Будем говорить, что ЛСА U 1 и U 2 равносильны при заданном распределении сдвигов и писать U 1= U 2, если для всякой заданной последовательности наборов логических переменных, которая допустима для ЛСА U 1 и
U 2, значения (реализации) этих ЛСА совпадают. Разумеется, что ЛСА U 1 и U 2 содержат одинаковые наборы операторов.
Это понятие не является эффективным для практического получения равносильных ЛСА, особенно в случае сложных алгоритмов, так как требует громоздкого перебора всевозможных вариантов. Но из него вытекают возможности вывода ряда формул, позволяющих трансформировать данную ЛСА U 1 в U 2, равносильную U 1.
Пример 1.1
Дана ЛСА
U =A0 ¯ 2A1p1 1p2 2 ¯ 3A2p2 2ω 3 ¯ 1p3 4p2 2ω 3 ¯ 4A3p1 5p3 4p2 2ω 3 ¯ 5 Ak (1.6)
где A0,Ak – операторы начальной и конечной установки алгоритма; Ai (i =1,3) - операторы реализации алгоритма;
pj ( j =1,3) - логические переменные, принимающие значения 0 или 1 согласно распределению сдвигов;
ω S =0 – логическое условие , тождественно равное нулю, что равносильно безусловному переходу по индексу S;
Учитывая несовпадающие варианты наборов ЛУ, возможно получить несколько видов реализации алгоритма:
1=p1 |
p2 |
|
p3 |
U 1= A0A1(A2A2A2…A2…); |
||||||||||
2=p1 |
p2 |
|
|
|
|
U 2= U 1; |
||||||||
p3 |
||||||||||||||
3=p1 |
|
|
|
|
|
|
p3 |
U 3=A0(A1A1A1…A1…); |
||||||
p2 |
||||||||||||||
4= p1 |
|
|
|
|
|
p3 |
U 4= U 3; |
|||||||
p2 |
||||||||||||||
5= |
|
|
|
|
p2 p3 |
U 5= A0(A1A2A1A2…A1A2…); |
||||||||
p1 |
||||||||||||||
6= |
|
|
|
p2 |
|
|
U 6= U 5; |
|||||||
p1 |
p3 |
|||||||||||||
7= |
|
|
|
|
p3 |
U 7= U 3; |
||||||||
p1 |
p2 |
|
|
|
|
|
|
|
8 |
8= |
|
|
|
|
|
|
U 8=A0A1A3AK. |
p1 |
p2 |
p3 |
|||||
Пример 1.2 |
|
Дана ЛСА U =A0p2 1p3 2 ¯ 1A2A3 ¯ 2A4A5AK
Повторим процесс реализации ЛСА при всевозможных наборах ЛУ.
1= p2 |
|
|
p3 |
U 1= A0A2A3A4A5AK; |
|||||
2= p2 |
|
|
|
|
|
U 2= A0A4A5AK; |
|||
|
p3 |
||||||||
3= |
|
|
|
|
p3 |
U 3= A0A2A3A4A5AK= U ’; |
|||
p2 |
|||||||||
8= |
|
|
|
|
U 4= A0A2A3A4A5AK= U ’. |
||||
p2 |
p3 |
Анализ примеров 1.1 и 1.2 показывает, что при некоторых наборах ЛУ реализации ЛСА могут совпадать, а некоторые наборы ЛУ приводят к бесконечному повторению фрагментов ЛСА, что означает отсутствие реализации алгоритма при таких значениях логических переменных.
9
2. Матричные схемы алгоритмов
Ещё одним формальным языком для описания алгоритмов является система, представленная на языке матрицы, в которой элементы есть логические функции, связывающие операторы между собой [2]. При этом запись зависимости порядка выполнения операторов оказывается более простой и наглядной.
|
A1 |
|
A2 |
... |
Aj |
... |
An |
Aк |
|
|
|
||
A |
éa |
a |
|
... |
a |
0 j |
... |
a |
0n |
a |
0к |
ù |
|
0 |
ê 01 |
|
02 |
|
|
|
|
|
ú |
|
|||
A1 |
êa11 |
a12 |
... |
a1 j |
... |
a1n |
a1к ú |
(2.1) |
|||||
U = M |
ê ... ... ... ... |
... ... |
... ú |
||||||||||
A |
êai1 |
ai 2 |
... |
aij |
... |
ain |
aiк |
ú |
|
||||
i |
ê |
|
|
|
|
|
|
|
|
|
|
ú |
|
M |
ê ... ... ... ... |
... ... |
... |
ú |
|
||||||||
An |
ê |
an2 |
|
anj |
|
ann |
anк |
ú |
|
||||
êan1 |
... |
... |
ú |
|
|||||||||
|
ë |
|
|
|
|
|
|
|
|
|
|
û |
|
где |
A0 , Ak – операторы начальной и конечной установки алгоритма, |
|||||||
|
Ai |
(i = |
|
|
) – операторы реализации алгоритма, |
|||
|
1, n |
|||||||
|
aij |
(i = |
|
; j = |
|
) – логические функции связи между операторами, каждая |
||
|
0, n |
1, к |
из которых может принимать три значения:
1)aij = 0 , что означает отсутствие связи между операторами Ai и Aj ;
2)aij =1, что означает непосредственное следование оператора Aj за оператором Ai ;
3)aij при некоторых наборах ЛУ равна 0, а при других – 1.
Будем говорить, что множество логических функций каждой строки является «нормальным», если отвечает требованиям:
1) |
ортогональности: aij ×ais º 0 ( j ¹ s) , |
2) |
j =к |
полноты: Ú aij º1 . |
|
|
j =1 |
Символ i означает номер строки, а символы j, s – номера столбцов.В дальнейшем будем рассматривать матрицы только с нормальными строками.
Определение
Матричной схемой алгоритма (МСА) будем называть квадратную матрицу, в которой строки соответствуют операторам A0 , A1,..., An , столбцы – операторам
A1 , A2 ,..., Aк , а элементы – логические функции связи между операторами алгоритма.
Процесс выполнения МСА U может быть описан следующим образом. Дана допустимая последовательность ЛУ D1, D2 ,..., Dm , Dm+1,... На первом шаге анализируются элементы a0 j ( j = 1, к) , соответствующие строке оператора A0 . Вследствие
10
нормальности строки в ней найдётся одна и только одна логическая функция
a0 j = 1, например a0s . Поэтому после оператора A0 нужно выписать оператор As и т.д. Предположим, реализовано m шагов и последним был выписан оператор
Ai |
. Затем на (m+1)-м шаге требуется проанализировать элемент im -ой строки |
|
m |
при наборе ЛУ Dm+1 , выписать оператор Am+1 . Процесс заканчивается после выписывания оператора Aк . Таким образом, получено значение МСА в виде строчки операторов A0 A1...Am Am+1...Aк .
Определение
Последовательность наборов логических переменных D1, D2 ,..., Dm , Dm+1,... назовём допустимой для МСА U при распределении сдвигов Ai - Fi , если для этой последовательности найдётся такое значение МСА A0 A1...Am Am+1...Ak , что набор
Dm+1 отличается от набора Dm лишь значением логических переменных из подмножества Fm Í F .
Будем называть МСА U 1 и ЛСА U 2 равносильными при данном распределении сдвигов, если для любой допустимой последовательности ЛУ их значения совпадают.
Нетрудно показать, что если задана ЛСА U 2, то построить равносильную ей МСА U 1 можно следующим образом. В матрице каждая строка есть множество переходов от оператора Ai к Aj , где i,j – номера строк и столбцов. Каждый переход характеризуется последовательностью проверяемых ЛУ, представленных в виде конъюнкции логических функций aij1aij2 ...aijs , при этом некоторые функции могут быть просто логическими переменными. Переходов от Ai к Aj может оказаться несколько, тогда элемент матрицы aij строится в виде дизъюнкции конъюнкций для каждого перехода. В случае, когда справа от Ai стоит Aj , то aij = 1, а aij = 0 означает невозможность перехода от Ai к Aj .
11
Пример 2.1
Дана ЛСА U 2 = A0 A1 p1 1 p2 2 p3 3 A2 A3 ¯3 A4 A5 ¯1 A6 ¯2 Aк .
С учётом вышесказанного построим равносильную ей МСА:
A0 |
|
A1 |
A2 |
|
|
A3 |
|
A4 |
|
|
A5 |
A6 |
Aк |
|
|||||
é |
1 |
0 |
|
|
0 |
0 |
|
|
0 |
0 |
0 |
|
ù |
||||||
A |
ê |
0 |
p |
|
|
p |
|
0 |
p |
|
|
|
|
0 |
|
|
p p |
|
ú |
p |
2 |
3 |
p |
2 |
p |
3 |
p |
2 |
|||||||||||
1 |
ê |
|
1 |
|
|
|
1 |
|
|
|
1 |
1 |
ú |
||||||
A2 |
ê |
0 |
0 |
|
|
1 |
0 |
|
|
0 |
0 |
0 |
|
ú |
|||||
U 1 = A |
ê |
0 |
0 |
|
|
0 |
1 |
|
|
0 |
0 |
0 |
|
ú |
|||||
3 |
ê |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ú |
A4 |
ê |
0 |
0 |
|
|
0 |
0 |
|
|
1 |
0 |
0 |
|
ú |
|||||
ê |
|
|
|
|
|
ú |
|||||||||||||
A5 |
ê |
0 |
0 |
|
|
0 |
0 |
|
|
0 |
1 |
0 |
|
ú |
|||||
A6 |
ê |
0 |
0 |
|
|
0 |
0 |
|
|
0 |
0 |
1 |
|
ú |
|||||
ë |
|
|
|
|
|
û |
В работе [2] приводится алгоритм перехода от МСА U 1 к равносильной ЛСА U 2. Для заданной в общем виде МСА (2.1) равносильная ЛСА будет выглядеть следующим образом:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A a |
01 |
01 a |
02 |
|
02 ...a |
0n |
0n a |
0к |
0к ¯01 |
¯11 ... ¯n1 A |
||||||||||||
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
||||
U = |
|
11 |
|
|
12 |
... |
|
|
1к ¯02 ¯12 ... ¯n 2 A2 ... |
|||||||||||||||
a11 |
a12 |
a1к |
||||||||||||||||||||||
|
|
|
n1 |
|
|
n |
2 ... |
|
|
|
|
nк ¯0k ¯1к ... ¯nк |
A |
|||||||||||
|
a |
n1 |
a |
n2 |
a |
nк |
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
к |
Приведённый алгоритм перехода от МСА к ЛСА тривиален, однако его основной недостаток в том, что он даёт избыточную ЛСА по числу ЛУ. Далее будет предложен другой алгоритм, который приводит к получению близкой к оптимальной ЛСА.