4. Dekompozycja liniowa

Dekompozycja liniowa polega na  łączeniu zmiennych w pary i wprowadzaniu ich za pośrednictwem bramek EXOR do głównego układu realizującego detekcję i klasyfikację (czyli indeksowanie) danych. Jest to istotne, gdyż prowadzi do dalszego redukowania liczby wejść w generatorach indeksu. I pewnie z tych powodów dekompozycja liniowa jest intensywnie wykorzystywana w syntezie funkcji generowania indeksów [3.20].

W dotychczasowych rozwiązaniach problem dekompozycji liniowej ogranicza się  do syntezy silnie nieokreślonych funkcji boolowskich,  o specyficznej własności: |Dn| = k. Ograniczenie tego problemu do funkcji, w których wszystkie wektory wyjściowe  są różne, jest niepotrzebne, gdyż problem ten można sprowadzić do ogólniejszego zadania syntezy systemów funkcji boolowskich o dowolnych wyjściach. Inaczej mówiąc lepiej przyjąć założenie, że liczność zbioru wektorów wyjściowych  Y funkcji F jest ≤ |Dn|.

Ogólnie rzecz biorąc problem można sprowadzić do wskazania warunków jakie muszą być spełnione, aby funkcja F posiadała dekompozycję z dwu-argumentowymi funkcjami G.

F = H(G1(X1), G2(X2),..., xn),

 

gdzie: X_1=\left\{x_{i_1},x_{i_2}\right\}, X_2=\left\{x_{i_3},x_{i_4}\right\},

 

Funkcję G nazywać można g-argumentem, stosownie do ogólnej teorii dekompozycji funkcji boolowskich.  Przyjmujemy również założenie, że w dekompozycji liniowej stosujemy funkcje o zredukowanej liczbie argumentów,  czyli tzw. minimalno-argumentowe reprezentacje funkcji F.

Przy tak postawionym zagadnieniu wygodne jest stosowanie uporządkowanego i zwartego sposobu reprezentowania funkcji, jakim jest rachunek podziałów.  Szczegóły dotyczące tego sposobu przedstawiana funkcji zostały już omówione w rozdz. 1.4  i nie będą tu dyskutowane. Niezbędne jest jednak krótkie przypomnienie, gdyż własności podziałów będą wykorzystywane do skonstruowania metody syntezy układów bramkowych, omawianej w dalszej części artykułu.

Rozpatrzmy funkcję logiczną zdefiniowaną w tab. 3.28, w której symbole T: 1,2,...,11 reprezentują wektory, x1,...,x5 reprezentują zmienne wejściowe, zaś y – zmienną wyjściową.

Tablica  3.28

T

x1

x2

x3

x4

x5

y

1

0

0

0

0

0

0

2

0

0

1

1

1

0

3

0

1

0

1

0

0

4

0

1

1

1

1

0

5

0

1

1

0

0

0

6

0

0

0

1

1

1

7

0

1

0

0

0

1

8

0

1

1

0

1

1

9

1

1

0

1

0

1

10

1

0

0

1

1

1

11

1

0

0

1

0

1

Dla tego przykładu, różne wartości, przyjmowane przez zmienną wejściową x4, wyznaczają podzbiory wektorów {1,5,7,8} i {2,3,4,6,9,10,11}. Dla wektorów 1,5,7 i 8, x4 = 0, dla 2,3,4,6,9,10,11,  x4 = 1.  Zatem wiedząc, że x4 = 0, wiemy, że wybrany został wektor 1,5,7 lub 8, nie wiemy jednak który z nich. Analogicznie wiedząc, że x3 = 1 wiemy, że wybrano symbol  2,4,5 lub 8, nie jesteśmy jednak wstanie wskazać, który z nich konkretnie. W ten sposób informacja modelowana jest przez podziały, pokrycia i systemy zbiorów.

Dla funkcji z tab, 3.29 podziały wejściowe i wyjściowy są następujące
P\left(x_1\right)=\left\{\overline{1,2,3,4,5,6,7,8};\overline{9,10,11}\right\},
P\left(x_2\right)=\left\{\overline{1,2,6,10,11};\overline{3,4,5,7,8,9}\right\},
P\left(x_3\right)=\left\{\overline{1,3,6,7,9,10,11};\overline{2,4,5,8}\right\}
,
P\left(x_4\right)=\left\{\overline{1,5,7,8};\overline{2,3,4,6,9,10,11}\right\},
P\left(x_5\right)=\left\{\overline{1,3,5,7,9,11};\overline{2,4,6,8,10}\right\},
P_F=\left\{\overline{1,\ldots,5};\overline{6,\ldots,11}\right\},

W celu uproszczenia zapisów wektory a,b Î{0,1}n : F(a) ≠ F(b), będą reprezentowane liczbami p,Π= {1,..., | <i>D<sup>n</sup> </i>|}.

 

Niech F będzie wielowyjściową funkcją boolowską, gdzie zbiór zmiennych X = (x1,…, xn),  zbiór wektorów (mintermów) M = (m1,…, mt)Przez Cpq, gdzie p, q są wektorami z M, dla których F(p) ¹ F(q) oznaczamy zbiór niezgodności, definiowany  jak następuje:

Cpq  = {<i>x </i></span></span></span><span lang="EN-US" style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:Symbol">Î</span></span></span><i><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif"> X </span></span></span></i><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif">: <i>x</i>(<i>p</i>) </span></span></span><span lang="EN-US" style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:Symbol">¹</span></span></span> <i><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif">x</span></span></span></i></strong><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif"><strong>(<i>q</i>)} dla p,q = 1,…,t and p < q}.                                                                            (3-3)

Rodzinę zbiorów C = (C1,…, Cn),  dla wszystkich Cpq oznaczać będziemy RCpq. W obliczeniach par zmiennych tworzących dekompozycję liniową posługiwać się będziemy rodziną zbiorów Cpq.

Problem wyznaczenia odpowiednich warunków, oparty jest na pojęciu funkcji rozdzielającej. O funkcji g będziemy mówić, że jest funkcją rozdzielająca (dystrybucją) pary wektorów p,q wtedy i tylko wtedy, gdy p i q należą do różnych bloków podziału P(g). W uproszczeniu można powiedzieć, że w takim przypadku funkcja g umożliwia rozdzielenie wektorów p i q.

Z przyjętej definicji wynika, że każda jednoargumentowa funkcja  g(xj) = xj, gdzie  xj Î Cpq jest dystrybucją p, q.  Ponadto jeśli g rozdziela parę p, q, to również parę tę rozdziela funkcja g .

Wykorzystując powyższe ustalenia można teraz warunkowi dekompozycji nadać  wygodniejszą postać: F = H(g1g2,..., gt) wtedy i tylko wtedy, gdy dla każdej pary p, q: takiej, że (p,q) nie jest zawarta w jednym bloku podziału charakterystycznego PF istnieje gj rozdzielająca parę p, q. Zalety tego warunku zostaną obecnie wykorzystane do sformułowania metodyki syntezy układów w których argumenty  z X = (x1,…, xn) łączone będą w pary i wprowadzane do układu H za pośrednictwem funktorów  g(xi, xj) tzn. F = H(g1, g2,…, gt, xa, xb…).  

Wykorzystując powyższe ustalenia można zaproponować sposób prowadzenia syntezy logicznej jako dekompozycję bezpośrednio na bramki, w odróżnieniu od dekompozycji funkcjonalnej, w której składowe są funkcjami opisanymi tablicami prawdy. Możliwe jest obliczenie podziału P(g) dla dowolnej funkcji o skończonej liczbie zmiennych wejściowych i w następnym kroku usunięcie wszystkich zbiorów Cpq, dla których g nie jest dystrybucją. Obliczamy w ten sposób dekompozycję funkcji F i zapisujemy ją w postaci:

F=H\left(G\left(x_{i_1},\ldots,x_{i_t}\right),\ldots,x_{i_n}\right)

Liczba argumentów funkcji H wynosi w tym przypadku co najwyżej n – 1, w związku z czym proces prowadzi do zmniejszenia złożoności funkcji.

Funkcja g\ =x_{i} \ \oplus \ x_{j} jest funkcją rozdzielającą (dystrybucją) parę (pq) wtedy i tylko wtedy gdy {<i>x<sub>i</sub></i>, <i>x<sub>j</sub></i>} Ï Cpq
\left|\left\{x_i,x_j\right\}\right|\cap\ C_{pq}=1

Powyższe twierdzenie prowadzi do prostej metody dekomponowania funkcji i wyznaczania g(xixj) bezpośrednio ze zbiorów Cpq i podziałów P(xi), np. podziałów generowanych przez funkcję jednoargumentową g(xi) = xi.

 

G=x_{i} \ \oplus \ x_{j}  jest dekompozycją funkcji F, wtedy i tylko wtedy, gdy {<i>x<sub>i</sub></i>, <i>x<sub>j</sub></i>} Ï RCpq, gdzie RCpq jest rodziną zbiorów Cpq, dla których  p oraz q należą do różnych bloków podziału wyjściowego PF.
 Dla funkcji F z tabeli 3.28 rodzinę RCpq ograniczoną do zbiorów dwuelementowych zapisano w  tabeli 3.29. Łatwo zauważyć, że RCpq nie zawiera 3 następujących par: x1, x5; x3, x4; x3, x5
Łatwo zauważyć, że RCpq nie zawiera 3 następujących par: x1, x5; x3, x4; x3, x5
Tablica  3.29

p,q

Cpq

1,6

x4,x5

1,11

x1,x4

2,8

x2,x4

2,10

x1,x3

3,6

x2,x5

3,11

x1,x2

4,6

x2,x3

 

Stąd wniosek, że możliwe są g-argumenty reprezentowane przez dekompozycje funkcji F:

FH(x1 Å x5, x2, x3, x4); F H(x3 Å x4, x1, x2, x5);  F H(x3 Å x5, x1, x2, x4).

 Proces obliczania dekompozycji liniowej może być wykonywany iteracyjnie, aż do uzyskania dekompozycji F = H(g1, g2,…, X)  z maksymalną liczbą funkcji  G, co zapewnia minimalna liczbę argumentów dla funkcji H, oczywiście łącznie z g-argumentami typu EXOR.

Twierdzenie 3.7 i test 3.1 można uogólnić na przypadek tzw. dekompozycji wielokrotnej. Wtedy dodatkowym warunkiem na istnienie dekompozycji z parą funkcji {<i>x<sub>i</sub></i> </span><span style="line-height:150%"><span style="font-family:Symbol">Å</span></span><span style="line-height:150%"> <i>x<sub>j</sub> </i>, <i>x<sub>k</sub></i> </span><span style="line-height:150%"><span style="font-family:Symbol">Å</span></span><span style="line-height:150%"> <i>x<sub>l</sub></i>}, jest sprawdzenie czy zbiór zmiennych {<i>x<sub>i</sub></i>, <i>x<sub>j</sub></i>, <i>x<sub>k</sub></i>, <i>x<sub>l</sub></i>} jest zawarty w rodzinie  RCpq.

Dla uproszczenia zapisów  uzupełnienie RCpq  względem  rodziny wszystkich podzbiorów  o liczności równej liczności  analizowanych Cpq oznaczać będziemy  COM(RCpq).

Dla funkcji z przykładu 3.12 w celu sprawdzenia, które  g-argumenty mogą tworzyć dekompozycję wielokrotną (w tym przypadku podwójną),  należy obliczyć czteroelementowe zbiory RCpq. W wyniku uzyskujemy, że wszystkie cztero-elementowe zbiory RCpq  są:  {<i>x</i><sub>2</sub> <i>x</i><sub>3</sub> <i>x</i><sub>4</sub> <i>x</i><sub>5</sub>}, {<i>x</i><sub>1</sub> <i>x</i><sub>2</sub> <i>x</i><sub>3</sub> <i>x</i><sub>5</sub>}, {<i>x</i><sub>1</sub> <i>x</i><sub>2</sub> <i>x</i><sub>3</sub> <i>x</i><sub>4}. Zatem uzupełnienie COM(RCpq) zawiera dwa zbiory {{<i>x</i><sub>1</sub> <i>x</i><sub>2</sub> <i>x</i><sub>4</sub> <i>x</i><sub>5</sub>}, {<sub> </sub><i>x</i><sub>1</sub> <i>x</i><sub>3</sub> <i>x</i><sub>4</sub> <i>x</i><sub>5</sub>}}  i jeden z nich reprezentuje zmienne g-argumentów x1 Å x5, xÅ x4. Na tej podstawie stwierdzamy, że funkcja z przykładu 3.12 ma dekompozycję: F = H(x1 Å x5, x3 Å x4, x2).

Inne uogólnienie Twierdzenia 3.7 dotyczy dekompozycji nierozłącznej. W tym przypadku dodatkowy warunek na istnienie dekompozycji z parą funkcji {<i>x<sub>i</sub></i> </span></span></span><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:Symbol">Å</span></span></span><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif"> <i>x<sub>j</sub> </i>, <i>x<sub>j</sub></i> </span></span></span><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:Symbol">Å</span></span></span><span style="font-size:12.0pt"><span style="line-height:150%"><span style="font-family:"Calibri",sans-serif"> <i>x<sub>k</sub></i>} polega na sprawdzeniu, czy zbiór zmiennych {<i>x<sub>i</sub></i>, <i>x<sub>j</sub></i>, <i>x<sub>k</sub></i>} jest zawarty w rodzinie  RCpq.

Omówioną metodykę obliczania dekompozycji liniowej skonfrontujemy teraz z algorytmem zaproponowanym w [3.20]. Obliczenia przeprowadzimy dla funkcji reprezentującej koder 1 z 10 – tab. 3.30.

Tablica  3.30

 

x1

x2

x3

x4

x5

x6

x7

x8

x9

x10

y1

y2

y3

y4

y5

y6

1

1

0

0

0

0

0

0

0

0

0

1

0

0

0

0

0

2

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

3

0

0

1

0

0

0

0

0

0

0

0

1

1

0

0

0

4

0

0

0

1

0

0

0

0

0

0

0

0

0

1

1

0

5

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

1

6

0

0

0

0

0

1

0

0

0

0

1

0

0

0

0

1

7

0

0

0

0

0

0

1

0

0

0

0

1

0

0

0

0

8

0

0

0

0

0

0

0

1

0

0

0

0

0

1

0

0

9

0

0

0

0

0

0

0

0

1

0

0

0

1

0

0

0

10

0

0

0

0

0

0

0

0

0

1

0

0

0

0

1

0

 

Dla funkcji tej w [3.20] obliczono dekompozycję liniową z 6 g-argumentami, które w tab. 3.30 oznaczono y1,…, y6:

 

F = H(x1 Åx6, x3 Åx7, x3 Åx9, x4Åx8, x4 Åx10, x5Åx6)

 

Obliczenia wykonano za pomocą heurystycznego algorytmu s-min. Ponieważ w uzyskanym rozwiązaniu nie ma zmiennej x2, wygodnie będzie wprowadzić nowe oznaczenia zmiennych, zgodnie z tabelą 3.31.

Tablica  3.31

x1

x3

x4

x5

x6

x7

x8

x9

x10

a1

a2

a3

a4

a5

a6

a7

a8

a9

 

Przy tych oznaczeniach uzyskuje się nowa  tablicę kodera podaną w tabeli 3.32, jak też nowe wyrażenie na uzyskaną w [3.20] dekompozycję

F = H(a1 Åa5, a2 Åa6, a2 Åa8, a3Åa7, a3 Åa9, a4Åa5)

Tablica  3.32

 

a1

a2

a3

a4

a5

a6

a7

a8

a9

1

1

0

0

0

0

0

0

0

0

2

0

0

0

0

0

0

0

0

0

3

0

1

0

0

0

0

0

0

0

4

0

0

1

0

0

0

0

0

0

5

0

0

0

1

0

0

0

0

0

6

0

0

0

0

1

0

0

0

0

7

0

0

0

0

0

1

0

0

0

8

0

0

0

0

0

0

1

0

0

9

0

0

0

0

0

0

0

1

0

10

0

0

0

0

0

0

0

0

1

 

Dla uproszczonego wg tabeli 3.32 kodera 1 z 10 obliczamy rodzinę RCpq, a następnie COM(RCpq). W wyniku uzyskujemy: uzupełnienie rodziny RCpq ma pusty zbiór par, ale zawiera wszystkie możliwe (84) podzbiory trój-elementowe zbioru {<i>a</i><sub>1</sub>, <i>a</i><sub>2</sub>, <i>a</i><sub>3,</sub> <i>a</i><sub>4</sub>,<sub> </sub><i>a</i><sub>5</sub>, <i>a</i><sub>6</sub>, <i>a</i><sub>7</sub>, <i>a</i><sub>8</sub>, <i>a</i><sub>9</sub>}. Stąd wniosek, że dla kodera 1 z 10 istnieje dekompozycja nierozłączna wielokrotna reprezentowana trójelementowymi podzbiorami zbioru {<i>a</i><sub>1</sub>, <i>a</i><sub>2</sub>, <i>a</i><sub>3,</sub> <i>a</i><sub>4</sub>,<sub> </sub><i>a</i><sub>5</sub>, <i>a</i><sub>6</sub>, <i>a</i><sub>7</sub>, <i>a</i><sub>8</sub>, <i>a</i><sub>9</sub>}, czyli

F = H(aiÅaj, ajÅak, al Åam, am Åan, ap Åaq, aq Åar)                                                      (3-4)

Tym samym potwierdza to istnienie dekompozycji:

F = H(a1 Åa5, a2 Åa6, a2 Åa8, a3Åa7, a3 Åa9, a4Åa5)

uzyskanej w [3.20], przy czym należy podkreślić, że dekompozycja taka istnieje dla wszystkich możliwych trójek:

ai aj ak,

al am an,

ap aq ar

Zatem przy zastosowaniu metody z [3.20] znalezienie jakiegokolwiek rozwiązania nie było trudne.

Wykazana własność dekompozycji (wg (3-4)) pozwala zapisać dekompozycję kodera 1 z 10 w naturalnym porządku zmiennych

F = H(a1 Å a2, a2 Å a3, a4 Å a5, a5 Å a6,  a7 Å a8, a8 Å a9) = H(b1, b2, b3, b4, b5, b6),                       (3-5)

któremu odpowiada tablica indeksów przedstawiona w tabeli 3.33. 

Tablica  3.33

b1

b2

b3

b4

b5

b6

f

1

0

0

0

0

0

1

0

0

0

0

0

0

2

1

1

0

0

0

0

3

0

1

0

0

0

0

4

0

0

1

0

0

0

5

0

0

1

1

0

0

6

0

0

0

1

0

0

7

0

0

0

0

1

0

8

0

0

0

0

1

1

9

0

0

0

0

0

1

10

 

W rozwiązaniu tym indeksy są reprezentowane wektorami 6-bitowymi b1 b2 b3 b4 b5 b6.  

Można przypuszczać, że stosując raz jeszcze metodykę zbiorów niezgodności uzyskamy rozwiązanie z mniejszą liczbą bitów. Ponieważ rodzina zbiorów niezgodności zawiera wszystkie możliwe pary bi bj, 12 zbiorów trójelementowych oraz żadnego zbioru 5 i 6 elementowego, znalezienie dekompozycji liniowej jest możliwe wyłącznie dla funkcji typu {<i>x<sub>i</sub></i> <span style="font-family:Symbol">Å</span></span><span style="line-height:150%"> <i>x<sub>j</sub> </i>, <i>x<sub>j</sub></i> </span><span style="line-height:150%"><span style="font-family:Symbol">Å</span></span><span style="line-height:150%"> <i>x<sub>k</sub></i>}.

Z przeglądu w RCpq zbiorów trójelementowych:

 

1.   b1, b3, b4;

2.  b1, b5, b6;

3.   b1, b2, b3;

4.   b1, b2, b4;

5.   b1, b2, b5;

6.   b1, b2, b6;

7.   b2, b3, b4;

8.   b2, b5, b6;

9.   b3, b5, b6;

10.  b3, b4, b5;

11.  b3, b4, b6;

12.  b4, b5, b6;

 

wynika, że trójelementowymi zbiorami bi, bj, bk możliwymi do utworzenia dekompozycji nierozłącznej są {<i>b</i><sub>1</sub>, <i>b</i><sub>3</sub>, <i>b</i><sub>5</sub>}, {<i>b</i><sub>1</sub>, <i>b</i><sub>3</sub>, <i>b</i><sub>6</sub>}, {<i>b</i><sub>1</sub>, <i>b</i><sub>4</sub>, <i>b</i><sub>5</sub>}, {<i>b</i><sub>1</sub>, <i>b</i><sub>4</sub>, <i>b</i><sub>6</sub>}, {<i>b</i><sub>2</sub>, <i>b</i><sub>3</sub>, <i>b</i><sub>5</sub>}, {<i>b</i><sub>2</sub>, <i>b</i><sub>3</sub>, <i>b</i><sub>6</sub>}, {<i>b</i><sub>2</sub>, <i>b</i><sub>4</sub>, <i>b</i><sub>5</sub>}, {<i>b</i><sub>2</sub>, <i>b</i><sub>4</sub>, <i>b</i><sub>6</sub>}. Ponieważ są wśród nich dwa zbiory rozłączne: {<i>b</i><sub>1</sub>, <i>b</i><sub>3</sub>, <i>b</i><sub>5</sub>} i {<i>b</i><sub>2</sub>, <i>b</i><sub>4</sub>, <i>b</i><sub>6</sub>}, a ponadto w COM(RCpq) jest zbiór 6 elementowy b1, b2, b3, b4, b5, b6, spełnione są warunki istnienia dekompozycji: F = H(b1 Å b3, b3 Å b5, b2 Å b4, b4 Å b6). W rezultacie indeksy kodera 1 z 10 są 4-bitowe (tab. 3.34) i jest to rozwiązanie lepsze niż w [3.20]. 

Tablica  3.34

y1

y2

y3

y4

h

1

0

0

0

1

0

0

0

0

2

1

0

1

0

3

0

0

1

0

4

1

1

0

0

5

1

1

1

1

6

0

0

1

1

7

0

1

0

0

8

0

1

0

5

9

0

0

0

1

10