Sunteți pe pagina 1din 3

Algoritmi Monte-Carlo

Algoritmii sau metodele Monte-Carlo sunt o clasa de algoritmi care se bazeaza pe aleatorism pt a gasi solutia la anumita problema.Sunt folositi adesea in simulari computerizate din fizica si matematica.In informatica acesti algoritmi sunt utilizati atunci cand nu se cunosc algoritmi deterministi eficienti pentru rezolvarea unei probleme. La ce foloseste aleatorismul ? Sa ne amintim ca in general complexitatea unei probleme este definite luand in considerare cea mai defavorabila instanta a sa.De exemplu, problema comis voiajorului care este NP-completa.Acest lucru nu inseamna ca nu putem rezolva nicio instanta a ei in timp polynomial,ci ca exista instante pentru care algorimii cunoscuti nu au prea mari sanse sa se termine curand. Acest lucru este adevarat si pentru alte clase de algoritmi,de exemplu quicksort are pentru majoritatea vectorilor de intrare o complexitate de O(n logn).Daca insa datele sunt prost distribuite(de exemplu vectorul este deja sortat) acesta face comparatii.Atunci o solutie pentru a evita cazul cel mai nefavorabil ar fi ca datele de intrare sa fie amestecate aleator de la inceput astfel incat probabilitate ca,quicksort sa se afle in cazul cel mai defavorabil O( ) sa fie foarte mica.Acest lucru nu garanteaza ca nu se va ajunge in acest cel mai nefavorabil caz,insa probabilatea ca el sa se intample este redusa. Acesta este un exemplu de folosire a aleatorismului pentru a imbunatatii performanta 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.

Algoritmi Las-Vegas
Evolutia unui algoritm care foloseste nr aleatoare nu depinde numai de datele intrare ci si de nr aleatoare care le genereaza.Daca are noroc algoritmul poate termina repede si bine,daca nu ar putea chiar sa nu ofere solutia corecta.Astfel se ajunge la o noua clasa de algorimi probabilistici numiti algoritmi Las Vegas,care spre deosebire de cei Monte-Carlo,mereu corecti,pot uneori gresi. Vom defini acum algoritmi probabilistic pt probleme de decizie(la care raspunsul este Da sau Nu). Exista 2 clase de alg probabilistici,dar ne concentra atentia numai asupra uneia dintre ele.Vom define totodata clasa problemelor care pot fi rezolvate probabilist in timp polinomial,numite RP(Random Polynomial). Definitie : O problema de decizie este in RP daca exista un alg aleator A care ruleaza intr-un timp polinomial( ,c oarecare) si care are urm proprietati:

Daca raspunsul la o instanta I este Da atunci cu probabilitate p > alg va raspunde Da. Daca raspunsul este Nu atunci cu o probabiltate de 1 alg va raspunde Nu.

Aceasta probabilitate p este data de nr de siruri aleatoare.Astfel atunci cand rulam un algoritm aleator pt o instanata I avem la dispozitie 2^n^c siruri aleatoare de biti;pentru unele din ele raspunsul fiind da,iar pt altele nu.Pentru a calcula p-ul in cazul in care raspunsul da numaram sirurile pt care alg raspunde afirmativ si impartim acest numar la 2^n^c.Pentru celalalt caz luam opusul. O tehnica pentru a scadea probabilatea de a gresi este de a rula respectivul algoritm de mai multe ori pe aceeasi date de intrare.Astfel daca executam de 2 ori algorimul,in cazul care raspunsul este nu probabilitatea de a gresi ramine 0 .Pe de alt parte, ajunge ca algoritmul s rspund mcar odat ``da'' pentru a ti c rspunsul este ``da'' cu siguranta! Din cauza asta, dac probabilitatea de eroare este p pentru algoritm, executindu-l de k ori probabilitatea coboara la pk (nu uitati ca p este subunitar, ba chiar sub 1/2). Aceasta metoda se numeste ``boost'' in engleza, si face dintr-un algoritm probabilist slab ca discriminare o unealta extrem de puternica! Pentru a scadea probabilitatea de eroare a unui algoritm care poate gresi cu probabilitatea p pina sub o limita dorita s,se procedeaz astfel:
raspuns := nu probabilitate := 1 p := 0.5 while(raspuns = nu && probabilitate > s) raspuns = executa(algoritm) probabilitate := probabilitate * p

Exista doua tipuri de algoritmi Monte-Carlo : pozitivi si negative.Primul tip de algoritmi furnizeza raspunsul correct pentru cazul afirmativ si poate gresi pe cazul negativ,iar celalalt tip este opusul. Iata si o aplicatie a acestor algoritmi :

Algoritmul Miller-Rabin
Algoritmul Miller-Rabin cunoscut si sub numele de testul de tare pseudo-primalitate Miller-Rabin este un algoritm probabilistic eficient care determina daca un nr este sau nu prim.Are urmatoarea structura: Se da un nr impar n > 3 care urmeaza sa fie testat si un nr k care determina acurateatestul(numarul de rulari ale testului) si se cere daca n este prim sau nu. 1. Se descompune n = 2^k*m+1,unde m este impar

2. Se alege aleator un intreg a 3. b a^m(mod n) 4. if b

[2,n-2]

(mod n) then n este prim,Stop

5. for i 0 to k-1 do 6. if b (mod n) then n este prim,Stop else b b^2 (mod n) 7. n nu este prim. Stop