Sunteți pe pagina 1din 8

2/14/2018

UNIVERSITATEA DIN CRAIOVA


Facultatea de Automatica,
Ingineria
Calculatoare si Electronica Sistemelor de Programe

An universitar 2017-2018 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ă
ISP CURS 1 5 ISP CURS 1 6

ISP Curs 1 1
2/14/2018

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

ISP Curs 1 2
2/14/2018

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

ISP Curs 1 3
2/14/2018

• 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

ISP Curs 1 4
2/14/2018

• Î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

ISP Curs 1 5
2/14/2018

• 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

ISP Curs 1 6
2/14/2018

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

ISP Curs 1 7
2/14/2018

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
funcţie de ordinul Seminumerici, Ed. Teora, Bucureşti, 2000
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

ISP Curs 1 8

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