Sisteme de programe pentru timp real - PowerPoint PPT Presentation

About This Presentation
Title:

Sisteme de programe pentru timp real

Description:

Algoritmul Rabin-Karp Idee Considera textul ca fiind o memorie mare si trateaza fiecare secventa de M caractere a textului ca o cheie intr-o tabela de dispersie (hash). – PowerPoint PPT presentation

Number of Views:11
Avg rating:3.0/5.0
Slides: 59
Provided by: turingCs8
Category:

less

Transcript and Presenter's Notes

Title: Sisteme de programe pentru timp real


1
Sisteme de programepentru timp real
  • Universitatea Politehnica din Bucuresti
  • 2007-2008
  • Adina Magda Florea
  • http//turing.cs.pub.ro/sptr_08
  • si curs.cs.pub.ro

2
Capitole curs
  • Prelucrarea sirurilor de caractere
  • Criptografie si criptosisteme
  • Retele neurale
  • Algoritmi genetici
  • Programare genetica
  • Retele Bayesiene
  • Invatare prin recompensa

3
Informatii curs
  • Pagina Web a cursului
  • http//turing.cs.pub.ro/sptr_07
  • Cursul se afla si pe curs.cs.pub.ro
  • Notare
  • Laborator 30
  • Tema de casa de semestru 20
  • Examen 50
  • Minimum 6 prezente la laborator

4
Curs Nr. 1
  • Prelucrarea sirurilor de caractere

5
Algoritmi de identificare a sirurilor de caractere
  • Introducere
  • Algoritmul cautarii directe
  • Algoritmul Knuth-Morris-Prat
  • Algoritmul Boyer-Moore
  • Algoritmul Rabin-Karp
  • Algoritmul deplaseaza-aduna

6
1 Introducere
  • Identificarea (recunoasterea) sabloanelor in
    siruri de caractere
  • sir a, lungime N
  • sablon p, lungime M
  • Fiind dat un sir de lungime N
  • a a1a2a3...aN,
  • si un sablon de lungime M
  • p p1p2p3...pM,
  • se cere sa se gaseasca multimea de pozitii
  • i ? 1 ? i ? N-M1 a.i. aiai1aiM-1 p

7
Introducere
  • Prima aparitie / toate aparitiile
  • Cum difera cautarea in sir a unui sablon de
    cautarea unei chei
  • Algoritmul cautarii directe Cazul cel mai
    nefavorabil timp proportional cu NM in multe
    cazuri practice, timpule mediu este proportional
    cu NM.
  • 1970 - S.A. Cook a demonstrat teoretic ca exista
    un algoritm de identificare a sabloanelor cu
    timpul cel mai nefavorabil proportional cu NM.
    D.E. Knuth, J.H. Morris si V.R. Pratt au
    construit un astfel de algoritm.
  • 1976 - R.S. Boyer si J.S. Moore au descoperit un
    algoritm chiar mai rapid decat (2) in multe
    aplicatii, deoarece examineaza in multe cazuri
    numai o parte din caracterele textului.
  • 1980 - R.M. Karp si M.O. Rabin au observat ca
    problema identificarii sabloanelor nu este mult
    diferita de o problema standard de cautare si au
    descoperit un algoritm care are virtual timpul
    proportional cu MN.

8
2 Algoritmul cautarii directe
  • int cautsablon1(char p, char a)
  • int i 0, j 0 / i este pointerul in text
    /
  • int M strlen(p) / j este pointerul in
    sablon/
  • int N strlen(a)
  •  
  • do
  • while ((i lt N) (jltM) (aipj))
    ij
  • if (jM) return i-M
  • i- j-1
  • j 0
  • while (iltN)
  • return i

9
Algoritmul cautarii directe
  • int cautsablon2(char p, char a)
  • int i, j
  • int M strlen(p)
  • int N strlen(a)
  • for (i0, j0 jltM iltN i, j)
  • while (ai ! pj)
  • i- j-1
  • j 0
  • if (jM)
  • return i-M
  • else
  • return i

10
Algoritmul cautarii directe
  • Proprietate Algoritmul cautarii directe
    necesita, in cazul cel mai nefavorabil, un numar
    de maxim NM comparatii de caractere.
  • Timpul de rulare pentru cazul cel mai defavorabil
    este proportional cu M(N-M1), si cum M ltlt N
    obtinem valoarea aproximativa NM.
  • Cazul cel mai nefavorabil poate apare, de
    exemplu, la prelucrarea imaginilor binare.
  • In multe aplicatii de prelucrare a textelor,
    bucla interioara se executa rareori si timpul de
    rulare este proportional cu NM.

11
3. Algoritmul Knuth-Morris-Pratt
  • Idee
  • startul fals al identificarii consta din
    caractere deja cunoscute
  • a sir, i index in sir, N
  • p sablon, j index in sablon, M
  • Caz particular primul caracter din sablon nu mai
    apare in sablon i
  • sir 1000001000000 a
  • sablon 1000000 p
  • j
  • nu i i j 1 da nu se modifica i si j
    0

12
Caz general
  • sir 1010100111 a
  • sablon 10100111 p
  • j4
  • i trebuie decrementat. Cu cat?
  • Se poate cunoaste aceasta valoare depinde de
    caracterele din sablon
  • Daca nepotrivirea intre sir si sablon apare pe
    pozitia j in sablon, si
  • Exista un k ? 0, j-1 pentru care
  • p0 ... pk-1 pj-k ... pj-1
  • atunci o posibila identificare intre sir si
    sablon poate apare incepand cu caracterul din sir
    ai-k si caracterul din sablon pj-k.
  • Pt sablon exemplu j 4, k2
  • p0 p2-1 p4-2 p4-1, adica

p0 p1 p2 p3
13
Caz general
  • Trebuie cautat k maxim cu aceasta proprietate.
  • Daca nu exista k cu ac. proprietatea atunci
    cautarea se reia de la pozitia i si j0.
  • Daca exista un astfel de k atunci
  • i i k, j 0 .
  • Se calculeaza valorile unui vector nextj pt ?pj
    ?p (cu M elemente)
  • cu cat trebuie decrementat i la aparitia unei
    nepotriviri pe pozitia j
  • nextj numarul maxim de caratere nr de la
    inceputul sablonului care identifica cu ultimele
    nr caractere din sablon pana la pozitia j-1
    kmax cu proprietatea anterioara

14
Vectorul next
  • 10100111 next4 2
  • j 4 Reluare cautare i i nextj,
    j 0
  • Cum se calculeaza nextj?
  • Metoda informala, legata de implementare
  • Metoda formala, bazata pe modelul formal al unui
    automat finit determinist care recunoaste un
    sablon intr-un sir, pentru un alfabet dat.
  • Se gliseaza o copie a primelor j caractere din
    sablon peste sablon de la stanga la dreapta,
    incapand cu primul caracter din copie suprapus cu
    al doilea caracter din sablon
  • Se opreste glisarea daca (a) toate caracterele
    suprapuse (pana la j-1) coincid sau (b) primul
    caracter al copiei ajunge pe pozitia j.

15
Vectorul next - exemplu
  • j nextj sablon si copie sablon
  •   1 0 10100111 0 potriviri
  • 1
  • 2 0 10100111 0 potriviri
  • 10
  • 10
  • 3 1 10100111
  • 101
  • 101 1 potrivire
  • 4 2 10100111
  • 1010
  • 1010 2 potriviri
  • 5 0 10100111
  • 10100
  • 10100
  • 10100 0 potriviri
  • 10100
  • 6 1 10100111
  • 101001 1 potrivire

16
Vectorul next
  • Caracterele identice definesc urmatorul loc
    posibil in care sablonul se poate identifica cu
    sirul, dupa ce se gaseste o nepotrivire pe
    pozitia j (caracterul pj).
  • Distanta cu care trebuie sa ne intoarcem in sir
    este exact nextj, adica numarul de caractere
    care coincid.
  • Este convenabil next0 -1.
  • Cum facem sa nu ne intoarcem in sir?
  • ai ! pj ? se reia de la i nextj si j
    0
  • Dar primele nextj caractere incepand de la
    pozitia i nextj din sir primele nextj
    caractere din sablon
  • ? i nemodificat si j nextj

17
Exemplu
  • i 4 ar trebui i 2 si j 0
  • sir 1010100111 a
  • sablon 10100111 p
  • j4
  • next4 2
  • acelasi efect daca i nemodificat si j 2
  • sir 1010100111 a
  • sablon 10100111 p

18
Algoritmul Knuth-Morris-Pratt
  • int cautKMP(char p, char a)
  •   int i, j
  • int Mstrlen(p)
  • int Nstrlen(a)
  •  
  • initnext(p)
  • for (i0, j0 jltM iltN i, j)
  • while ((jgt0) (ai ! pj))
  • j nextj
  • if (jM)
  • return i-M
  • else
  • return i
  • Obs Pt. j 0 si ai ! p0 este necesar ca
    i, j 0 deci next0 -1

19
Calculul vectorului next
  • void initnext(char p)
  •   int i,j, Mstrlen(p)
  •  
  • next0 -1
  • for (i0, j-1 iltM i, j, nextij)
  • while ((jgt0) (pi ! pj))
  • jnextj
  • Obs
  • Dupa incrementarile i si j avem pi-j
    pi-1 p0pj-1
  • Identificarea efectueaza maxim MN comparatii de
    caractere

20
Algoritm pentru sablon fix
Caracterele din sirul de intrare total diferite
de cele din sablon sunt citite numai in s0, pe
tranzitia s0 ?p s0, p ?p0. Automatul citeste un
nou caracter de intrare numai pentru tranzitiile
la dreapta, i.e., daca caracterul din sir se
potriveste cu sablonul. Altfel automatul se
intoarce fara a citi un nou caracter (acesta
este motivul pentru care nu sunt etichetate si
tranzitiile la stinga).
21
Algoritm pentru sablon fix
  • int cautKMP1(char a)
  • int i-1
  •  
  • sm i
  • s0 if (ai!1) goto sm i
  • s1 if (ai!0) goto s0 i
  • s2 if (ai!1) goto s0 i
  • s3 if (ai!0) goto s1 i
  • s4 if (ai!0) goto s2 i
  • s5 if (ai!1) goto s0 i
  • s6 if (ai!1) goto s1 i
  • s7 if (ai!1) goto s1 i
  • return i-8

22
Caracteristici KMP
  • Algoritmul KMP presupune precompilarea
    sablonului, ceea ce este justificat daca M N,
    adica textul este considerabil mai lung decat
    sablonul
  • Algoritmul KMP nu decrementeaza indexul din
    sir, proprietate folositoare mai ales pentru
    cautarile pe suport extern
  • Algoritmul KMP da rezultate bune daca o
    nepotrivire a aparut dupa o identificare partiala
    de o anumita lungime. In cazul in care aceste
    situatii sunt o exceptie, algoritmul nu aduce
    imbunatatiri semnificative
  • Algoritmul KMP imbunatateste timpul cazului cel
    mai nefavorabil (NM), dar nu si timpul mediu.

23
4 Algoritmul Boyer-Moore
  • Potrivit daca intoarcerea in text nu este
    dificila
  • UN EXEMPLU DE CAUTARE RAPIDA
  • UTARE
  • UTARE
  • UTARE
  • UTARE
  • UTARE

24
Algoritmul Boyer-Moore
  • Vectorul skip se defineste pentru fiecare
    caracter din alfabet
  • arata, pentru fiecare caracter din alfabet, cat
    de mult se sare (se deplaseaza sablonul la
    dreapta) in sir daca acest caracter a provocat
    nepotrivirea
  • rutina initskip initializeaza skip
  • skipindex(pj) M-j-1, j0,M-1 pentru
    caracterele din sablon
  • skipindex(c) M pentru restul de caractere din
    alfabet

25
Algoritmul Boyer-Moore
  • int caut_BM(char p, chara)
  • int i, j, t
  • int Mstrlen(p), N strlen(a)
  • initskip(p)
  • for (iM-1, jM-1 jgt0 i--, j--)
  • while (ai!pj)
  • t skipindex(ai)
  • i (M-j gt t) ? M-j t
  • if (i gt N) return N
  • j M-1
  •  
  • return i1

26
Algoritmul Boyer-Moore
  • Combinarea a doua metode pentru a afla exact cu
    cat trebuie deplasat la dreapta sirul metoda
    prezentata si metoda vectorului next din
    algoritmul Knuth-Morris-Prat, in varianta de la
    dreapta la stinga, pentru ca apoi sa se aleaga in
    skip cea mai mare valoare.
  • In conditiile acestei modificari, este valabila
    urmatoarea proprietate.
  • Proprietate Algoritmul Boyer-Moore face cel
    mult MN comparatii de caractere si foloseste N/M
    pasi, daca alfabetul nu este mic si sablonul este
    scurt.

27
5. Algoritmul Rabin-Karp
  • Idee
  • Considera textul ca fiind o memorie mare si
    trateaza fiecare secventa de M caractere a
    textului ca o cheie intr-o tabela de dispersie
    (hash).
  • Trebuie sa calculam functia de dispersie pentru
    toate secventele posibile de M caractere
    consecutive din text si sa verificam daca
    valorile obtinute sunt egale cu functia de
    dispersie a sablonului.
  • Artificiu pt. a nu tine toata tabela de dispersie
    in memorie.

28
Calculul functiei hash
  • h(k)k mod q, unde k este numarul de caractere
    din sir, iar q (dimensiunea tabelei) este un
    numar prim mare.
  • q poate fi chiar foarte mare deoarece tabela hash
    nu se stocheaza in memorie
  • Functia de dispersie pentru pozitia i din text se
    calculeaza pe baza valorii acestei functii pentru
    pozitia i-1
  • Se transforma grupuri de M caractere in numere,
    prin impachetare ca reprezentare intr-o anumita
    baza
  • Aceasta corespund la a scrie caracterele ca
    numere in baza d, unde d este numarul de
    caractere posibile din alfabet.

29
Calculul functie hash
  • O secventa de M caractere consecutive
    aiaiM-1 corespunde
  • y aidM-1 ai-1dM-2 aiM-1
  • Presupunem ca stim valoarea lui h(y) y mod q.
  • Deplasarea in text cu o pozitie la dreapta
    corespunde inlocuirii lui y cu
  • y1 (y - aidM-1)d aiM
  • Consideram d32 (sau orice multiplu de 2
    corespunzator)
  • Cum facem sa nu memoram valorile functiei hash
    pentru toate grupurile de M caractere din sir?

30
Calculul functiei hash pt. y1 pe baza lui y
  • Se cunoaste ca
  • (a b) mod q (a mod q b mod q) mod q
  • (a b) mod q (a (b mod q)) mod q
  •  Se doreste sa se arate ca
  • (a0 x a1) mod q ((a0 mod q) x a1) mod
    q
  •  Demonstratie
  • (a0 x a1) mod q ((a0 x) mod q a1 mod
    q) mod q
  • (x (a0 mod q)) mod q a1 mod q mod q
    ((a0 mod q) x a1) mod q
  • Noul sir impachetat y1 se obtine din y astfel
    (slide precedent)
  •   y1 (y - ai dM-1) d aiM
  • Cum se calculeaza y1 mod q pe baza lui y
  • y1 mod q ((y ai dM-1) d
    aiM) mod q
  • ( (y ai dM-1) mod q d aiM) mod q

31
Algoritmul Rabin-Karp
  • int caut_RK(char p, char a)
  • int i long int dM1, h10, h20
  • int Mstrlen(p), Nstrlen(a)
  • for (i1 iltM i) dM (ddM) q
  • // calculeaza d(M-1)mod q in dM
  • for (i0 iltM i)
  • h1 (h1d index(pi))q
  • // functia hash pt sablon
  • h2 (h2d index(ai))q
  • // functia hash pt text
  • for (i0 h1!h2 i)
  • h2 (h2 dq - index(ai)dM)q
  • // dq se adauga pt a mentine expresia gt0
  • h2 (h2 d index(aiM))q
  • if (i gt (N-M)) return N
  • return i

yi1 mod q ( yi d ai1) mod q
y1 mod q ( (y ai dM-1) mod q d
aiM) mod q
32
Caracteristici RK
  • Algoritmul Rabin-Karp are destul de probabil o
    complexitate timp liniara.
  •  Algoritmul are timpul proportional cu NM, dar
    el gaseste doua siruri cu valori de dispersie
    egale.
  • In aceste conditii, trebuie sa comparam sablonul
    cu cele M caractere din sir, pentru cazul
    coliziunilor.
  • Deci, din punct de vedere teoretic, acest
    algoritm ar putea sa fie tot O(NM), in cazul cel
    mai defavorabil, in care toate sabloanele gasite
    ar fi coliziuni ? putin probabil, deoarece q este
    mare in practica, algoritmul foloseste NM pasi.
  • Daca sablonul se cauta de mai multe ori, el
    poate fi considerat o cheie, iar textul poate fi
    organizat in stucturi eficiente de cautare, cum
    ar fi arbori binari, tabele de dispersie, etc.

33
6. Algoritmul deplaseaza-aduna
  • Idee
  • Algoritmul reprezinta starea cautarii ca un
    numar, si fiecare pas in cautare (identificare)
    este descris printr-un numar de operatii
    aritmetice si logice
  • Acest lucru este posibil daca numerele folosite
    sunt suficient de mari pentru a putea reprezenta
    toate starile posibile in cursul rularii

34
Algoritmul deplaseaza-aduna
  • Se poate generaliza usor la urmatoarele cazuri
  • 1. Dont care symbols, deci identificarea cu
    orice caracter pe o pozitie
  • 2. Identificarea cu un caracter dintr-o clasa de
    caractere (un interval)
  • 3. Identificarea cu un caracter din complementul
    unei clase.
  • 4. Identificarea cu un numar dat K de nepotriviri
  • 5. Identificarea mai multor sabloane in paralel.

35
Ipoteze
  • a - sirul (de lungime N) in care se executa
    cautare
  • p - sablonul (de lungime M)
  • i - index in sablon
  • j - index in text
  • Se foloseste un vector cu M componente, care
    reprezinta cele M posibile stari in cautare
    indexul i indica starea intre pozitiile 1i ale
    sablonului si pozitiile (j-i1)j ale textului
  • M comparatoare de siruri care ruleaza in paralel
    si citesc concurent aceeasi pozitie din sir

36
Ipoteze
  • starei - p1pi ? aj-i1 aj
  • sji, i1,M multime de stari dupa citirea
    caracterului j din sir
  • sji numarul de nepotriviri intre
  • p1pi si aj-i1 aj
  • Apare identificare daca

sjM 0
37
Exemplu
sji numarul de nepotriviri intre p1pi si
aj-i1 aj
  • Pozitia j-1 de cautare in text se calculeaza
    sj-1i
  • Sablonul ababc (M5)
  • Sir cbbabababcaba

j-1
38
Exemplu
  • Se avanseaza in text la pozitia j se calculeaza
    sji

j
39
Exemplu
  • Se avanseaza in text la pozitia j se calculeaza
    sji

j
40
Definitii
  • Se defineste Tx pentru ? x ? ?
  • Tix 0 daca pi x, i1,M
  • 1 in caz contrar
  • (prin compararea fiecarui caracter x din alfabet
    cu p0pM)
  • Se observa relatia
  • sji sj-1i-1 Tiaj i1,M
  • Identificarea apare daca sjM 0
  • Cuvant w
  • b biti necesari pentru a reprezenta o stare

41
Definitii
  • Vector de stari reprezentat ca un numar in baza
    2b
  • Pentru identificare exacta b 1
  • sji 0 daca p0..pi aj-i1..aj
  • 1 in caz contrar
  • sjM 0 atunci starej lt 2M-1

42
Definitii
  • Actualizare la citirea unui nou caracter
  • deplasez vect. de stari cu b pozitii la stanga
    avans cu 1 pozitie in text
  • actualizez starile pe baza lui T si fac o
    operatie potrivita
  • starej (starej ltlt b) op Taj
  • Obs Operatia nu trebuie sa produca transport pt.
    sji care sa afecteze sji1
  • Pentru b1 op sau logic

43
Definitii
  • Reprezint T tot ca un numar in baza 2b
  • unde, ? x, ?(cond) 1 daca cond adevarata
  • 0 in caz contrar
  • Exemplu
  • b1, ? a, b, c, d p ababc
  • Ta 11010 Tb 10101
  • Tc 01111 Td 11111
  • starea initiala este 11111

44
Exemplu
  • Sablon ababc
  • Sir a b d
    a b a b a b c
  • Tx 11010 10101 11111 11010 10101
    ..
  • Stare 11110 11101 11111 11110
    11101 .
  • (11111)
  • starej-1 ltlt b Taj starej

45
Algoritmul deplaseaza-aduna
  • define CUVANT 32
  • define B 1
  • define MAXSIM 128
  • In variabila lim vom calcula 2B(M-1)

46
Algoritmul deplaseaza-aduna
  • int caut_shadd(char p,char a)
  •  unsigned int state, lim, first, initial
  • unsigned int TMAXSIM
  • int i, j, matches, Mstrlen(p), Nstrlen(a)
  •   if(MgtCUVINT)
  • printf("\n Error Utilizati dim. sablonltdim.
    cuvint\n")
  • return -1
  •   / preprocesare /
  •   for(i0 iltMAXSIM i) Ti0
  • lim0
  • for(i0,j1 iltM i,jltltB)
  • Tpi j
  • lim j
  • lim (limgtgtB)

47
Algoritmul deplaseaza-aduna - continuare
  • / cautare /
  • matches0 initial 0 firstp0
  • i0
  • while (iltN)
  • while(iltN ai!first) i
  • stateinitial
  • do
  • state(stateltltB) Tai
  • if (stateltlim)
  • matches / identificare pe poz i-M1
    /
  • i
  • while(state!initial)
  • return matches

48
Caracteristici
  • Este nevoie de bM? biti suplimentari de
    memorie si daca bM ? w, atunci este nevoie de
    ? cuvinte de memorie suplimentare.
  • Construirea tabelei T se face intr-un timp
    proportional cu
  • Complexitatea cautarii, pentru cazul cel mai
    nefavorabil si pentru cazul mediu este
  • unde
  • este timpul necesar calculului unui numar
    constant de operatii cu intregi de Mb biti,
    folosind un cuvint de lungime w biti.
  • In practica (sabloane de 32 sa 64 biti), timpul
    mediu si cel mai nefavorabil este O(N).

49
Extinderea algoritmului la identificarea claselor
de sabloane
  • x
  • x1x2xn - clasa
  • x1 sau x1x2xn - complement

50
Extinderea algoritmului la identificarea claselor
de sabloane
  • Exemplu a, b, c, d.
  • Sablonul Aabbbd se potriveste peste
    (sub)sirurile Abaca, abcda, dar nu si peste abbac
    sau ababb.
  • Doua dimensiuni lungimea M a sablonului si
    dimensiunea descrierii sablonului, notata cu M1.

51
Extinderea algoritmului la identificarea claselor
de sabloane
  •  
  • Exemplu a, b, c, d.
  • Sablonul este ababbabc.
  • M 5 si M1 15.
  • Ta 11000 Tb 10011
  • Tc 11101 Td 01101

52
Algoritmul pt calculul lui T
  • valinit ? 111...111 (w biti)
  • for i 1 to M do
  • if pi or pi este un complement
  • then valinit ? valinit 1110i111
  • endfor
  • for i 1 to ? do
  • Txi ? valinit
  • endfor
  • for i 1 to M do
  • foreach x ? pi do
  • if pi este un complement
  • then Tx ? Tx 0001i000
  • else Tx ? Tx 1110i111
  • endforeach
  • endfor

52
53
Implementarea calculului lui T
  • void tinit(char p)
  • unsigned int TMAXSYM, initval, mask1
  • int i0, M0, M1strlen(p)
  • / calculeaza initvallt-initval 111..0i..111 /
  • initval0
  • while(iltM1)
  • M
  • if(pi'')initvalmask
  • else if(pi'')initvalmask
  • while(pi!EOS
  • pi!'') i
  • else if(pi'')
  • while(pi!EOS pi!'')i
  • maskltltBi

53
54
Implementarea calculului lui T - continuare
  • / calculeza Txilt-initval pentru fiecare xi din
    alfabet/
  • for(i0iltMAXSYMi)Tiinitval
  • / Actualizeaza Tx, cu x din sablon /
  • i0 mask1
  • while(iltM1)
  • if(pi'') while(pi!'')
    Tpimask
  • else if(pi'')
  • while(pi!'') Tpimask
  • else Tpimask
  • i maskltltB

54
55
Identificarea cu max k nepotriviri
  • Fiecare stare individuala poate fi reprezentata
    printr-un numar de maxim O(logM) biti.
  • - daca sjM ? k, am gasit o identificare cu
    maximum k nepotriviri
  • - operatorul op este adunarea
  • - Deoarece ne intereseaza numai k nepotriviri,
    este suficient sa alegem
  • b suplog2(k1) 1
  • Problema transportului un bit de transport
    (overflow) pt fiecare stare

55
56
Identificarea cu max k nepotriviri
  • - Obtinerea unei noi stari
  • starej1(starej ltlt b) Txj1
  • - Conditia de identificare cu max k nepotriviri
  • sjM overfj lt (k1) 2b(M-1)
  • Starea initiala se considera 00000, iar
    overflow-ul initial b1 b1b1
  • Cazul
  • Sablonul ababc
  • Alfabetul a, b, c, d
  • T construit anterior
  • k 2, b 3 (b suplog2(k1) 1)

56
57
Exemplu
  • Sablonul ababc
  • Alfabetul a, b, c, d
  • T construit anterior
  • k 2, b 3
  • starea initiala 00000
  • overflow initial 44444

sir a b d a b Tx 11010 10101 11111 11010 10101
stare 11010 20201 13121 02220 32301 overf 44440
44400 44000 40000 00000
sir a b a b c Tx 11010 10101 11010 10101 01111
stare 30020 10301 10020 10301 00121 overf 04000
40000 04000 40000 04000
57
58
Algoritmul pentru max k nepotriviri
  • mask ? 1Mb0012b001b00
  • lim ? (k1) ltlt (M-1)b
  • stare ? 0 overf ? mask
  • for i 1 to N do
  • stare ? (stare ltlt b) Tai
  • overf ? (overf ltlt b) (stare mask)
  • stare ? stare mask
  • if (stareoverf) lt lim
  • then identificare la pozitia i-M1
  • endfor

58
Write a Comment
User Comments (0)
About PowerShow.com