Смекни!
smekni.com

ПТЦА - Прикладная теория цифровых автоматов (стр. 14 из 20)

Но тогда функция

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

Из выражения для w следует, что переход из аi в аi, для которого d(i,i)=0, не влияет на w (что вполне очевидно, если учесть, что на этом переходе ни один триггер не переключается).

Рассмотрим применение эвристического алгоритма на конкретном примере автомата, заданного таблицами переходов и выходов (рис.41. ). Для данного автомата можно построить ориентированный граф (без учета петель), представленный на рис.42. На каждом ребре указан его вес.

Эвристический алгоритм состоит из следующих шагов.

1. Строим матрицу

, состоящую из всех пар номеров (i, j), для которых р(i, j) ¹ 0 (т.е. в автомате есть переход из аi в аj или наоборот) и i<j. Для каждой пары в матрице
указываем ее вес р(i, j), совпадающий с весом ребра соединяющего аi и аj.

i

j

p(i,j)

1

2

2

1

3

1

T

=

1

5

1

2

3

3

2

4

1

2

5

1

3

4

2

3

5

2

2. Упорядочим строки матрицы

, для чего построим матрицу
следующим образом. В первую строку матрицы
поместим пару (a,b) с наибольшим весом р(a,b). В нашем случае (a,b) = (2,3), р(2,3) = 3. Из всех пар, имеющих общий компонент с парой (a,b) выбирается пара (g,d) с наибольшим весом и заносится во вторую строку матрицы
. Ясно, что {a,b}×{g,d}¹0. Затем из всех пар, имеющих общий компонент хотя бы с одной из внесенных уже в матрицу
пар выбирается пара с наибольшим весом и заносится в матрицу
и т.д.. В случае равенства весов пар вычисляются суммы весов компонентов пар (весом р(a) компонента a называется число появлений a в матрице
) и в матрицу
заносится пара с наибольшей суммой весов. В рассматриваемом автомате на второе место вслед за парой (2,3) претендуют пары: (1,2) с р(1,2) = 2; (3,4) с р(3,4) = 2, (3,5) с р(3,5) = 2.

Для определения того, какая пара займет второе место в матрице

находим веса компонентов пар:

р(1) = 3 р(2) = 3 р(1) + р(2) = 6

р(3) = 4 р(4) = 2 р(3) + р(4) = 6

р(3) = 4 р(5) = 2 р(3) + р(5) = 6

В данном случае для всех пар совпадают и их веса и веса их компонентов. Поэтому на второе место матрицы

может быть поставлена любая из пар (1,2), (3,4), (3,5). Но тогда на 3-м и 4-м будут остальные две. Выполнив упорядочивание всех пар, получим матрицу
в виде:

i

j

p(i,j)

2

3

3

1

2

2

M

=

3

4

2

3

5

2

1

3

1

1

5

1

2

4

1

2

5

1

3. Определяем разрядность кода для кодирования состояний автомата (количество элементов памяти – триггеров). Всего состояний M=5. Тогда

R = ]log2M[ = ]log25[ =3.

Закодируем состояния из первой строки матрицы следующим образом: K2 = K(а2) = 000; K3 = K(а3) = 001.

Для удобства кодирования будем иллюстрировать этот процесс картой Карно:

4. Вычеркнем из матрицы

первую строку, соответствующую закодированным состояниям а2 и а3. Получим матрицу
.

i

j

p(i,j)

1

2

2

3

4

2

M’

=

3

5

2

1

3

1

1

5

1

2

4

1

2

5

1

5. В силу упорядочивания п.2 в первой строке закодирован ровно один элемент. Выберем из первой строки незакодированный элемент и обозначим его g. (В нашем случае g = 1).

6. Строим матрицу

, выбрав из
строчки, содержащие g.

i

j

p(i,j)

1

2

2

Mg

=

M’

=

1

3

1

1

5

1

Пусть Bg = {g1,...,gF} – множество элементов из матрицы

, которые уже закодированы. Их коды Кg1,..., KgF соответственно. В нашем случае:

Bg = B3 = {2,3} K2 = 000 K3 = 001.

7. Для каждого Kgf (f=1, ..., F) найдем

– множество кодов, соседних с
и еще не занятых для кодирования состояний автомата. (Для соседних кодов кодовое расстояние d=1).

K2 = 000

= {100, 010}

K3 = 001

= {011, 101}.

Построим множество

Если оказывается, что

, то строим новое множество
, где
– множество кодов, у которых кодовое расстояние до кода
равно 2 и т.д..