Московский государственный университет путей сообщения
Опубликован: 06.09.2012 | Доступ: свободный | Студентов: 1232 / 168 | Оценка: 5.00 / 5.00 | Длительность: 35:22:00
Специальности: Разработчик аппаратуры
Лекция 32:

Жадный алгоритм поиска индивидуальных масок

< Лекция 31 || Лекция 32: 123 || Лекция 33 >

Рассмотрим работу алгоритма на примере схемы C17 и ДИ, заданной для этой схемы в виде СПР из табл. 27.5.

В табл. 32.1 - табл. 32.10, представленных ниже, иллюстрируется выбор точек проверки на шаге 2 в процедуре MaskSet при сокращении ДИ для схемы С17.

На первом шаге алгоритма создается множество пустых масок

Н= \{h_i=\varnothing | 0\le i\le 8\}.

На следующем шаге происходит вызов процедуры MaskSet:


MaskSet(\{s_0, s_1, , s_2, s_3, s_4, s_5, s_6, s_7, s_8 \},\varnothing,9)

производящая поиск точки проверки по значению величины J' из вариантов, перечиcленных в табл. 32.1. Первому максимальному значению J'=7 соответствует точка проверки 2:2 и значение b=1. Выбираем эту точку проверки. Для нее вычисляем S'_1=\{s_8\} и S'_2=\varnothing. Добавляем точку проверки 2:2 в маску h_8, после чего производятся рекурсивные вызовы.

MaskSet(\{s_8\},\varnothing,1) - вызов завершается без внесения изменений в маски.


MaskSet(\{s_0, s_1, , s_2, s_3, s_4, s_5, s_6, s_7\},\{ s_8 \},7)

из той же табл. 32.1 выбираем следующее максимальное значение J'=7, соответствующее точке проверки 4:1 и значению b=0 (значение J'=7, соответствующее точке проверки 2:2 и значению b=1 не выбирается, так как amt(\{ s_0, s_1, , s_2, s_3, s_4, s_5, s_6, s_7 \},2:2,1)=0). Вычисляем S'_1=\{s_6\}, S'_2=\varnothing. Добавляем 4:1 в маску h_6.

MaskSet(\{s_6\},\varnothing,1) - вызов завершается без внесения изменений в маски.


MaskSet(\{s_0, s_1, , s_2, s_3, s_4, s_5, s_7\},\{ s_6,s_8 \},7)

- следующее максимальное значение J' (не превышающее 7) в табл. 32.1 равно 5 и соответствует точке проверки 2:1 и значению b=1. S'_1=\{s_1\}, S'_2=\{s_8\}. Добавляем 2:1 в маску h_1.

MaskSet(\{s_0\},\{s_8\},2)

- значения J' для данного вызова приведены в табл. 32.2. Первое максимальное значение J' равно 0 для точки проверки 1:2 и значения b=0. S'_1=\{s_1\}, S'_2=\varnothing. Точка проверки 1:2 добавляется в h_1.

MaskSet(\{s_1\},\varnothing,1) - вызов завершается без внесения изменений в маски.

MaskSet(\varnothing,\{s_1,s_8\},1)- вызов завершается без внесения изменений в маски.


MaskSet(\{s_0,s_2,s_3,s_4,s_5,s_7\},\{s_1,s_6,s_8\},5)

- следующее максимальное значение J' (не превышающее 5) в табл. 32.1 равно 3 и соответствует точке проверки 3:2 и значению b=0. S'_1=\{s_3,s_4,s_7\}, S'_2=\varnothing. Добавляем 3:2 в маски h_3, h_4 и h_7.

MaskSet(\{s_3,s_4,s_7\},\varnothing,3)

- значения J' для этого вызова приведены в табл. 32.3. Первое максимальное значение J' равно 1 и соответствует точке проверки 1:1 и значению b=1. S'_1=\{s_7\}, S'_2=\varnothing. Вносим 1:1 в h_7.

MaskSet(\{s_7\},\varnothing,1) - вызов завершается без внесения изменений в маски.

 MaskSet(\{s_3,s_4\},\{s_7\},1)

- из табл. 32.3 выбираем следующее значение J'=1 для 1:2 и значения b=1. S'_1=\{s_4\}, S'_2=\varnothing. Вносим 1:2 в h_4.

MaskSet(\{s_4\},\varnothing,1) - вызов завершается без внесения изменений в маски.

 MaskSet(\{s_3\},\{s_4, s_7\},1)

- из табл. 32.3 следующее значение J', не превышающее 1 и для которого amt(\{s_3\},i:j,b)\ne0, равно -1 и соответствует точке проверки 1:1 и значению b=0. S'_1=\{s_3\} , S'_2=\{s_4\}. Вносим 1:1 в h_3.

MaskSet(\{s_3\},\{s_4\},\varnothing,2)

- из табл. 7.4 выбираем J'=0 для точки проверки 1:2 и значения b=0. S'_1=\{s_3\}, S'_2=\varnothing. Вносим 1:2 в h_3.

MaskSet(\{s_3\},\varnothing,1) - вызов завершается без внесения изменений в маски.

MaskSet(\varnothing, \{s_3,s_4\},1) - вызов завершается без внесения изменений в маски.

MaskSet(\varnothing, \{s_3,s_4,s_7\},1) - вызов завершается без внесения изменений в маски.


MaskSet(\{s_0,s_2,s_5\},\{s_1,s_3,s_4,s_6,s_7,s_8\},3)

- максимальное значение J' не превышающее 3 в табл. 32.1 равно 1 и соответствует точке проверки 1:1 и значению b=1. S'_1=\{s_0\}, S'_2=\{s_1,s_7,s_8\}. Точка проверки 1:1 помещается в маску h_0.

MaskSet(\{s_0\},\{s_1,s_7,s_8\},4)

- значения J' для данного вызова приведены в табл. 32.5. Первое максимальное значение J' равно 0 для точки проверки 1:2 и значения b=1. S'_1=\{s_0\}, S'_2=\{s_8\}. Точка проверки 1:2 добавляется в h_0.

MaskSet(\{s_0\},\{s_8\},2)

- значения J' для данного вызова приведены в табл. 32.6. Первое максимальное значение J' равно 0 для точки проверки 2:1 и значения b=0. S'_1=\{s_0\}, S'_2=\varnithing. Точка проверки 2:1 добавляется в h_0.

MaskSet(\{s_0\},\varnothing,2) - вызов завершается без внесения изменений в маски.

MaskSet(\varnothing,\{s_0,s_8\},1) - вызов завершается без внесения изменений в маски.

MaskSet(\varnothing,\{s_0,s_1,s_7,s_8\},1) - вызов завершается без внесения изменений в маски.

MaskSet(\{s_2,s_5\},\{s_0,s_1,s_3,s_4,s_6,s_7,s_8\},1)

- максимальное значение J' не превышающее 1 в табл. 32.1 равно 1 и соответствует точке проверки 1:2 и значению b=0. S'_1=\{s_2\}, S'_2=\{s_1,s_3,s_7\}. Точка проверки 1:2 помещается в маску h_2.

MaskSet(\{s_2\},\{s_1,s_3,s_7\},1)

-значения J' для данного вызова приведены в табл. 32.7. Первое максимальное значение J' равно 0 для точки проверки 1:1 и значения b=0. S'_1=\{s_2\}, S'_2=\{ s_3\}. Точка проверки 1:1 добавляется в h_2.

MaskSet(\{s_2\},\{s_3\},2)

- значения J' для данного вызова приведены в табл. 32.8 . Первое максимальное значение J' равно 0 для точки проверки 3:1 и значения b=1. S'_1=\{s_2\}, S'_2=\varnothing. Точка проверки 3:1 добавляется в h_2.

MaskSet(\{s_2\},\varnothing,1)

- вызов завершается без внесения изменений в маски.

MaskSet(\varnothing,\{s_2,s_3\},0)

- вызов завершается без внесения изменений в маски.

MaskSet(\varnothing,\{s_1,s_2,s_3,s_7\},0)

- вызов завершается без внесения изменений в маски.

MaskSet(\{s_5\},\{s_0,s_1,s_2,s_3,s_4,s_6,s_7,s_8\},1)

- следующее максимальное значение J' не превышающее 1 в табл. 32.1 равно 1 и соответствует точке проверки 3:1 и значению b=0. S'_1=\{s_5\}, S'_2=\{s_3,s_4,s_6\}. Точка проверки 3:1 помещается в маску h_5.

MaskSet(\{s_5\},\{s_3,s_4,s_6 \},4)

- значения J' для данного вызова приведены в табл. 32.9. Первое максимальное значение J' равно 0 для точки проверки 3:2 и значения b=0. S'_1=\{s_5\}, S'_2=\{s_6\}. Точка проверки 1:1 добавляется в h_5.

MaskSet(\{s_5\},\{s_6\},2)

- значения J' для данного вызова приведены в табл. 32.10. Первое максимальное значение J' равно 0 для точки проверки 4:1 и значения b=1. S'_1=\{s_5\}, S'_2=\varnothing. Точка проверки 4:1 добавляется в h_5.

MaskSet(\{s_5\},\varnothing,1)

- вызов завершается без внесения изменений в маски.

MaskSet(\varnothing,\{s_5,s_6\},0)

- вызов завершается без внесения изменений в маски.

MaskSet(\varnothing,\{s_3,s_4,s_5,s_6\},0)

- вызов завершается без внесения изменений в маски.

MaskSet(\varnothing,\{s_0,s_1,s_2,s_3,s_4,s_5,s_6,s_7,s_8\},1)

- вызов завершается без внесения изменений в маски.

Таблица 32.1. Случай S_1\cup S_2 =\{ s_0,s_1,s_2,s_3,s_4,s_5,s_6,s_7,s_8\}
Точка проверки 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2
b 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
J' -1 1 1 -1 -5 5 -7 7 1 -1 3 -3 7 -7 -9 -
Таблица 32.2. Случай S_1\cup S_2 =\{s_1,s_8\}
Точка проверки 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2
b 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
J' - -2 0 - - -2 0 - - -2 - -2 - -2 -2 -
Таблица 32.3. Случай S_1\cup S_2 =\{ s_3,s_4, s_7 \}
Точка проверки 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2
b 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
J' -1 1 -1 1 -3 - -3 - -1 1 -3 - - -3 -3 -
Таблица 32.4. Случай S_1\cup S_2 =\{ s_3,s_4\}
Точка проверки 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2
b 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
J' -2 - 0 - -2 - -2 - -2 - -2 - - -2 -2 -
Таблица 32.5. Случай S_1\cup S_2 =\{ s_0,s_1,s_7,s_8\}
Точка проверки 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2
b 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
J' - -4 - 0 0 - -2 - - -4 - -2 - -4 -4 -
Таблица 32.6. Случай S_1\cup S_2 =\{ s_0, s_8\}
Точка проверки 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2
b 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
J' - -2 - -2 0 - 0 - - -2 - -2 - -2 -2 -
Таблица 32.7. Случай S_1\cup S_2 =\{ s_1,s_2,s_3,s_7\}
Точка проверки 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2
b 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
J' 0 - -4 - -2 - -4 - - -2 - 0 - -4 -4 -
Таблица 32.8. Случай S_1\cup S_2 =\{ s_2,s_3\}
Точка проверки 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2
b 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
J' -2 - -2 - -2 - -2 - - 0 - 0 - -2 -2 -
Таблица 32.9. Случай S_1\cup S_2 =\{ s_3,s_4,s_5,s_6\}
Точка проверки 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2
b 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
J' -4 - - -2 -4 - -4 - -4 - - 0 - -2 -4 -
Таблица 32.10. Случай S_1\cup S_2 =\{ s_5,s_6\}
Точка проверки 1:1 1:2 2:1 2:2 3:1 3:2 4:1 4:2
b 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
J' -2 - - -2 -2 - -2 - -2 - - -2 - 0 -2 -

Работа алгоритма закончена. В результате получены маски:


h_0=\{1:1,1:2,2:1\},\\
h_1=\{1:2,2:1\},\\
h_2=\{1:1,1:2,3:1\},\\
h_3=\{1:1,1:2,3:2\},\\
h_4=\{1:2,3:2\},\\
h_5=\{3:1,3:2,4:1\},\\
h_6=\{4:1\},\\
h_7=\{1:1,3:2\},\\
h_8=\{2:2\}.

Из приведенного примера ясно, что алгоритм не является точным, т. к. в маске h_2 точка проверки 1:2 является избыточной.

< Лекция 31 || Лекция 32: 123 || Лекция 33 >
Дмитрий Медведевских
Дмитрий Медведевских

Добрый день  можно поинтересоваться где брать литературу предложенную в курсе ?Большинство книг я не могу найти  в известных источниках