Sunteți pe pagina 1din 15

Universitatea Bucuresti

Facultatea de Matematica-Informatica
Specializare Tehnologia Informatiei

Reprezentarea
Reed-Muller-Jegalkin

Jerca Vlad
anul I, gr. 152

Cuprins

1. Definitie.........................................................................................................................................3
2. Exemplu........................................................................................................................................10
3. Codificarea in Limbajul C...........................................................................................................12
4. Rularea programului ...................................................................................................................15

= xyz + xy z + x y z + x yz + x yz =
= m7 + m6 + m 4 + m5 + m1 =

(1,4,5,6,7 )

B ( xyz ) = xyz + x z + x yz + x yz = xyz + x( y + y ) z + x yz + x yz =

1.Definitie
=xyz + xy z + x y z + x yz + x yz =m7 + m6 + m 4 + m5 + m1 = (1,4,5,6,7 )
Deoarece formele canonice P sunt identice putem spune c :
A( x, y, z ) = B ( x, y, z )

3.2. Reprezentarea Reed-Muller-Jegalkin


Reprezentarea Reed-Muller-Jegalkin mai este cunoscut ca reprezentarea polinomial
a funciilor de comutaie ( reprezentarea RMJ ).
Teorem : Orice funcie de comutaie de n variabile f (x1 ,..., x n ) poate fi
reprezentat n urmtoarea form polinomial :
f (x=
1 ,..., x n ) a 0 a1 x1 a 2 x 2 ... a n x n a n +1 x1 x 2

a n + 2 x1 x3 ... a 2 n 1 x1 x 2 ...x n 1 x n

unde :

[ (

)]

sunt coeficieni binari denumii coeficieni Reed-Muller-Jegalkin


sau coeficieni polinomiali ( coeficieni RMJ ) ;
este operatorul XOR
xi sunt variabile booleene n form necomplementat ( toate variabilele sumt n
form necomplementat ).
Exemple :
1). Considerm funcia NOR, definit prin tabelul de adevr :
a i , i 0, 2 n 1

x y

0
0
1
1

0
1
0
1

1
0
0
0

f ( x, y ) = x y = x. y = (1 x )(1 y ) = 1 x y xy
y) x y .
Aceasta reprezint forma Reed-Muller-Jegalkin pentru funcia NOR f ( x,=
Coeficienii RMJ au urmtoarele valori :

a 0 = 1

a1 = 1

a 2 = 1
a3 = 1

2) Considerm funcia OR definit prin tabelul de adevr :


x

x+ y

0
0
1
1

0
1
0
1

0
1
1
1

f ( x, y ) = x y x y xy = (1 x ) y x(1 y ) xy =
= y xy x xy xy = x y xy

Suma obinut corespunde formei Reed-Muller-Jegalkin pentru funcia OR.


Coeficienii RMJ sunt :
a 0 = 0

a1 = 1

a 2 = 1
a 3 = 1

f ( x, y ) = x y x y xy = (1 x ) y x(1 y ) xy =
= y xy x xy xy = x y xy

Suma obinut corespunde formei Reed-Muller-Jegalkin pentru funcia OR.


Coeficienii RMJ sunt :
a 0 = 0

a1 = 1

a 2 = 1
a 3 = 1

3) Considerm funcia NAND definit prin tabelul de adevr:


x

xy

0
0
1
1

0
1
0
1

1
1
1
0

f ( x, y ) = x y x y x y = (1 x )(1 y ) (1 x ) y x(1 y ) =
=1 x y xy y xy x xy =1 xy

Aceasta reprezint forma RMJ pentru funcia NAND iar coeficienii RMJ
corespunztori sunt:
a 0 = 1

a1 = 0

a 2 = 0
a 3 = 1

Deci, fiecare funcie de dou variabile este caracterizat de propria mulime de


coeficieni polinomiali {a 0 , a1 , a 2 , a 3 } . Numrul total de combinaii este 2 4 = 16 care
corespunde numrului total de funcii de comutaie de dou variabile f ( x1 x 2 ) , care
2

este 2 2 = 16 .
Considerm forma canonic P a unei funcii de comutaie de o variabil scris cu
operatorul XOR ntre mintermeni :
f ( x) = d 0 m0 (x ) d1 m1 (x )

unde :

d i (i (0,1)) sunt coeficieni binari ai mintermenilor


dac d i = 1 atunci mi este respins
m0 ( x) = x = 1 x
m1 ( x) = x

Prin nlocuire n f (x) obinem :

f ( x) = d 0 (1 x ) d 1 x = d 0 d 0 x d 1 x = d 0 x(d 0 d1 )

n cazul formei RMJ, avem :


=
f ( x) a 0 a1 x1 ,
unde a 0 , a1 sunt coeficieni binari RMJ.

Prin identificarea coeficienilor obinem :

a 0 = d 0

=
a1 d 0 d1

Aceste relaii pot fi scrise n form matriceal :


a 0 1
=
a1 1

0 d 0

1 d 1

Notm matricile :
0
1
= T1

1
1
a0
= a
a1
d0
= d
d1
Atunci : a = T1 d

Continum analiza pentru funciile de dou variabile. Forma canonic P a unei funcii
de comutaie de dou variabile scris cu operatorul XOR ntre mintermeni este :
=
f (x1 x 2 ) d 0 m0 d1 m1 d 2 m 2 d 3 m3

unde :

d i (i (0,1)) sunt coeficieni binari ai mintermenilor


dac d i = 1 , atunci mintermenul este reinut
dac d i = 0 , atunci mintermenul este respins

m0 (x1 x 2 ) = x1 x 2 = (1 x1 )(1 x 2 ) = 1 x1 x 2 x1 x 2

(1 x1 )x 2 =
m1 (x1 x 2 ) =
x1 x 2 =
x 2 x1 x 2

m 2 (x1 x 2 ) = x1 x 2 = x1 (1 x 2 ) = x1 x1 x 2

m3 (x1 x 2 ) = x1 x 2

Prin nlocuirea n f (x1 x 2 ) obinem :

(x1 x 2 ) d 0 (1 x1 x 2 x1 x 2 ) d1 (x 2 x1 x 2 ) d 2 (x1 x1 x 2 ) d 3 x1 x 2 =
f=

= d 0 x 2 (d 0 d1 ) x1 (d 0 d 2 ) x1 x 2 (d 0 d 1 d 2 d 3 )

Forma polinomial RMJ pentru n = 2 este :


f (x=
1 x 2 ) a 0 a1 x 2 a 2 x1 a 3 x1 x 2 ,
unde a i (i = 0,1,2,3) Sunt coeficieni RMJ.
Prin identificarea coeficienilor, obinem urmtoarele relaii :

a 0 = d 0

=
a1 d 0 d1

=
a 2 d 0 d 2
a 3 d 0 d1 d 2 d 3
=

Aceste relaii pot fi scrise n form matricial :


1
a0
1
a1
a = ...
2 1
a
3 1

0
1
...
0
1

...
...
...
...
...

0
0
...
1
1

0
d 0
0
d1
...
d
0 2
d
1 3

sau, n notaie compact :


a = T2 d

unde:

a0

a1
a=
a
2
a
3

d0

d1
d =
d
2
d
3
T1 0

T2 =
T1 T1

O analiz similar pentru n = 3 , conduce la :

f (=
x1 x 2 x3 ) d 0 m0 d 1 m1 d 2 m 2 d 3 m3 d 4 m 4 d 5 m5 d 6 m6 d 7 m7

m0 =x1 x 2 x3 =(1 x1 )(1 x 2 )(1 x 3 )= 1 x1 x 2 x3 x1 x 2 x1 x3 x 2 x3 x1 x 2 x 3

(1 x1 )(1 x 2 )x3 =
(1 x1 x 2 x1 x 2 ) x3 =
m1 =
x1 x 2 x3 =
x3 x1 x3 x 2 x3 x1 x 2 x3

m 2 = x1 x 2 x 3 = (1 x1 )x 2 (1 x 3 ) = (1 x1 x3 x1 x3 ) x 2 = x 2 x1 x 2 x 2 x3 x1 x 2 x 3

(1 x1 )x 2 x3 =
m3 =
x1 x 2 x 3 =
x 2 x3 x1 x 2 x 3

m 4 =x1 x 2 x3 =x1 (1 x 2 )(1 x3 ) =x1 (1 x 2 x 3 x 2 x3 ) =x1 x1 x 2 x1 x3 x1 x 2 x3


m5 =
x1 x 2 x3 =
x1 (1 x 2 )x3 =
x1 x3 x1 x 2 x 3

m6 = x1 x 2 x 3 = x1 x 2 (1 x3 ) = x1 x 2 x1 x 2 x 3
m7 = x1 x 2 x3

Prin nlocuirea expresiilor pentru mi (x1 x 2 x3 ) n f (x1 x 2 x3 ) obinem :


f (x=
1 x 2 x 3 ) d 0 (1 x1 x 2 x 3 x1 x 2 x1 x 3 x1 x 2 x 3 )

d 1 (x3 x1 x 3 x 2 x3 x1 x 2 x3 )

d 2 (x 2 x1 x 2 x 2 x3 x1 x 2 x3 )
d 3 ( x 2 x3 x1 x 2 x3 )

d 4 (x1 x1 x 2 x1 x3 x1 x 2 x 3 )
d 5 (x1 x3 x1 x 2 x3 )

d 6 (x1 x 2 x1 x 2 x3 ) d 7 x1 x 2 x3 =

= d 0 x1 (d 0 d 4 ) x 2 (d 0 d 2 ) x3 (d 0 d 1 )
x1 x 2 (d 0 d 2 d 4 d 6 )
x1 x 3 (d 0 d1 d 4 d 5 )

x 2 x 3 (d 0 d1 d 2 d 3 )

x1 x 2 x3 (d 0 d 1 d 2 d 3 d 4 d 5 d 6 d 7 )

Forma polinomial RMJ pentru f (x1 x 2 x3 )

f (=
x1 x 2 x3 ) a 0 a1 x3 a 2 x 2 a 3 x 2 x3 a 4 x1 a 5 x1 x3 a 6 x1 x 2 a 7 x1 x 2 x 3

Prin identificarea coeficienilor :

a0 = d 0
=
a1 d 0 d 1
=
a2 d 0 d 2
=
a3 d 0 d1 d 2 d 3
=
a4 d 0 d 4
=
a5 d 0 d1 d 4 d 5
=
a6 d 0 d 2 d 4 d 6
=
a 7 d 0 d1 d 2 d 3 d 4 d 5 d 6 d 7

n notaie matriceal:

1 0 0 0 ... 0 0 0
a0
1 1 0 0 ... 0 0 0
a1
a 1 0 1 0 ... 0 0 0
2 1 1 1 1 ... 0 0 0
a3
= .........................................
a 4 1 0 0 0 ... 1 0 0
a5
1 1 0 0 ... 1 1 0
a6
a 1 0 1 0 ... 1 0 1
7 1 1 1 1 ... 1 1 1

n notaie compat :

0
d 0
0
d1
0
d2
0
d 3
d
0 4
d
0 5
d
0 6
d 7
1

a = T3 d

unde:

T
T3 = 2
T2

T2

Deci, prin generalizare :


a = Tn d

unde :

Tn 1
Tn =
Tn 1

Tn 1

Dimensiunile matricii Tn sunt 2 n 2 n


Am determinat o procedur iterativ simpl pentru calcularea coeficienilor RMJ,
a i , i 0, (2 n 1) pentru fiecare n . Rmne de clarificat problema corespondenei
ntre a k i termenul produs de variabile necomplementate din forma polinomial
RMJ.
Considerm forma general pentru un termen produs pe n variabile necomplementate,
notat k :

= x1e1 .x 2e2 ...x nen

unde :

e j {0,1}, j [1, n] este un exponent al variabilelor care difer fa denotaia

exponenial folosit pentru literali, i anume :

x j
e
x jj =
1

daca e j = 1
daca e j = 0

k10 = (e1e 2 ...en )2 = e1 .2 n 1 + e 2 .2 n 2 + ... + e n .2 0 =

este

[0, (2

)]

indexul

coeficientului

e j 2 n j
j =1

RMJ

gama

zecimal

Deci, trebuie s transformm k din baza 10 n baza 2 pe n poziii i s aplicm


e
formula general pentru k , respectnd convenia pentru x j j ( pentru e j = 1
variabila x j rmne, pentru e j = 0 , variabila este tears). Astfel pentru n = 2 ,

valorile lui k sunt 0,1,2 i 3 ; coeficienii RMJ sunt a 0 a1 a 2 a 3 i termenii produs sunt
determinai astfel :
k =010 =(00 )2

(01)2
110 =
k=

k =210 =(10 )2
k=
310 =(11)2

1.1 =
1
x10 x 20 =
1.x 2 =x 2
x10 x 12 =
x11 x 20 =x1 .1 =x1
x11 x 12 =
1.x 2 =x1 x 2

Atunci forma polinomial RMJ este :

f (x1=
x 2 ) a 0 0 a1 1 a 2 2 a3 =
a 0 a1 x 2 a 2 x1 a 3 x1 x 2
3

Pentru n = 3 , valorile lui k sunt 0,1,...,7 ; coeficienii RMJ sunt : a 0 ...a 7 iar termenii
produs sunt determinai astfel :

(000)2
010 =
k=

1.1.1 =
1
x10 x 20 x30 =

(001)2
110 =
k=

1.1.x3 =
x10 x 20 x31 =
x3

(010)2
210 =
k=

1.x 2 .1 =
x10 x12 x30 =
x2

(011)2
310 =
k=

1.x 2 .x3 =
x10 x 12 x31 =
x 2 x3

(100)2
410 =
k=

x11 x 20 x30 =
x1 .1.1 =
x1

(101)2
510 =
k=

x11 x 20 x31 =
x1 .1.x3 =
x1 x3

(110)2
610 =
k=

x11 x12 x30 =


x1 .x 2 .1 =
x1 x 2

(111)2
k=
710 =

x11 x 12 x31 = x1 x 2 x3

Atunci, forma polinomial RMJ este :

f (=
x1 x 2 x3 ) a 0 a1 x3 a 2 x 2 a 3 x 2 x3 a 4 x1 a 5 x1 x3 a 6 x1 x 2 a 7 x1 x 2 x 3
n general, reprezentarea RMJ pentru n variabile se poate scrie n felul urmtor :
f (x1 x 2 ...x n ) =

unde :

2 n 1

a k k

k = 0

= x1e1 x 2e2 ...x nen

e j (0,1),

j [1, n]

x j , daca e j = 1
e
x jj =
daca e j = 0
1,
Coeficienii=
a k k 0, 2 n 1 sunt determinai din ecuaia matriceal :
(a ) = (Tn )(. d ) , unde

))

10

Tn 1
Tn =
Tn 1

Tn 1

Matricea Ti este obinut iterativ,


Ti 1
Ti =
Ti 1

1
T1 =
1

Ti 1

Fiecare mulime de coeficieni ai conduce la o expresie diferit, astfel nct exist


n

2 2 expresii diferite.

Algoritm :
Transformarea formei canonice P n reprezentare RMJ urmeaz urmtorii pai :
d0

d1
1). Formarea matricii d =
...

d n
2 1
2).Scrierea matricii (Tn )2 n 2n :
Tn 1
Tn =
Tn 1
Ti 1
Ti =
Ti 1

1
T1 =
1

Tn 1
0

Ti 1

3). Calculul coeficienilor a k din ecuaia matricii :


a = Tn .d

4). Pentru fiecare k se determin termenul corespunztor :

= x1e1 x 2e2 ...x nen

x j , daca e j = 1
e
x jj =
daca e j = 0
1,
k10 = (e1e2 ...en )2

Exemplu :
Se d urmtoarea funcie de trei variabile :
f (x1 x 2 x3 ) = (0,4,5,6)

Matricea d

11

= x1 x 2 ...x n

x j , daca e j = 1
e
x jj =
daca e j = 0
1,
k10 = (e1e2 ...en )2

2.Exemplu
Exemplu :
Se d urmtoarea funcie de trei variabile :
f (x1 x 2 x3 ) = (0,4,5,6)

Matricea d
1

0
0

0
d =
1
1

1
0

11

Matricea T3 :

T2
T3 =
T2

T1 0 .

T1 T1 .
0
= .
. .
T2
T1 0 .

T1 T1 .

. .
T1 0
T1 T1

1
1

1
= .

1

1
1

0 0 0 . 0 0 0 0

1 0 0 . 0 0 0 0
0 1 0 . 0 0 0 0

1 1 1 . 0 0 0 0
. . . . . . . .
0 0 0 . 1 0 0 0

1 0 0 . 1 1 0 0
0 1 0 . 1 0 1 0

1 1 1 . 1 1 1 1

Rezolvarea ecuaiei cu coeficieni ai , (i [0,7])


a = T3 .d

1
a0
1
a1
a 1
2 1
a3
= .
a 4 1
a5
1
a6
a 1
7 1

a0 = 1

0
1
0
1
.
0
1
0
1

0
0
1
1
.
0
0
1
1

0
0
0
1
.
0
0
0
1

. 0 0 0
. 0 0 0
. 0 0 0
. 0 0 0
. . . .
. 1 0 0
. 1 1 0
. 1 0 1
. 1 1 1

0
1
0
0
0
0
0
0
. .
1
0
1
0
1
0
0
1

a1 = 1
a2 = 1
a3 = 1
a4 = 0
a5 = 1
a6 = 1
a7 = 0

Determinarea termenilor produs :

10

a3 = 1
a4 = 0
a5 = 1
a6 = 1
a7 = 0

Determinarea termenilor produs :


k =0

000

111 =
1
x10 x 20 x30 =

k =1

001

11x 3 =
x10 x 20 x 31 =
x3

k =2

010

1x 2 1 =
x10 x 12 x30 =
x2

k =3

011

1x 2 x3 =
x10 x 12 x31 =
x 2 x3

k =4

100

x10 x 20 x30 =
x111 =
x1

k =5

101

x11 x 20 x 31 =
x11x3 =
x1 x 3

k =6

110

x11 x 12 x 30 =
x1 x 2 1 =
x1 x 2

k =7

111

x11 x 12 x 31 =
x1 x 2 x 3 =
x1 x 2 x 3

12

Reprezentarea RMJ pentru f (x1 x 2 x3 ) este:


f (x1 x 2 =
x 3 ) 1 x 3 x 2 x 2 x 3 x1 x3 x1 x 2

Putem verifica corectitudinea expresiei obinute prin scrierea formei canonice P a lui
f (x1 x 2 x3 ) cu operatorul XOR :
=
f (x1 x 2 x3 ) x1 .x 2 .x3 x1 .x 2 .x3 x1 x 2 x3 x1 x 2 x3 =

= (1 x1 )(1 x 2 )(1 x3 ) x1 (1 x 2 )(1 x3 ) x1 (1 x 2 )x3 x1 x 2 (1 x3 ) =

= 1 x1 x 2 x3 x1 x 2 x1 x3 x 2 x3 x1 x 2 x3 x1 x1 x 2 x1 x3 x1 x 2 x3 x1 x3 x1 x 2 x3
x1 x 2 x1 x 2 x 3 =
1 x3 x 2 x 2 x 3 x1 x3 x1 x 2

Se observ c s-a obinut acelai rezultat.


Aa cum s-a clarificat relaia dintre coeficienii RMJ i termenii produs, sunt
prezentate n mod centralizat cele 16 combinaii de patru coeficieni {a 0 a1 a 2 a 3 }
pentru toate cele 16 funcii de comutaie de dou variabile, f (x1 x 2 )
Funcie de dou variabile
Reprezentare RMJ
a 0 a1 a 2 a 3
f0
0
0
0000
f1
x1 x 2
x1 x 2
0001
f2
x1 1 x 2
x1 x1 .x 2
0011
f3
x1
x1
0010
f4
x1 2 x 2
x 2 x1 .x 2
0101
f5
x2
x2
0100
f6
x1 x 2
x1 x 2
0110
f7
x1 + x 2
x1 x 2 x1 x 2
0111
f8
1 x1 x 2 x1 x 2
1111
x1 x 2
f9
x1 [x 2
1 x1 x 2
1110
f 10
1 x2
1100
x2
f 11
f 12

f 13
f 14
f 15

1 x 2 x1 x 2
1 x1

1100
1010

x1 x 2

1 x1 x1 x 2
1 x1 x 2

1011
1001

1001

x1 2 x 2
x1
x1 1 x 2

3.3. Formule Produs de Sum (POS)


11
13

3.Codificarea in limbajul C
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<ctype.h>
#include<stdlib.h>
void construiescT(int a[255][255], int n)
{
a[1][1]=1;

for(int pas=1;pas<=pow(2,n-1);pas*=2)
for(int i=1;i<=pas;i++)
for(int j=1;j<=pas;j++)
{
a[i+pas][j]=a[i][j];
a[i+pas][j+pas]=a[i][j];
}
}
void afisezMat(int a[255][255], int n)
{
int i, j;
for(i=1;i<=n;i++)

{printf( );
for(j=1;j<=n;j++)
{
printf(%d , a[i][j]);
}

printf(\n);
}
}
void XORMatVect(int a[255][255], int vect[255], int rezultat[255], int n)
{

int i, pas;
printf(\n);
for(i=1;i<=n;i++)
{ rezultat[i]=0;
for(pas=1; pas<=n; pas++)

rezultat[i] = rezultat[i] + a[i][pas] * vect[pas] ;
}
for(i=1;i<=n;i++)
if(rezultat[i]%2==0)
rezultat[i]=0;
else rezultat[i]=1;

}

12

void ToBinary(int vector[255], int a, int n)


{

int i, j=1;
i=pow(2,n-1);

for( i=i ; i >= 1 ; i = i/2 )
{

if( a/i >= 1 )
{
vector[j]=1;
a=a-i;
j++;
}
else {
vector[j]=0;
j++;
}

}
}
void AfisPolin(int a, int n)
{

int i, nrx=1;
i=n/2;


for( i=i ; i >= 1 ; i = i/2 )
{

if( a/i >= 1 )
{
printf(x%d, nrx);
nrx++;
a=a-i;
}
else
nrx++;
}

}
void afisezVect(int vector[255], int n)
{

for(int i=1;i<=n;i++)

printf( %d\n, vector[i]);
}

13

void RMJ()
{

int T[255][255], vect[255], polinom[255], n, numar;

printf(Introduceti ordinul: ); scanf(%d, &n);

printf(Introduceti numarul: ); scanf(%d, &numar);

construiescT(T,n); // construieste Tn
n=pow(2,n);

printf(Matricea Tn:\n);

afisezMat(T,n); // afiseaza Tn

printf(\nVectorul d:\n);

ToBinary(vect, numar, n); // afla vectorul lui f-numar

afisezVect(vect, n); // afiseaza vectorul lui f-numar

XORMatVect(T,vect,polinom,n); // afla polinomul caracteristic

printf(\nVectorul polinomial este:\n);

afisezVect(polinom, n);

printf(\nPolinomul caracteristic este:\n\n);
if(polinom[1]==1)
printf(1);

for(int i=2;i<=n;i++)
if(polinom[i]==1)
{
printf( ^ );
AfisPolin(i-1,n);

}

getch();
system(cls);
}
int main ()
{

char op;
while(op!=N)
{
RMJ();

printf(Doriti sa mai transformati un numar? (D/N) \n\nOptiune:);
op=toupper(getche());
system(cls);

}

return 0;
}

14

4.Rularea Programului

OBS: XOR este reprezentat de simbolul ^

15