Mai intai trebuie sa te autentifici.
Diferente pentru automate-finite-si-kmp intre reviziile #36 si #44
Nu exista diferente intre titluri.
Diferente intre continut:
h1. Automate finite si KMP
(Categoria _Automate_,autor(i)_VladuAdrian_)
(Categoria _Algoritmi_, Autor _Adrian Vladu_)
In acest articol vom aborda cele mai comune probleme legate de pattern matching si vom oferi suportul teoretic necesar intelegerii algoritmului Knuth-Morris-Pratt, pornind de la potrivirea standard cu automate finite si rafinand-o treptat pana la un algoritm de complexitate {$O(n + m)$}. Toate acestea intr-o maniera usor de inteles ;)
h3. Ce sunt automatele finite ?
Un automat finit este definit ca un cvintuplu {@<@}{$Q, q{~0~}, A, Σ, δ$}{@>@} unde $Q$ este o multime finita de stari {$Q = {q{~0~}, q{~1~}, ... q{~n~}}$}, $q{~0~}$ apartine $Q$ ({$q{~0~}$} = stare initiala), $A$ inclus in $Q$ ({$A$} = multimea starilor de acceptare), $Σ$ este un alfabet, iar functia {$δ : Q xS-> Q$}.
Un automat finit este definit ca un cvintuplu {@<@}{$Q, q{~0~}, A, Σ, δ$}{@>@} unde $Q$ este o multime finita de stari {$Q = {q{~0~}, q{~1~}, ... q{~n~}}$}, $q{~0~}$ apartine $Q$ ({$q{~0~}$} = stare initiala), $A$ inclus in $Q$ ({$A$} = multimea starilor de acceptare), $Σ$ este un alfabet, iar functia {$δ : Q x Σ -> Q$} este functia de tranzitie a automatului.
Aceasta este definitia matematica si foarte abstractizata a automatelor. Pentru a le intelege mai usor, sa luam un exemplu concret
* $k = 2; δ(2, b) = 0;$ * $k = 0; δ(0, a) = 1;$ * $k = 1; δ(1, b) = 1;$
* $k =2; δ(1, a) = 3;$
* $k = 1; δ(1, a) = 3;$
Daca ultima stare obtinuta $q{~k~}$ apartine {$A$}, atunci spunem ca automatul accepta stringul. Altfel spus, daca avem stringul {$s$}, {$lungime(s) = n$}, automatul accepta stringul daca si numai daca $δ( ... δ( δ(0, s{~1~}), s{~2~} ) ..., s{~n~} )$ apartine {$A$}.
== code(c) | n = lungime(N)
m = lungime(M)
q = 0;
pt i <- 1,n
pt i <- 1, m
q = d(q, M[i]) daca q apartine A scrie "potrivire la pozitia " i - n + 1
h2. Teme pentru acasa:
* folosind functia prefix, rafinati constructia automatului finit de acceptare pt un string, aducand-o la complexitatea $O(m^2^ * |Σ|)$
* folosind functia prefix, rafinati constructia automatului finit de acceptare pentru un string, aducand-o la complexitatea $O(m^2^ * |Σ|)$
* problema "Microvirus":http://www.liis.ro/%7ecampion/problems/2/64/microvirus.htm (hint : construiti automatul de potrivire pentru stringul dat) * Timus 1158: "Censored!":http://acm.timus.ru/problem.aspx?space=1&num=1158
Nu exista diferente intre securitate.
Diferente intre topic forum:
3698