Vous êtes sur la page 1sur 3

Iti dau c/p la un exemplu:

Conditia ca C sa fie cod nu e neaparat ca Ci sa fie egal cu Ci+1 la un moment dat,


ci cu Ci + x, unde x e pozitiv.

Cu alte cuvinte, bucla poate fi oricat de mare - esential e ca intr-un final un Ci


sa fie egal cu un Cj anterior - nu e nevoie sa fie consecutive.

de ex:

a=1
b=01
c=101

NU este cod, pentru ca 101 poate insemna si "ab" si "c"

Anyway, o sa iau doua exemple pe care o sa aplic Sardinas-Patterson:

1)C={a,ab,ba}

Din prima ne dam seama ca nu e cod (pentru ca "aba" poate insemna si "ab" + "a",
dar si "a" + "ba"). Aplicand Sardinas-Patterson pe el o sa ajung, evident, la
aceeasi concluzie.

Din multimea C originala trebuie sa construiesc multimile Ci (C1, C2, etc). Astea
se afla asa:

luam primul el din C, adica "a". "a" este prefix in celelalte elemente?

-in "ab": este prefix, deci 'scadem' "a" din "ab" si ne ramane "b". punem "b" in
multimea C1.

-in "ba": NU este prefix, trecem mai departe.

"ab" este prefix in "a"? Nu, logic ca nu, este mai lung, n-are cum. Nici in "ba" n-
are cum sa fie pentru ca este la fel de lung. C1 ramane neschimbata

"ba" este prefix in "a" sau "ab"? Iarasi nu, din acelasi motiv.

OBS: este avantajos sa punem in fiecare multime C elementele in ordinea marimii


lor, pentru ca astfel nu trebuie sa mai verificam si in urma - adica nu trebuie sa
mai vedem daca un element mai de la sfarsit este prefix in unul de la inceput,
pentru ca nu are cum, fiind de aceeasi lungime sau mai lung. Deci nici nu m-as mai
fi chinuit sa verific daca "ab" este prefix in "a" sau daca "ba" este in "a" sau
"ab".

Okay, deci avem C1 = {b} si atat. Verificam intersectia lui C1 cu C. Daca gasim un
element pe care acestea il au in comun, atunci nu este cod!

C intersectat cu C1 este multimea vida, deci mergem mai departe (calculam C2)

Acum luam pe rand fiecare element din multimea C1 si vedem daca e prefix in
multimea C. Ce ramane punem in C2.

"b" este prefix in "a"? Nu. C2 ramane nul.

"b" este prefix in "ab"? Nu. C2 ramane tot nul.


"b" este prefix in "ba"? Da. Scadem din "ba" "b" si ne ramane "a". "a" il punem in
C2.

!!!!!
Apoi iau si toate elementele din C si vad daca vreunul din ele este prefix in
vreunul din elementele din C1. Nefiind aici cazul, trec mai departe.
!!!!

Am terminat de verificat.

C2 = {a}. Verificam intersectia lui C2 cu C. Avem un "a" comun, deci codificarea


nostra C nu este cod.

Al doilea exemplu:

C={a,bb,aab,bab}

Aflam C1:

"a" in "bb" - C1 neschimbat.

"a" in "aab" - 'scadem' si ne ramane "ab", punem in C1.

"a" in "bab" - C1 neschimbat.

"bb" in "aab" - C1 neschimbat

"bb" in "bab" - C1 neschimbat

("bb" nu il mai verific si in "a" datorita OBS de mai sus)

"aab" in "bab" - evident, neschimbat.

Deci C1 = {ab}

C1 intersectat cu C este multimea vida. Mergem mai departe sa aflam C2.

luam "ab" din C1 si vedem daca este prefix in ceva din C original:

in "a" nu este.

in "bb" nu este.

in "aab" nu este.

"in bab" nu este.

Acum luam toate elementele din C si vedem daca vreunul dintre ele este prefix in
C1.

"a" este prefix in "ab", 'scadem' si ne ramane "b", il punem in C2.

"bb", "aab" si "bab" nu au cum sa fie pentru ca sunt cel putin la fel de lungi ca
"ab" (cum am zis la OBS)

deci C2 = {b}. C2 intersectat cu C este multimea vida deci merg mai departe.

construim C3: (o sa mai scriu doar cazurile in care gasesc ceva)


compar "b" cu elem din C:

"b" in "bb" - scad si pun ce ramane, adica "b", in C3

"b" in "bab" - scad si pun "ab" in C3

acum verific daca vreun element din C este prefix in C2, dar nu este cazul din
cauza lungimii.

deci C3 = {b,ab}. C3 inters cu C este multimea vida deci merg mai departe.

construim C4:

"b" in "bb" - ne ramane "b", punem in C4

"b" in "bab" - ne ramane "ab", punem in C4

"ab" nu este prefix in nimic din C

luam toate elementele din C si vad daca sunt prefix in C3:

avem doar "a" care este prefix in "ab", deci ne ramane "b". dar il aveam deja.

deci C4 {b,ab} adica identic cu C3!! deci daca vom construi C5, va fi identic cu
C4, ad infinitum.

Alg Sardinas-Patterson are doua conditii de terminare: ori gasesti in vreun Ci


dintr-asta macar un element pe care il are in comun cu C-ul original, deci NU este
cod;
ori ajungi intr-o situatie ca asta, in care Ci-urile incep sa se repete, o bucla.
Cum pana acum toate C1, C2, C3, C4, oricare dintre ele intersectate cu C au dat
multimea vida, este evident ca C5 (care va fi tot C3), C6 (care la fel este egal cu
C3), oricare dintre astea intersectate cu C vor da tot multimea vida. Asta e a doua
conditie in care se poate termina Sardinas-Patterson, si codificarea noastra C ESTE
cod.

Vous aimerez peut-être aussi