Sunteți pe pagina 1din 8

1/14/2017

UNIVERSITATEA DIN CRAIOVA


Facultatea de Automatica,
Ingineria
Calculatoare si Electronica Sistemelor de Programe

An universitar 2016-2017 Laviniu Aurelian BĂDULESCU


semestrul II

STRUCTURĂ EVALUARE
SĂPTĂMÂNAL CURS: Examen scris final: 6 întrebări: 60%
2 ore de Curs Testari
LABORATOR: Laborator
2 ore de activităţi aplicative: Laborator 2 testări de Examen 30%
laborator pe scris
(prezența obligatorie: condiționează 60%
parcursul
intrarea în examen) semestrului:
Oficiu
10%
30%
Semestrul II are 14 săptămâni
ISP CURS 1 3 ISP CURS 1 4

Recomandări CONŢINUTURI
• Studiați suportul de curs și de laborator înainte de
fiecare curs și laborator. • Analiza complexităţii algoritmilor
• Implementați efectiv codul în C (mediul Code • Recursivitatea
Blocks) pentru programele furnizate.
Tehnica de programare Divide et Impera
• Notați aspectele neclare legate de ceea ce ați
studiat și testat pe calculator și • Căutarea secvențială
discutați între voi
• Căutarea cu santinelă
cea mai eficientă metodă de a învăța este să îl
înveți pe altul. • Căutarea într-un vector ordonat
sau adresați întrebări la Curs atunci când
dezbatem acel aspect. • Căutarea binară
PCLP CURS
1 5 ISP CURS 1 6

1
1/14/2017

CONŢINUTURI CONŢINUTURI
• Sortarea cu metoda bulelor
• Căutarea binară uniformă • Sortarea rapidă
• Căutarea prin interpolare • Sortarea prin selecție directă
• Sortarea Heap
• Selecţia maximului
• Sortarea prin inserție directă
• Selecţia minimului și maximului • Sortarea Shell
• Selecţia celor mai mari k elemente • Sortarea prin fuziune
• Sortarea prin numărare
• Selecţia k-elementului
• Sortarea prin numărarea distribuțiilor
ISP CURS 1 7 ISP CURS 1 8

CONŢINUTURI CONŢINUTURI
• Tehnica de programare backtracking • Tehnica de programare Greedy
Problema reginelor Problema planificării spectacolelor
Structura unei implementări backtracking Problema rucsacului
Generarea permutărilor Problema săriturii calului
Generarea combinărilor Problema comis-voiajorului
Generarea aranjamentelor
• Tehnica programării dinamice
Problema colorării hărţilor
Problema triunghiului
Problema comis-voiajorului
Problema subșirului crescător de lungime
Problema labirintului maximă
Problema săriturii calului Problema rucsacului
ISP CURS 1 9 ISP CURS 1 10

CURS 1
- suport de curs -

Analiza complexităţii algoritmilor ANALIZA COMPLEXITĂŢII


ALGORITMILOR

12

2
1/14/2017

Analiza complexităţii algoritmilor Analiza complexităţii algoritmilor


• Analiza complexităţii algoritmilor = Analiza • Putem analiza comportarea algoritmilor
eficienţei algoritmilor după implementarea lor într-un limbaj de
• Pentru o problemă dată ar fi de dorit ca să găsim programare,
mai mulți algoritmi prin rularea pe calculator a unor cazuri diferite.
iar apoi să-l alegem dintre aceștia pe cel optim.
• Putem analiza teoretic algoritmii înaintea
• Care este însă criteriul de comparație implementării lor,
care îmi alege dintre mai mulţi algoritmi pe cel mai ca o funcţie de dimensiunea datelor de intrare,
eficient?
prin determinarea cantitativă a resurselor
• Eficienţa unui algoritm poate fi exprimată în mai de timp de utilizare a procesorului şi/sau
multe feluri de memorie internă necesare.
ISP CURS 1 13 ISP CURS 1 14

Analiza complexităţii algoritmilor Analiza complexităţii algoritmilor


• Algoritmul cel mai eficient este cel care foloseşte
cel mai puţin resursele calculatorului: • Pentru a face economie de memorie trebuie să
procesorul şi RAM alegem corect tipul de dată pentru fiecare
DATE
memoria internă. COD variabilă de memorie folosită în algoritm
• În memoria internă se alocă spaţiu rezolvăm problema folosind cât mai puţine
variabile de memorie
atât pentru datele folosite de algoritm,
cât şi pentru codul executabil al programului • Dimensiunea datelor de intrare care urmează să
(instrucţiunile în cod maşină). fie prelucrate determină
• Timpul necesar pentru executarea algoritmului timpul de execuţie a unui algoritm, deci şi
determină timpul de utilizare a procesorului. timpul de utilizare a procesorului.
ISP CURS 1 15 ISP CURS 1 16

Analiza complexităţii algoritmilor • Dintre cele două resurse de calcul, spaţiu (memorie)
şi timp (procesor),
cea critică este timpul de execuţie.
• Se defineşte dimensiunea datelor de intrare ca
fiind • În continuare vom analiza doar dependenţa dintre
numărul de valori pentru datele de intrare ale timpul de execuţie (înţeles ca număr de repetări ale
unui algoritm. unor operaţii elementare) al unui algoritm şi
dimensiunea datelor de intrare.
• Pentru compararea timpului de execuţie a doi • În funcţie de complexitatea algoritmului, evaluarea
algoritmi care rezolva aceeaşi problemă, timpului de execuţie se poate face prin:
se va folosi aceeaşi dimensiune a datelor de numărul de operaţii elementare ale algoritmului
intrare.
timpul mediu al algoritmului.
ISP CURS 1 17 ISP CURS 1 18

3
1/14/2017

• O operaţie elementară este o operaţie sau o • O operaţie elementară poate fi


succesiune de operaţii o operaţie de atribuire
care nu depind de caracteristicile problemei (de o operaţie aritmetică (adunare, scădere, înmulţire, împărţire)
valorile datelor de intrare). o operaţie de comparare
o operaţie logică (negaţie, conjuncţie, disjuncţie)
• În alegerea operaţiei elementare trebuie să se ţină un set precizat de operaţii (e.g. 3 atribuiri, 2 înmulţiri, 5 comparaţii)
cont ca
numărul său de execuţii în cadrul algoritmului să se • Dar n operaţii de atribuire nu reprezintă o operaţie
poată calcula elementară
în funcţie de dimensiunea datelor de intrare. deoarece depind de o caracteristică a problemei:
valoarea lui n.
ISP CURS 1 19 ISP CURS 1 20

Analiza complexităţii algoritmilor Analiza complexităţii algoritmilor


• Există cazuri în care nu se poate preciza numărul • Să luăm două exemple:
de operaţii elementare, 1.Calculaţi factorialul unui număr natural n:
acestea depinzând de valoarea datelor de intrare. n!=1*2*...*n
întreg n, p, i
• Eficienţa unui algoritm reprezintă timpul de citeşte n
calcul estimat prin p <- 1
pentru i <- 1, n execută
numărul de execuţii ale operaţiei elementare sau
p <- p * i
prin timpul mediu. Temă. Scrieţi programul C
sfârşit pentru corespunzător
scrie p pseudocodului prezentat.

ISP CURS 1 21 ISP CURS 1 22

Analiza complexităţii algoritmilor Analiza complexităţii algoritmilor


2. Se citesc n numere întregi. Determinaţi valoarea
celui mai mare număr dintre cele n. • În cazul primului algoritm se execută (în exteriorul
întreg n, x, max structurii ciclice), patru operaţii elementare:
citeşte n, x a. o operaţie de citire a lui n
max <- x
pentru i <- 2, n execută
b. o iniţializare a lui p
citeşte x c. o iniţializare a contorului i
dacă (max < x) atunci
d. o operaţie de scriere a lui p
max <- x
sfârşit dacă Temă. Scrieţi programul C
sfârşit pentru corespunzător
pseudocodului prezentat.
scrie max
ISP CURS 1 23 ISP CURS 1 24

4
1/14/2017

• În cazul primului algoritm, în structura ciclică se Analiza complexităţii algoritmilor


execută trei operaţii elementare:
a. o operaţie de comparare asupra contorului i • În cazul celui de-al doilea algoritm se execută (în
b. o operaţie de incrementare asupra contorului i exteriorul structurii ciclice), cinci operaţii
c. o operaţie de atribuire asupra lui p elementare:
a. o operaţie de citire a lui n
• În total, la primul algoritm, se execută:
b. o operaţie de citire a lui x
4 + 3*n operaţii elementare
c. o iniţializare a lui max
• Deci evaluarea timpului de calcul se poate face d. o iniţializare a contorului i
pe baza numărului de operaţii elementare e. o operaţie de scriere a lui max
efectuate de algoritm.
ISP CURS 1 25 ISP CURS 1 26

Analiza complexităţii algoritmilor Analiza complexităţii algoritmilor


• În algoritmul al doilea se execută
• În cazul celui de-al doilea algoritm, în structura
ciclică se execută următoarele operaţii 5 + 4*(n-1) + r operaţii elementare,
elementare: unde r depinde de ordinea în care se citesc
numerele de la tastatură.
a. o operaţie de comparare asupra contorului i
b. o operaţie de incrementare asupra contorului i • În cazul celui de-al doilea algoritm, pentru
c. o operaţie de citire a lui x compararea algoritmilor
d. o operaţie de comparare a lui max cu x nu putem folosi numărul de operaţii elementare
pentru că depinde de r
Nu se poate preciza dacă totdeauna se execută şi
vom folosi timpul mediu de execuţie al
atribuirea max <- x algoritmului.
ISP CURS 1 27 ISP CURS 1 28

• Există un timp minim de execuţie Analiza complexităţii algoritmilor


care corespunde cazului cel mai favorabil
cazul în care se execută cele mai puţine operaţii • În acest caz, r = 0 şi
numărul de operaţii elementare este 5 + 4*(n-1)
• şi un timp maxim de execuţie
care corespunde cazului cel mai defavorabil • Cazul cel mai defavorabil este ca
cazul care se execută cele mai multe operaţii.
numerele citite pe intrare să fie ordonate
crescător.
• Pentru exemplul prezentat, cazul cel mai favorabil
este ca • În acest caz r = n-1 şi
numerele citite pe intrare să fie ordonate numărul de operaţii elementare este 5*n
descrescător
ISP CURS 1 29 ISP CURS 1 30

5
1/14/2017

• Pentru a calcula timpul mediu de calcul, va trebui • Înlocuim pe r în expresia numărului de operaţii
să analizăm toate cazurile posibile elementare executate de al doilea algoritm:
în total n cazuri: 5 + 4*(n-1) + r
1. nicio atribuire max <- x, şi obţinem:
2. o atribuire,
• 5 + 4*(n-1) + (n-1)/2 = 5 + 4,5*(n-1) = 0,5 + 4,5*n
3. două atribuiri,
…………………………., • Eficienţa unui algoritm se notează cu T(n) şi este o
n. n-1 atribuiri. funcţie care depinde de variabila n – dimensiunea
datelor de intrare.
• numărul mediu de operaţii fiind dat de r calculat
astfel: r = (0 + 1 + 2 + … + n-1)/n = (n-1)/2 • Fiind un timp, T(n) se măsoară în unităţi de timp
(e.g. secunde).
ISP CURS 1 31 ISP CURS 1 32

Analiza complexităţii algoritmilor • Presupunând că avem două implementări ale


aceluiaşi algoritm
• Dacă într-un algoritm se execută 5n3 + 2n2 + 7 care necesită T1(n), respectiv T2(n) secunde
operaţii elementare, eficienţa algoritmului va fi pentru rezolvarea unui caz cu dimensiunea datelor de
intrare n,
T(n) = 5n3 + 2n2 + 7 atunci există întotdeauna o constantă pozitivă c,
astfel încât T1(n) ≤ c*T2(n), pt. ∀ n suficient de mare.
• Principiul invarianței ne spune că două
• Acest principiu este valabil indiferent de
implementări diferite ale aceluiași algoritm
calculatorul folosit
nu diferă în eficiență cu mai mult de o constantă
multiplicativă. limbajul de programare ales
îndemânarea programatorului.
ISP CURS 1 33 ISP CURS 1 34

Analiza complexităţii algoritmilor • Astfel vom exprima eficiența în limitele unei


constante multiplicative.
• Deci, schimbarea calculatorului
ne poate permite să rezolvăm o problemă de 10 • Vom spune că un algoritm necesită timp în ordinul
de ori mai repede, lui T, pentru o funcție T dată,
dacă există o constantă pozitivă c și
• dar numai modificarea algoritmului
o implementare a algoritmului
ne poate aduce o îmbunătățire care să devină din
capabilă să rezolve fiecare caz al problemei într-un
ce în ce mai evidentă
timp de cel mult c*T(n) secunde,
pe măsură ce dimensiunea datelor de intrare
unde n este dimensiunea datelor de intrare ale
crește. algoritmului considerat.

ISP CURS 1 35 ISP CURS 1 36

6
1/14/2017

Analiza complexităţii algoritmilor Analiza complexităţii algoritmilor


• Pentru a aprecia eficienţa unui algoritm nu este • În expresia lui T(n) = 5n3 + 2n2 + 7, nu este
necesară cunoaşterea expresiei detaliate a importantă constanta multiplicativă 5, nici
timpului de execuţie: T(n). termenii 2n2 şi 7.
Mai degrabă intereseaza modul în care timpul de
• Când dimensiunea problemei este mare,
execuţie creşte odată cu creşterea dimensiunii
problemei. valoarea termenului dominant depăşeşte
semnificativ valorile celorlalţi termeni
O măsură utilă în acest sens este ordinul de
creştere. astfel că aceştia din urmă pot fi neglijaţi.
el este determinat de termenul dominant din
expresia eficienţei T(n).
ISP CURS 1 37 ISP CURS 1 38

• Ordinul / clasa de complexitate se notează O(f(n)), • Pentru algoritmul cu eficienţa T(n) = 5n3 + 2n2 + 7,
unde f(n) reprezintă termenul determinant din ordinul de complexitate este O(n3)
funcţia T(n).
• În funcţie de ordinul de complexitate, există
• Pentru determinarea ordinului de complexitate, în următoarele tipuri de algoritmi (c = constantă):
funcţia T(n) se realizează următoarele simplificări: Tipul Tipul
Complexitate Complexitate
se păstrează doar termenul determinant deoarece algoritmului algoritmului
ceilalţi termeni au valori neglijabile faţă de O(1) constant O(n2) pătratic
termenul determinant
O(log n) logaritmic O(nc) polinomial
pentru valori foarte mari ale lui n.
O(n) liniar O(cn) exponenţial
conform principiului invarianţei coeficientul
termenului rămas din expresia eficienţei devine 1. O(n*log n) liniar logaritmic O(n!) factorial
ISP CURS 1 39 ISP CURS 1 40

constanta c = 2

ISP CURS 1 41 ISP CURS 1 42

7
1/14/2017

Timpi de execuţie ai algoritmilor în funcţie de Pentru stabilirea clasei de complexitate a unui


dimensiunea datelor de intrare, pentru diverse algoritm se parcurg următoarele etape:
ordine sau clase de complexitate 1. Se stabileşte dimensiunea problemei.
2. Se identifică operaţia elementară.
n O(log n) O(n) O(n*log n) O(n2) O(n3) O(2n)
3. Se verifică dacă numărul de execuţii ale operaţiei
27 0,007 μs 0,128 μs 0,89 μs 16 μs 2 ms 1031 ani elementare depinde doar de dimensiunea
28 0,008 μs 0,256 μs 2 μs 65 μs 16 ms 1069 ani problemei.
dacă da, se determină acest număr.
210 0,01 μs 1 μs 10 μs 1 ms 1s 10300 ani
dacă nu, se analizează cazul cel mai favorabil, cazul
212 0,012 μs 4 μs 49 μs 16 ms 68 s 101221ani cel mai defavorabil şi cazul mediu.
220 0,02 μs 1 ms 20 ms 18,3 min 37 ani 10314565 ani 4. Se stabileşte clasa de complexitate căruia îi
aparţine algoritmul.
ISP CURS 1 43 ISP CURS 1 44

Întrebări Clasament Complexitate Tipul algoritmului


Bibliografie
[1] Cormen, T., H., Leiserson, C., E., Rivest, R., R., Introducere în
1 O(1) constant algoritmi, Ed. Computer Libris Agora, Cluj-Napoca, 2000
1. Ce tipuri de 2 O(log n) logaritmic [2] Knuth, D., Arta Programării Calculatoarelor: Vol. 1 Algoritmi
algoritmi Fundamentali, Ed. Teora, Bucureşti, 1999
3 O(n) liniar
cunoaşteţi în [3] Knuth, D., Arta Programării Calculatoarelor: Vol. 2 Algoritmi
4 O(n*log n) liniar logaritmic Seminumerici, Ed. Teora, Bucureşti, 2000
funcţie de ordinul
de complexitate? 5 O(n2) pătratic [4] Knuth, D., Arta Programării Calculatoarelor: Vol. 3 Sortare și
Căutare, Ed. Teora, Bucureşti, 2001
6 O(nc) polinomial
2. Care este cel mai [5] Andonie, R., Gârbacea, I., Algoritmi fundamentali. O perspectivă
7 O(cn) exponenţial C++, Ed. Libris, Cluj-Napoca, 1995
bun algoritm în [6] Sorin, T., Tehnici de programare, Ed. Teora, Bucureşti, 1995
8 O(n!) factorial
funcţie de ordinul [7] Miloşescu, M., Informatică, E.D.P., Bucureşti, 2005
de complexitate? (c = constantă)

ISP CURS 1 45 ISP CURS 1 46

S-ar putea să vă placă și