Professional Documents
Culture Documents
Cu alte cuvinte, putem spune: ``problema asta nu se poate face mai repede de f, i noi
tim s-o rezolvm n g''. Dar care este complexitatea real, i care este algoritmul care
rezolv problema optim, asta foarte rar se poate spune.
Pentru o problem att de banal ca nmulirea a dou numere, considernd numerele
scrise n baza 2, iar mrimea lor numrul total de bii n, complexitatea celui mai bun
algoritm de nmulire cunoscut este de O(n log n log log n), dar limita inferioar dovedit
este de n. Sau pentru nmulirea a dou matrici de n*n elemente: se gsesc ncontinuu
algoritmi din ce n ce mai buni (asimptotic vorbind), dar limita inferioar de n2 este nc
departe de cel mai bun (i foarte sofisticat algoritm), care este aproximativ O(n2,3)
(comparai cu algoritmul ``naiv'' imediat, care este O(n3)).
Proiectarea algoritmilor
Decizia se poate face numai ntr-un timp exponenial n lungimea formulei (pentru
anumite instane), dar demonstraia nu este de loc simpl.
(Ca o curiozitate: exist i probleme cu o complexitate ``ne-elementar'', care este mai
mare dect complexitatea oricrei probleme exponeniale. O astfel de problem este cea
de decizie a adevrului unei formule n teoria numit S1S, sau ``teoria monadic a
succesorilor de ordinul 2''. Nu v lsai intimidai de terminologie: aceasta este practic o
teorie logic peste numerele naturale, n care avem voie s scriem formule cu
cuantificatori i conectori logici, ca mai sus, dar avem i dreptul s cuantificm peste
mulimi. Complexitatea deciziei unei formule logice ntr-o astfel de teorie este mai mare
.. n
2
dect 2{
pentru orice k natural!)
k
Proiectarea algoritmilor
Astfel, un algoritm nedeterminist care caut ieirea dintr-un labirint ar arta cam aa:
do not iesire(pozitie_curenta) ->
if not perete(nord(pozitie_curenta)) ->
pozitie_curenta := nord(pozitie_curenta)
[] not perete(est(pozitie_curenta)) ->
pozitie_curenta := est(pozitie_curenta)
[] not perete(sud(pozitie_curenta)) ->
pozitie_curenta := sud(pozitie_curenta)
[] not perete(vest(pozitie_curenta)) ->
pozitie_curenta := vest(pozitie_curenta)
fi
od
Pe scurt algoritmul se comport astfel: dac la nord nu e perete mergi ncolo, sau, poate,
dac la sud e liber, mergi ncolo, sau la est, sau la vest. n care dintre direcii, nu se
precizeaz (este ne-determinat). Este clar c dac exist o ieire la care se poate ajunge,
exist i o suit de aplicri ale acestor reguli care duce la ieire.
Utilitatea practic a unui astfel de algoritm nu este imediat aparent: n definitiv pare s
nu spun nimic util: soluia este fie spre sud, fie spre nord, fie spre este, fie spre vest. Ei
i? Este clar c aceti algoritmi nu sunt direct implementabili pe un calculator real.
n realitate existena un astfel de algoritm deja nseamn destul de mult. nseamn n
primul rnd c problema se poate rezolva algoritmic; v reamintesc c exist probleme
care nu se pot rezolva deloc.
n al doilea rnd, se poate arta c fiecare algoritm nedeterminist se poate transforma ntrunul determinist ntr-un mod automat. Deci de ndat ce tim s rezolvm o problem
ntr-un mod nedeterminist, putem s o rezolvm i determinist! Transformarea este relativ
simpl: ncercm s mergem pe toate drumurile posibile n paralel, pe fiecare cte un pas.
(O astfel de tehnic aplicat n cazul labirintului se transform n ceea ce se cheam
``flood fill'': evoluez radial de la poziia de plecare n toate direciile).
Clasa tuturor problemelor care se pot rezolva cu algoritmi nedeterminiti ntr-un timp
polinomial se noteaz cu NP (Nedeterminist Polinomial). Este clar c orice problem care
se afl n P se afl i n NP, pentru c algoritmii determiniti sunt doar un caz extrem al
celor determiniti: n fiecare moment au o singur alegere posibil.
Din pcate transformarea ntr-un algoritm determinist se face pierznd din eficien. n
general un algoritm care opereaz n timp nedeterminist polinomial (NP) poate fi
transformat cu uurin ntr-un algoritm care merge n timp exponenial (EXP). Avem
deci o incluziune de mulimi ntre problemele de decizie: P NP EXP.
Partea cea mai interesant este urmtoarea: tim cu certitudine c P EXP. ns nu avem
nici o idee despre relaia de egalitate ntre NP i P sau ntre NP i EXP. Nu exist nici o
demonstraie care s infirme c problemele din NP au algoritmi eficieni, determinist
Proiectarea algoritmilor
polinomiali! Problema P=NP este cea mai important problem din teoria calculatoarelor,
pentru c de soluionarea ei se leag o grmad de consecine importante.
Problema aceasta este extrem de important pentru ntreaga matematic, pentru c nsi
demonstrarea teoremelor este un proces care ncearc s verifice algoritmic o formul
logic (cum am vzut mai sus de pild); teoremele la care exist demonstraii ``scurte''
pot fi asimilate cu problemele din mulimea NP (la fiecare pas dintr-o demonstraie
putem aplica mai multe metode de inferen, n mod nedeterminist; un algoritm trebuie s
ghiceasc niruirea de metode aplicate pentru demonstrarea enunului); dac orice
problem din NP este i n P, atunci putem automatiza o mare parte din demonstrarea de
teoreme n mod eficient!
Problema P=NP este foarte important pentru criptografie: decriptarea este o problem
din NP (cel care tie cheia tie un algoritm determinist polinomial de decriptare, dar cel
care nu o tie are n faa o problem pe care nedeterminist o poate rezolva n timp
polinomial). Dac s-ar demonstra c P=NP acest lucru ar avea consecine extrem de
importante, iar CIA si KGB ar fi ntr-o situaie destul de proast, pentru c toate schemele
lor de criptare ar putea fi sparte n timp polinomial (asta nu nseamn neaprat foarte
repede, dar oricum, mult mai repede dect timp exponenial)!
Mai mult, n 1971 Cook a demonstrat c exist o problem special n NP (adic pentru
care se poate da un algoritm eficient nedeterminist), numit problema satisfiabilitii
(notat cu SAT). Problema este foarte simpl: dac se d o formul boolean care
cuprinde mai multe variabile, poate fi formula fcut adevrat dnd anumite valori
variabilelor? De pild formula:
devine adevrat pentru x1=adevrat i x2 arbitrar. SAT este foarte important, pentru c
Cook a demonstrat c dac SAT poate fi rezolvat n P (adic folosind un algoritm
determinist polinomial), atunci orice problem din NP poate fi rezolvat n timp
polinomial! Problema satisfiabilitii este cumva ``cea mai grea problem'' din NP, pentru
c rezolvarea oricrei alte probleme din NP se poate face ``mai repede'' dect a ei. Din
cauza asta SAT se numete o problem NP-complet.
De la Cook ncoace s-au mai descoperit cteva sute de probleme NP-complete. Unele
probleme care se ivesc foarte adesea n practic s-au dovedit NP-complete! Acesta este
un alt motiv pentru care clasa att de abstract NP a problemelor cu algoritmi
nedeterminiti este att de important: foarte multe probleme practice au algoritmi
polinomiali nedeterminiti, dar cei mai buni algoritmi determiniti iau un timp
exponenial!
Proiectarea algoritmilor
Algoritmi aproximativi
n seciunile care urmeaz folosim tot timpul premiza nedemonstrat c P NP. Dac
P=NP, atunci problemele pe care ne batem capul s le rezolvm prin metode ciudate pot
fi de fapt rezolvate exact i eficient, aa c restul articolului cade i nu se mai ridic.
Optim i aproximare
Foarte multe probleme de optimizare se dovedesc a fi NP-complete3: probleme n care
vrem s calculm maximumul sau minimumul a ceva. Bine, dar dac de fapt m
mulumesc s obin o valoare care nu este chiar optim, dar este ``suficient de aproape''?
Poate n acest caz complexitatea problemei poate fi redus, i sunt n stare s scriu un
algoritm eficient... (polinomial). Avem deci de a face cu un compromis:
solutie optima;
solutie sub-optima:
<-------------->
algoritm NP sau
algoritm exponential
algoritm polinomial
Proiectarea algoritmilor
Proiectarea algoritmilor
reale sunt foarte rar complet uniform distribuite). O soluie paradoxal const n a
amesteca aleator vectorul nainte de a-l sorta.
Complexitatea medie (average case) a lui quicksort este O(n log n). Complexitatea n
cazul cel mai ru (worst case) este O(n2). Dac datele vin distribuite cu probabilitate mare
n zona ``rea'', atunci amestecndu-le putem transforma instane care pic n zona ``worstcase'' n instane de tip ``average-case''. Firete, asta nu nseamn ca nu putem avea
ghinion, i ca amestecarea s produc tot o instan ``rea'', dar probabilitatea ca acest
lucru s se ntmple este foarte mic, pentru c quicksort are puine instane rele5.
Acesta este un caz de folosire a aleatorului pentru a mbunti performana medie a unui
algoritm.
Cteodat ctigul este i mai mare, pentru c putem rezolva probleme NP-complete
foarte rapid folosind aleatorismul. De obicei avem ns un pre de pltit. Cnd folosim
algoritmi din clasa prezentat mai jos, putem risca s nu primim rspunsul corect.
Dac rspunsul la o instan I este ``Da'', atunci cu o probabilitate mai mare de 1/2
algoritmul va rspunde ``Da''.
Proiectarea algoritmilor
De cine este dat ``probabilitatea'' de mai sus? De numrul de iruri aleatoare. Cnd
rulm un algoritm aleator pentru o instan I avem la dispoziie 2nc iruri aleatoare de bii;
pentru unele dintre ele algoritmul rspunde ``Da'', pentru celelalte rspunde ``Nu''. Ceea
ce facem este s numrm pentru cte iruri algoritmul ar rspunde ``da'' i s facem
raportul cu 2nc. Aceasta este probabilitatea ca algoritmul s rspund ``da''. Opusul ei este
probabilitatea s rspund ``nu''.
O tehnic foarte simpl de amplificare poate crete nedefinit aceast probabilitate: dac
executm algoritmul de 2 ori pe aceleai date de intrare, probabilitatea de a grei pentru
rspunsuri ``nu'' rmne 0. Pe de alt parte, ajunge ca algoritmul s rspund mcar odat
``da'' pentru a ti c rspunsul este ``da'' cu siguran! Din cauza asta, dac probabilitatea
de eroare este p pentru algoritm, executnd de k ori probabilitatea coboar la pk (nu uitai
ca p este subunitar, ba chiar sub 1/2). Aceast metod se numete ``boost'' n englez, i
face dintr-un algoritm probabilist slab ca discriminare o scul extrem de puternic!
Pentru a scdea probabilitatea de eroare a unui algoritm care poate grei cu probabilitatea
p pn sub o limit dorit siguranta, se procedeaz astfel:
raspuns, probabilitate = nu, 1
do (raspuns = nu) and (probabilitate > siguranta) ->
raspuns, probabilitate := executa(algoritm), probabilitate * p
od
De aici rezult c:
Proiectarea algoritmilor
Pentru polinomul de mai sus gradul este n, i putem alege pentru K de exemplu Zp, unde
p este un numr prim relativ mare n raport cu n (de dou ori mai mare ajunge!).
Alegnd arbitrar numerele v1, v2, ..., vn n Zp i evalund q(v1, v2, ..., vn) mod p, putem
imediat afirma cu probabilitate mare > 1 - n/p despre q dac este nul sau nu! Observai c
evaluarea polinomului nu este prea costisitoare, putndu-se face n timp polinomial n
lungimea expresiei care descrie polinomul.
Folosind metoda de ``boost'' putem crete rapid sigurana noastr despre rezultatul
algoritmului.
Izomorfismul arborilor
Iat i o aplicaie imediat a acestei proprieti.
Se dau doi arbori, cu rdcina precizat. Sunt aceti doi arbori ``izomorfi'' (identici prin
re-ordonarea fiilor)? Aceast problem este surprinztor de dificil pentru un algoritm
determinist (am impresia chiar c este NP-complet). Iat ns o soluie aproape imediat:
construim pentru fiecare arbore cte un polinom care nu depinde de ordinea fiilor unui
nod, n aa fel nct dac i numai dac arborii sunt izomorfi polinoamele sunt egale.
Apoi pur i simplu testm ca mai sus dac polinomul diferen este nul.
O metod de a asocia recursiv un polinom unui arbore este de pild urmtoarea: fiecrui
nod i asociem o variabil xk, unde k este nlimea nodului (distana pn la cea mai
deprtat frunz). Frunzele vor avea toate asociate variabila x0. Apoi asociem nodului v
de nlime k cu fii v1, ... vl polinomul fv = (xk - fv1) (xk - fv2) ... (xk - fvl). Se arat uor c
polinoamele sunt egale pentru arbori izomorfi, bazndu-ne pe unicitatea descompunerii n
factori a unui polinom. Gradul polinomului asociat unui nod este egal cu suma gradelor
fiilor, care la rndul ei este egal cu numrul de frunze care se afl sub acel nod (cum se
demonstreaz imediat prin inducie dup nlime). i asta-i tot!
Pentru a ncheia seciunea, s observm c singurul algoritm eficient cunoscut pentru a
verifica primalitatea unui numr este tot probabilist7! Pentru c numerele prime mari stau
la baza criptografiei cu cheie public n sistemul RSA (probabil cel mai rspndit la ora
actual), iat c unele dintre cele mai importante aplicaii se bazeaz indirect pe algoritmi
probabiliti. Nimeni nu va putea obiecta asupra utilitii lor!
Algoritmi on-line
Adesea trebuie luate decizii cu informaii incomplete. Un caz particular este luarea de
decizii pe msur ce datele devin disponibile. Deciziile afecteaz viitorul, dar sunt luate
Proiectarea algoritmilor
Problema schiorului
Se pune problema: ce este mai bine: s nchiriezi sau s cumperi schiuri? (Vom
presupune c preul schiurilor este constant de-a lungul timpului, ca s simplificm
problema). Dilema const din faptul c n fiecare sezon, nu tii dac te vei mai duce
odat. Dac le cumperi i nu te mai duci, ai dat banii degeaba. Dac le tot nchiriezi i te
duci des, s-ar putea s le plteti de mai multe ori. Totui, trebuie s iei o decizie. Pe
care?
Exist un rspuns foarte simplu, care promite nu c d rezultatul cel mai ieftin n orice
circumstan, ci doar c nu vei cheltui de dou ori mai mult dect n cazul n care ai face
decizia perfect (decizia perfect este cea care tie precis dac te vei mai duce, i de cte
ori; ea nu este accesibil dect ``post-factum'', deci este pur teoretic).
Algoritmul este: nchiriezi schiuri pn ai dat pe chirie costul schiurilor. Dup aceea dac
mai vrei s mergi le cumperi. Voi demonstra rapid c n felul sta orice s-ar ntmpla nu
pierzi mai mult de jumate din banii pe care i-ai fi cheltuit n cazul ideal.
Avem 3 posibiliti:
1. Te opreti nainte de a le cumpra: n cazul sta ai jucat perfect, pentru c ai schiat
i nu puteai iei mai ieftin nicicum;
2. Te opreti imediat dup ce le-ai cumprat. n cazul sta ai dat de dou ori preul
(odat pe nchirieri, i odat pe cumprare), dar ai schiat ct ai fi putut schia dnd
numai odat preul (mai ieftin de odat nu puteai iei);
3. Te opreti mai trziu: n cazul sta cel mai ieftin era tot s le cumperi din prima zi,
deci iar ai cheltuit dublu.
Orice alt schem foloseti pentru a decide cumprarea, exist un scenariu n care poi
cheltui mai mult de dublu fa de optim.
Algoritmii on-line apar foarte natural ntr-o mulime de situaii: de exemplu n reele de
calculatoare, algoritmii care decid traseul unui pachet cu informaii sunt algoritmi online; dac decid trasee proaste, reeaua poate deveni supra-aglomerat n viitor; astfel de
algoritmi nu au idee despre cererile viitoare, aa c acioneaz cu informaie incomplet.
Un alt exemplu este n sistemele de operare: algoritmii dup care cache-urile (sau
sistemele de memorie virtual) aleg paginile care trebuie nlocuite. Alegerea aceasta nu
poate fi optim n absena informaiilor despre viitoarele cereri. Cu toate acestea, anumite
alegeri sunt mai bune dect altele.
Un al treilea exemplu, tot din contextul sistemelor de operare, este al algoritmilor de
planificare, care trebuie s stabileasc n ce moment se execut fiecare proces pe un
10
Proiectarea algoritmilor
calculator (paralel). Acolo unde minutul de rulare cost o grmad de bani, deciziile
trebuie s risipeasc ct mai puin timp. ns job-uri pentru prelucrare sosesc dinamic, aa
c algoritmii trebuie s fac fa unui mediu n continu schimbare.
Algoritmii on-line sunt n general analizai comparndu-i cu algoritmii off-line, care ar
avea nainte de a face deciziile informaii perfecte despre toate cererile viitoare. Este clar
c informaia aceasta este un mare avantaj, aa c n general algoritmii on-line au
performane mult mai proaste dect cei corespunztori off-line.
Cercetrile n acest domeniu sunt doar la nceput; se exploreaz i variante de algoritmi
hibrizi on/off-line, n care algoritmul are o idee despre viitor, dar nu neaprat o vedere
complet. Asta nu face ntotdeauna sarcina algoritmului mai simpl, pentru c adesea
problema cu informaie complet este NP-complet...
Rezumat
n acest articol relev succint o mulime de probleme fascinante. Iat recapitulate sumar
conceptele eseniale ntlnite:
11
Proiectarea algoritmilor
Footnotes
...
Mai exact
.
2
... egale
Problema este ntr-adevr NP-complet, dac socotim ca mrime de intrare
lungimea tuturor numerelor n bii; altfel exist un algoritm de programare
dinamic de complexitate S n, unde S este suma numerelor, iar n este numrul de
numere. Observai ns c S este exponenial n lungimea numerelor.
... NP-complete3
Cititorul atent va observa c noiunea de NP-completitudine a fost definit numai
pentru probleme de decizie: cu rspuns Da/Nu, pe cnd problemele de optimizare
au n general un rspuns numeric; cititorul poate ns s fie linitit, pentru c
putem re-formula o problem de optimizare ca o problem de decizie: n loc de
``care este drumul minim?'', ntrebm ``nu-i aa c exist un drum mai scurt de
100?''.
... grafuri4
O cuplare este un set de muchii care nu are vrfuri comune, iar o cuplare
maximal este una care are un numr maxim de muchii.
... rele5
Numrul de instane rele poate fi estimat din distribuia variabilei aleatoare
complexitate, i este ntr-adevr mic.
6
... corp
Aceasta este Teorema Lipton-Schwartz-Zippel: fie S Ko submulime a unui
corp K, iar q( x ) un polinom de n variabile de grad d cu coeficieni n K. Atunci
ecuaia q( x ) =0 are cel mult d |S|n-1 soluii n S.
... probabilist7
Aa se genereaz numere prime: se genereaz un numr aleator i se verific
primalitatea cu un astfel de algoritm.
12