Documente Academic
Documente Profesional
Documente Cultură
randomizați
Autor:
Creangă Răzvan – Marian
1
Cuprins:
Definiție și Clasificare ................................................................................................................................. 3
I) Algoritmi de tip Monte Carlo ................................................................................................................... 3
II) Algoritmi de tip Las Vegas ..................................................................................................................... 6
III) Avantaje ................................................................................................................................................. 7
IV) Dezavantaje ............................................................................................................................................ 8
V) Rolul proiectului: .................................................................................................................................... 8
Bibliografie: ................................................................................................................................................. 9
2
Definiție și Clasificare
3
Acesta este un exemplu de folosire a aleatorismului pentru a îmbunătății performanta
medie a unui algoritm. Câteodată câștigul este și mai mare, pentru că putem rezolva probleme
NP-complete foarte rapid folosind aleatorismul. De obicei avem însă un preț de plătit. Când
folosim algoritmi din clasa prezentat mai jos, putem risca să nu primim răspunsul corect.
Un exemplu de problemă în care se poate utiliza un algoritm de tip Monte Carlo poate fi
aproximarea valorii lui PI după cum urmează:
Ideea este să generăm două puncte random (x și y) într-un plan 2D ce are ca domeniu un
pătrat cu dimensiunea de o unitate. Să ne imaginăm un cerc de aceeași dimensiune, înscris în
pătratul inițial. Trebuie să calculam raportul dintre numărul punctelor generate în interiorul
cercului și numărul total de puncte generate. Pentru o mai buna înțelegere a ideii, se poate
observa Figura 1.
Figura 1
4
#include <iostream>
int main()
{
int interval, i;
double rand_x, rand_y, origin_dist, pi;
int circle_points = 0, square_points = 0;
// Initializing rand()
srand(time(NULL));
5
// estimated pi after this iteration
pi = double(4 * circle_points) / square_points;
return 0;
}
Evoluția unui algoritm care folosește numere aleatoare nu depinde numai de datele de
intrare ci si de numerele aleatoare pe care le generează. Dacă are “noroc” algoritmul poate
termina repede și bine, dacă nu ar putea chiar să nu ofere soluția corectă. Astfel se ajunge la o
nouă clasă de algoritmi probabilistici numiți algoritmi Las Vegas, care spre deosebire de cei
Monte-Carlo, mereu corecți, pot uneori greși. Vom defini acum algoritmi probabilistică pentru
probleme de decizie(la care răspunsul este “Da” sau “Nu).
Exista 2 clase de algoritmi probabilistici, dar ne concentrăm atenția numai asupra uneia
dintre ele. Vom defini tot odată clasa problemelor care pot fi rezolvate probabilistic în timp
polinomial, numite RP(Random Polynomial).
Definiție : O problemă de decizie este în RP dacă există un algoritm aleator A care
rulează într-un timp polinomial (𝑛𝑐 ,c oarecare) si care are următoarele proprietăți:
• Dacă răspunsul la o instanță I este “Da” atunci cu probabilitatea p > ½,
algoritmul va răspunde “Da”.
6
•Dacă răspunsul este “Nu” atunci cu o probabilitate de 1 algoritmul va răspunde
“Nu”.
Aceasta probabilitate p este dată de numărul de șiruri aleatoare. Astfel atunci când rulăm
𝑐
un algoritm aleator pentru o instanță I avem la dispoziție 2𝑛 șiruri aleatoare de biți; pentru unele
din ele răspunsul fiind “da”, iar pentru altele “nu”. Pentru a calcula p-ul în cazul în care
răspunsul este “da” numărăm șirurile pentru care algoritmul răspunde afirmativ si împărțim acest
𝑐
număr la 2𝑛 . Pentru celălalt caz luăm opusul.
O tehnică pentru a scădea probabilitatea de a greși este de a rula respectivul algoritm de
mai multe ori pe aceleași date de intrare. Astfel daca executăm de 2 ori algoritmul, în cazul care
răspunsul este “nu” probabilitatea de a greși rămâne 0 .Pe de altă parte, ajunge ca algoritmul
să răspundă măcar odată “da” pentru a ști că răspunsul este „da” cu siguranță! Din cauza asta,
dacă probabilitatea de eroare este p pentru algoritm, executându-l de k ori probabilitatea coboară
la 𝑝𝑘 (nu uitați că p este subunitar, ba chiar sub 1/2). Această metodă se numește “boost'” în
engleză, și face dintr-un algoritm probabilist slab ca discriminare o unealtă extrem de puternică!
Pentru a scădea probabilitatea de eroare a unui algoritm care poate greși cu probabilitatea
p până sub o limită dorită s, se procedează astfel:
raspuns := nu
probabilitate := 1
p := 0.5
while(raspuns = nu && probabilitate > s)
raspuns = executa(algoritm)
probabilitate := probabilitate * p
III) Avantaje
7
IV) Dezavantaje
Așa cum am mai spus, cazurile în care s-au aplicat cu succes sunt puține
De fapt cazul tipic este acela când nu se cunoaște dacă “randomizarea” ajută sau nu
De exemplu, nu se cunoaște niciun algoritm aleatoriu cu timp de execuție polinomial pentru
vreo problema NP-completă
Întrebarea “este posibil să convertim un algoritm aleatoriu într-unul determinist fără să plătim
un preț prea mare privind resursele?” este încă deschisă
V) Rolul proiectului:
8
Bibliografie:
https://profs.info.uaic.ro/~dlucanu/cursuri/tpaa/resurse/rand-alg.pdf
https://www.scribd.com/document/92538233/Algoritmi-Monte-Carlo
https://www.geeksforgeeks.org/estimating-value-pi-using-monte-carlo/
http://algopedia.ro/wiki/index.php/Clasele_9-10_lec%C8%9Bia_26_-
_22_apr_2015
https://elearning.unitbv.ro/pluginfile.php/226426/mod_resource/content/1/In
troduction%20to%20Algorithms%20-%203rd%20edition.pdf
Introduction to Algorithms – Thomas H. Cormen, Charles E. Leiserson,
Ronald L. Rivest, Clifford Stein (Masssachusetts Institute of Tehnology,
2009)