Documente Academic
Documente Profesional
Documente Cultură
Fiierul conine fragmente revzute i adugite din capitolul 3 din "Introducere n Analiza Algoritmilor".
De asemenea, convenim ca spaiul ocupat de datele nemodificate de un algoritm, de obicei datele de intrare, s nu participe n calculul complexitii spaiale a algoritmului. Decizia este justificat dac ne gndim c unul din scopurile analizei complexitii este clasificarea problemelor n raport cu resursele consumate. Ar fi nepotrivit s considerm c rezolvarea unei probleme Q1 este mai dificil dect cea a unei alte probleme Q2 doar pentru c dimensiunea datelor lui Q1 este mai mare dect dimensiunea datelor lui Q2. Din alt punct de vedere, astfel de date read-only pot fi stocate n "afara" algoritmului.
unde n=dim(i) este dimensiunea datelor i, timp(Alg,i) este timpul consumat de calculul serial Alg(i), iar spaiu(Alg,i) este spaiul maxim de lucru consumat n cursul execuiei Alg(i). Mai precis, s notm:
stri(Alg,i) strile din secvena execuiei Alg(i). Fiecare stare este asociat cu un moment de timp t al execuiei i desemneaz mulimea variabilelor existente la momentul t al execuiei precum i instruciunea curent executat. spaiu_stare(s) spaiul consumat de variabilele din starea s, excluznd datele nemodificabile ale algoritmului.
Mulimea Alg Q (f) conine acei algoritmi determiniti care rezolv problema Q n
(f(n)) uniti de timp, iar Alg Q (f) conine acei algoritmi determiniti care rezolv
S
problema Q folosind (f(n)) uniti de spaiu de lucru. Definiia 3.26 Fie f:R+ o funcie total peste . Clasele de probleme rezolvabile prin algoritmi determiniti, cu limitare f, temporal i, respectiv, spaial sunt:
TIME(f) =def {Q | Alg Q (f) } SPACE(f)=def {Q | Alg Q (f) }
S T
n particular,
P = PTIME =def PSPACE =def
k 0
( n.nk) ! TIME
k 0
SPACE (n.nk )
Clase de probleme
Ca exemplu, s clasificm problema GAP (Problema Accesibilitii ntr-un Graf). Pentru un graf G cu n noduri s se decid existena unui drum ntre dou noduri date, i i j, din G. Propoziia 3.11 GAPSPACE(lg(n)2) i GAPTIME(n2) (sau GAPPTIME). 1. GAPSPACE(lg(n)2). S construim un algoritm care rezolv problema ntrun spaiu de lucru (lg(n)2)
GAP_S(G,i,j) { // G are nodurile V(G) i arcele E(G). // Exist drum i..j n G? n = card(V(G)); for(lung=0; lung < n; lung++) if(drum(i,j,lung)) return 1; // G i n sunt vizibile n funcia drum return 0; } drum(i,j,lung){ if(lung = 0) return i=j ? 1 : 0; if(lung = 1) return (i,j)E(G); l1= lung/2; l2= lung/2; for(k = 1; k n; k++) if(drum(i,k,l1) drum(k,j,l2))) return 1; return 0; }
Algoritmul drum ncearc s formeze drumul i..j din drumurile i..k i k..j, pe jumtate mai scurte ca numr de arce dect drumul i..j. Procesul este repetat pn ce lungimea unui drum devine 0 sau 1. Corectitudinea algoritmului deriv din urmtoarea observaie: un drum x..y de lungime l exist dac i numai dac este satisfcut una din condiiile:
l = 0 i x = y; l = 1 i (x,y) este un arc al grafului; l >1 i exist drumurile x..z de lungime l/2 i z..y de lungime l/2 .
Spaiul consumat de algoritmul drum este (lg(n)2). ntr-adevr, lungimea maxim a lanului de apelurilor recursive este limitat la lg(n), iar fiecare apel consum spaiu pentru 6 variabile i spaiu pentru nregistrarea de activare a apelului. Deoarece se lucreaz cu ntregi de valoare cel mult n, spaiul consumat la apelul k este k (lg(n)) bii, astfel nct la apelul lg(n) se consum (lg(n))2 bii. n partea GAP_S a algoritmului, datele G, i i j nu contribuie la complexitatea spaial, fiind read-only. Se adaug doar spaiul consumat de variabilele n i lung i de apelul drum(i,j,n), anume (lg(n)) bii. Spaiul folosit de ntregul algoritm este (lg(n)+lg(n)2) = (lg(n)2). Deci GAP SPACE(lg(n)2).
Cristian Giumale, Note de curs 2. GAPTIME(n2). S construim un algoritm care rezolv GAP n timp (n2).
Estimarea timpului cheltuit de algoritmul GAP_S folosete recurena T(l)2n T(l/2)+(n) pentru calculul timpului consumat de apelul drum(i,j,l), considernd c operaia (i,j)E(G) este n (1). Soluia recurenei este (l nlg(l)), astfel nct timpul consumat de GAP_S este (nlg(n)+2). Problema poate fi ns rezolvat mai rapid, parcurgnd graful n adncime.
GAP_T(G,i,j){ // G are nodurile V(G) i arcele E(G). // Exist drum i..j n G? for-each(uV(G)) stare(u)=nevizitat; explorare(i); return stare(j)=vizitat ? 1 : 0; } explorare(u){ stare(u)=vizitat; for-each((u,v)E(G)) if(stare(v)=nevizitat) explorare(v); }
Algoritmul GAP_T parcurge graful n adncime, ncepnd din nodul i. Nodurile vizitate sunt marcate, evitndu-se ciclurile. Rezultatul este decis de marca nodului j. Lanul apelurilor recursive ale algoritmului explorare este (n), iar fiecare apel consum un spaiu de memorie (lg(n)). Spaiul total consumat de algoritm este (n lg(n)), mai mare dect cel al algoritmului GAP_S. n schimb, timpul consumat este (n2). Deci GAPTIME(n2) i, totodat, GAPPIME. !
Clase de probleme
stri(d) strile (nodurile) de pe o cale dci(N_Alg,i). Fiecare stare s din stri(d) este asociat unui moment de timp t al execuiei seriale a cii d i desemneaz mulimea variabilelor existente la momentul t al acestei execuii
Definiia 3.27 Fie Alg un algoritm nedeterminist. Timpul i, respectiv, spaiul consumate de algoritmul Alg pentru datele i astfel nct Q(i)=1 (problema are soluie, iar ci(N_Alg,i)) sunt:
N_timp(N_Alg,i) = min {d ci(N_Alg,i) timp_cale(d)}, N_spaiu(N_Alg,i) = min {d ci(N_Alg,i) spaiu_cale(d)} spaiu_cale(d) = max {sstri(d) spaiu_stare(s)}
Se remarc perspectiva angelic a msurrii resurselor consumate de algoritm pentru datele i: timpul celei mai rapide ci s0..sti,sf, i=1,r, din G(i) i spaiul minim dintre cele maxime consumate de cile s0.. sti,sf, dei spaiul total poate fi mult mai mare. Timpul i spaiul angelic se sprijin pe interpretarea execuiei unui algoritm nedeterminist conform creia algoritmul ghicete calea cea mai rapid sau cu consum minim de spaiu ctre soluie. Msura angelic a timpului i spaiului consumate de un algoritm nedeterminist este suficient pentru a caracteriza performana algoritmului n orice situaie. ntradevr, dac timpul i spaiul rezolvrii n cazul Q(i)=1 este limitat de o funcie f(n), n=dim(i), astfel nct N_timp(N_Alg,i)k f(n) i N_spaiu(N_Alg,i)k' f(n), k i k' constante, atunci orice depire a timpului k f(n) sau a spaiului k' f(n) poate opri execuia Alg(i), rezultatul fiind 0 n mod sigur, ca n figura 3.14.
Depire timp angelic, oprire cu rezultat 0.
sti s0
str
N_timp(N_alg,i)
Ca i n cazul algoritmilor determiniti putem s definim clase de algoritmi cu complexitate impus. Fie Q:I{0,1} o problem de decizie, rezolvabil prin mulimea algoritmilor nedeterminiti N_AlgQ, i f:R+ o funcie total peste . Notm:
N_ Alg Q (f)= {AlgN_AlgQ,iI | Q(i)=1 N_timp(Alg,i)=(f(n))}, N_ Alg Q (f)= {AlgN_AlgQ,iI | Q(i)=1 N_spaiu(Alg,i)=(f(n))},
S T
unde n=dim(i) este dimensiunea datelor i. Mulimea N_ Alg Q (f) conine acei algoritmi nedeterminiti care rezolv problema Q n (f(n)) uniti de timp, iar
N_ Alg Q (f) conine acei algoritmi nedeterminiti care rezolv problema Q folosind (f(n)) uniti de spaiu de memorie.
S
Definiia 3.28 Fie f:R+ o funcie total peste . Clasele de probleme rezolvabile prin algoritmi nedeterminiti cu limitare f, temporal i, respectiv, spaial sunt:
NTIME(f) =def {Q | N_ Alg Q (f) } NSPACE(f)=def {Q | N_ Alg Q (f) }
S T
n particular,
NP = NPTIME =def NPSPACE =def
k 0
(n.nk ) ! NTIME
k 0
(n.nk ) ! NSPACE
unde n.R(n) desemneaz o funcie cu parametrul n i rezultatul R(n). Ca exemplu, s reconsiderm problema GAP, dar rezolvat folosind un algoritm nedeterminist. Propoziia 3.12 GAP NLOGSPACE i GAP NPTIME. Construim algoritmul nedeterminist N_GAP de mai jos i artm c are complexitate spaial (lg(n)) i complexitate temporal (n).
N_GAP(G,i,j) { // G are nodurile V(G) i arcele E(G). // Exist drum i..j n G? n = card(V(G)); u = i; lung = 0; while(u j) { v = choice(V(G)); lung++; // lungime drum (numr arce) if((u,v)E(G) lung n) fail; u = v; } success; }
Clase de probleme
1. GAPNLOGSPACE. Fiecare stare a algoritmului conine doar patru variabile, anume n, lung, u i v, care contribuie la consumul de spaiu al algoritmului (variabilele G, i i j sunt read-only). ntr-adevr, prin efectul instruciunii choice, sunt construite noi copii ale algoritmului, incluznd variabilele folosite. Astfel, pot exista mai multe copii ale algoritmului funcionnd simultan, dar fiecare copie conine doar patru variabile care consum spaiu. Pentru c numerele cu care se lucreaz au valoare cel mult n, spaiul de memorie folosit este (lg(n)). 2. GAPNPTIME. Pentru c un drum n spaiul strilor algoritmului corespunde unui drum n graful G, iar lungimea drumurilor explorate n G este limitat la n, algoritmul se oprete n (n). Cu importan marginal, putem observa c N_GAP se termin imediat ce drumul cel mai scurt i..j din G este gsit. Un astfel de drum nu poate conine cicluri, deci este drum simplu. !
Un algoritm determinist, fie el Alg, poate fi considerat nedeterminist, avnd o singur cale n spaiul strilor. Deci dac Alg are complexitate (f(n)) nseamn c, implicit, exist un algoritm nedeterminist cu aceeai complexitate. Prin urmare,
Alg Q (f)N_ Alg Q (f) i Alg Q (f)N_ Alg Q (f) pentru orice problem Q. !
T T S S
Corolarul 3.3
Incluziunile deriv din definiiile (3.26), (3.28) i din teorema (3.12). ! Se demonstreaz c:
LOGSPACE NLOGSPACE PTIME NPTIME PSPACE = NPSPACE.
De asemenea, se poate generaliza conceptul de completitudine i duritate pentru diversele clase de complexitate. Aceste probleme depesc obiectivul cursului.