2. Algebra Boole’a i przekształcenia boolowskie

2.3. Graf prosty, pojęcie relacji

Grafem prostym (niezorientowanym) nazywamy parę G = (V, E), gdzie V jest niepustym skończonym zbiorem wierzchołków, a E jest skończonym zbiorem krawędzi – nieuporządkowanych par różnych elementów ze zbioru V [1.18]. Przykład grafu podany jest na rys. 1.2. Jest to graf, w którym zbiór wierzchołków V = {<i>v</i><sub>1</sub>, <i>v</i><sub>2</sub>, <i>v</i><sub>3</sub>, <i>v</i><sub>4</sub>, <i>v</i><sub>5</sub>, <i>v</i><sub>6</sub>} oraz zbiór krawędzi E = {(<i>v</i><sub>1</sub>,<i>v</i><sub>6</sub>), (<i>v</i><sub>2</sub>,<i>v</i><sub>3</sub>), (<i>v</i><sub>2</sub>,<i>v</i><sub>4</sub>), (<i>v</i><sub>2</sub>,<i>v</i><sub>5</sub>), (<i>v</i><sub>2</sub>,<i>v</i><sub>6</sub>), (<i>v</i><sub>3</sub>,<i>v</i><sub>4</sub>), (<i>v</i><sub>3</sub>,<i>v</i><sub>6</sub>), (<i>v</i><sub>5</sub>,<i>v</i><sub>6</sub>)}.

Dowolny podzbiór wierzchołków, w którym każde dwa wierzchołki są połączone krawędzią nazywamy kliką. Klikę, która nie jest zawarta w żadnej istotnie innej klice, nazywamy maksymalną. Najliczniejszą klikę w danym grafie nazywamy największa kliką. Klikami dla grafu z rys. 1.2 są następujące zbiory:

 

V = {<i>v</i><sub>2</sub>, <i>v</i><sub>3</sub>, <i>v</i><sub>4</sub>}, V = {<i>v</i><sub>2</sub>, <i>v</i><sub>3</sub>, <i>v</i><sub>6</sub>}, V = {<i>v</i><sub>2</sub>, <i>v</i><sub>5</sub>, <i>v</i><sub>6</sub>}.

 

Zbiorem niezależnym nazywamy dowolny zbiór wierzchołków, które nie są sąsiednie w danym grafie. Analogicznie określamy pojęcie maksymalnego zbioru niezależnego. Przykłady zbiorów niezależnych dla grafu z rys. 1.2: 

 

V = {<i>v</i><sub>1</sub>,<i>v</i><sub>4</sub>, <i>v</i><sub>5</sub>}, V = {<i>v</i><sub>1</sub>, <i>v</i><sub>3</sub>, <i>v</i><sub>5</sub>}, V = {<i>v</i><sub>4</sub>, <i>v</i><sub>6</sub>}, V = {<i>v</i><sub>1</sub>, <i>v</i><sub>2</sub>}.

 

Rys.  1.2. Przykład grafu

 

Obliczanie klik nie jest zadaniem łatwym. Można się zastanawiać jak obliczyć maksymalne kliki w grafie podanym na rys. 1.3.

 

Rys.  1.3. Przykład grafu

 

Dlatego problem obliczania maksymalnych klik warto sprowadzić do problemu obliczania maksymalnych klas zgodności definiowanych dla danej relacji zgodności. Najpierw zdefiniujemy ważne pojęcie iloczynu kartezjańskiego.

Iloczynem kartezjańskim zbiorów A i B, oznaczanym A × B nazywamy zbiór wszystkich par uporządkowanych (a, b), takich że pierwszy element pary należy do zbioru A (a Î A), natomiast drugi do B (b Î B), czyli:

 

A × B = {(<i>a</i>,<i>b</i>): <i>a</i> </span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:Symbol"><span style="color:black">Î</span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:"Calibri",sans-serif"><span style="color:black"> <i>A</i>, <i>b</i> </span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:Symbol"><span style="color:black">Î</span></span></span></span><span style="font-size:12.0pt"><span style="line-height:115%"><span style="font-family:"Calibri",sans-serif"><span style="color:black"> <i>B</i>}

 

Niech A = {<i>p</i>,<i>q</i>} oraz B = {<i>r</i>,<i>s</i>,<i>t</i>},

wtedy A × B = {(<i>p</i>,<i>r</i>), (<i>p</i>,<i>s</i>), (<i>p</i>,<i>t</i>), (<i>q</i>,<i>r</i>), (<i>q</i>,<i>s</i>), (<i>q</i>,<i>t</i>)}.

Relacją nazywamy dowolny podzbiór iloczynu kartezjańskiego zbiorów A, B. Typowe własności relacji na zbiorze A (czyli A × A) są definiowane następująco:

  • zwrotność: \forall\ a\in\ A:aRa
  • symetria:  \forall\ a,b\in\ A:aRb(bRa
  • przechodniość:  \forall\ a,b,c\in\ A:aRb,\ bRc\ (bRc

Najważniejszymi relacjami stosowanymi w syntezie logicznej są relacje równoważności i zgodności.

Relację, która jest zwrotna i symetryczna nazywamy relacją zgodności. Relacja zgodności jest również nazywana relacją nierozróżnialności. Relacja zgodności klasyfikuje elementy zbioru w nierozłączne podzbiory zwane Systemem zbiorów (więcej na ten temat w rozdz. 1.4).

Szczególnym przypadkiem relacji zgodności jest relacja równoważności. Relacja równoważności jest relacją zwrotną, symetryczną i przechodnią. Relacja równoważności dzieli zbiór A na rozłączne podzbiory, co w konsekwencji prowadzi do pojęcia podziału (zbioru) tworząc bardzo użyteczny w syntezie logicznej rachunek podziałów omawiany w następnym rozdziale.

Własności relacji zgodności pokrywają się z intuicyjnym rozumieniem zgodności:

a) każdy element jest zgodny z samym sobą,

b) jeśli element v1 jest zgodny z v2, to również v2 jest zgodny z v1,

c) jeśli v1 jest zgodny z v2 oraz v2 jest zgodny z v3, to z tego nie wynika, że v1 jest zgodny z v3.

Relacja zgodności umożliwia wprowadzenie pojęcia Maksymalnych Klas Zgodności (MKZ).

Zbiór par określających relację zgodności nazywa się zbiorem par zgodnych. Pary zgodne umożliwiają wyznaczenie maksymalnych zbiorów zgodnych.

Zbiór V = {<i>v</i><sub>1</sub>,</span><span style="line-height:150%"><span style="font-family:Symbol">¼</span></span><span style="line-height:150%">,<i>v<sub>p</sub></i>} nazywamy maksymalnym zbiorem zgodności (maksymalną klasą zgodności), jeżeli każda para vi, vj wzięta z tego zbioru jest zgodna oraz nie istnieje żaden inny zbiór elementów zgodnych V’, zawierający V. Maksymalne zbiory zgodne są odpowiednikiem klik w grafie prostym.

Z powyższego wynika, że w celu obliczania klik metodą maksymalnych klas zgodności należy:

  1. Zapisać pary SPRZECZNE (vi, vj), (vk, vl), (vp, vq), w postaci koniunkcji dwuskładnikowych sum (vi + vj)(vk + + vl)(vp, + vq) ¼
  2. Koniunkcję dwuskładnikowych sum przekształcić do minimalnego wyrażenia boolowskiego typu suma iloczynów vivjvk + vpvqvrvs +…

Wtedy MKZ są uzupełnieniami zbiorów reprezentowanych przez składniki iloczynowe tego wyrażenia.

 

Dla grafu z rys.1.2 pary zgodne są: (v1, v6), (v2, v3), (v2, v4), (v2, v5), (v2, v6), (v3, v4), (v3, v6), (v5, v6). Zatem pary sprzeczne będą:

E = {(<i>v</i><sub>1</sub>, <i>v</i><sub>2</sub>), (<i>v</i><sub>1</sub>, <i>v</i><sub>3</sub>), (<i>v</i><sub>1</sub>, <i>v</i><sub>4</sub>), (<i>v</i><sub>1</sub>, <i>v</i><sub>5</sub>), (<i>v</i><sub>3</sub>, <i>v</i><sub>5</sub>), (<i>v</i><sub>4</sub>, <i>v</i><sub>5</sub>), (<i>v</i><sub>4</sub>, <i>v</i><sub>6</sub>)}

 

Obliczamy wyrażenie boolowskie typu „koniunkcja sum”:

 

(v1 + v2)(v1 + v3)(v1+ v4)(v1 + v5)(v3 + v5)(v4 + v5)(v4 +v6) =

= (v1 + v2)(v1 + v3)(v1+ v4)(v1 + v5)(v4 + v5)(v4 +v6)(v3 + v5) =

(stosujemy zasadę (a + b)(a + c) = a + bc)

= (v1 + v2v3v4v5)(v4 + v5v6)(v3 + v5) =

(wymnażamy i redukujemy zbędne składniki)

= (v1v4 + v1v5v6 + v2v3v4v5 + v2v3v4v5v6)(v3 + v5) =

= (v1v4 + v1v5v6 + v2v3v4v5)(v3 + v5) =

= v1v3v4 + v1v3v5v6 + v2v3v4v5 + v1v4v5 + v1v5v6 + v2v3v4v5 =

= v1v3v4 + v1v4v5 + v1v5v6 + v2v3v4v5

 

Odejmując od zbioru {<i>v</i><sub>1</sub>, </span><span style="line-height:150%"><span style="font-family:Symbol">¼</span></span><span style="line-height:150%">, <i>v</i><sub>6</sub>} zbiory reprezentowane przez poszczególne składniki uzyskanego wyrażenia obliczamy wszystkie maksymalne klasy zgodne, czyli kliki:

{<i>v</i><sub>1</sub>, </span><span style="line-height:150%"><span style="font-family:Symbol">¼</span></span><span style="line-height:150%">, <i>v</i><sub>6</sub>} – {<i>v</i><sub>1</sub>, <i>v</i><sub>3</sub>, <i>v</i><sub>4</sub>} = {<i>v</i><sub>2</sub>, <i>v</i><sub>5</sub>, <i>v</i><sub>6</sub>}

{<i>v</i><sub>1</sub>, </span><span style="line-height:150%"><span style="font-family:Symbol">¼</span></span><span style="line-height:150%">, <i>v</i><sub>6</sub>} – {<i>v</i><sub>1</sub>, <i>v</i><sub>4</sub>, <i>v</i><sub>5</sub>} = {<i>v</i><sub>2</sub>, <i>v</i><sub>3</sub>, <i>v</i><sub>6</sub>}

{<i>v</i><sub>1</sub>, </span><span style="line-height:150%"><span style="font-family:Symbol">¼</span></span><span style="line-height:150%">, <i>v</i><sub>6</sub>} – {<i>v</i><sub>1</sub>, <i>v</i><sub>5</sub>, <i>v</i><sub>6</sub>} = {<i>v</i><sub>2</sub>, <i>v</i><sub>3</sub>, <i>v</i><sub>4</sub>}

{<i>v</i><sub>1</sub>, </span><span style="line-height:150%"><span style="font-family:Symbol">¼</span></span><span style="line-height:150%">, <i>v</i><sub>6</sub>} – {<i>v</i><sub>2</sub>, <i>v</i><sub>3</sub>, <i>v</i><sub>4</sub>, <i>v</i><sub>5</sub>} = {<i>v</i><sub>1</sub>, <i>v</i><sub>6</sub>}


W podobny sposób możemy sformułować algorytm obliczania Maksymalnych Zbiorów Niezależnych (MZN).

  1. Zapisać pary zgodne (vi, vj), (vk, vl), (vp, vq), ¼w postaci koniunkcji dwuskład­nikowych sum (vi, + vj)(vk, + vl)(vp, + vq) ¼
  2. Koniunkcję dwuskładnikowych sum przekształcić do minimalnego wyrażenia boolowskiego typu suma iloczynów vivjvk + vpvqvrvs +…

Wtedy MZN są uzupełnieniami zbiorów reprezentowanych przez składniki iloczynowe tego wyrażenia.

 

Obliczmy wszystkie MZN dla grafu z rys. 1.2.

 

E = {(<i>v</i><sub>1</sub>, <i>v</i><sub>6</sub>), (<i>v</i><sub>2</sub>, <i>v</i><sub>3</sub>), (<i>v</i><sub>2</sub>, <i>v</i><sub>4</sub>), (<i>v</i><sub>2</sub>, <i>v</i><sub>5</sub>), (<i>v</i><sub>2</sub>, <i>v</i><sub>6</sub>), (<i>v</i><sub>3</sub>, <i>v</i><sub>4</sub>), (<i>v</i><sub>3</sub>, <i>v</i><sub>6</sub>), (<i>v</i><sub>5</sub>, <i>v</i><sub>6</sub>)}

 

Obliczamy wyrażenie boolowskie typu „koniunkcja sum”:

(v1 + v6)(v2 + v3)(v2+ v4)(v2 + v5)(v2 + v6)(v3 + v4)(v3 + v6)(v5 + v6) =

= (v2 + v3)(v2 + v4)(v2 + v5)(v2 + v6)(v6 + v1)(v6 + v3)(v6 + v5)(v3 + v4) =

= (v2 + v3v4v5v6)(v6 + v1v3v5)(v3 + v4) =

= (v2v6 + v1v2v3v5 + v3v4v5v6 + v1v3v4v5v6)(v3 + v4) =

= v2v3v6 + v1v2v3v5 + v3v4v5v6 + v2v4v6 + v1v2v3v4v5 + v3v4v5v6 =

= v2v3v6 + v1v2v3v5 + v3v4v5v6 + v2v4v6 =

= v2v3v6 + v2v4v6 + v1v2v3v5 + v3v4v5v6

 

Stąd maksymalne zbiory niezależne MZN: {<i>v</i><sub>1</sub>, <i>v</i><sub>4</sub>, <i>v</i><sub>5</sub>}, {<i>v</i><sub>1</sub>, <i>v</i><sub>3</sub>, <i>v</i><sub>5</sub>}, {<i>v</i><sub>4</sub>, <i>v</i><sub>6</sub>}, {<i>v</i><sub>1</sub>, <i>v</i><sub>2</sub>}.