Documente Academic
Documente Profesional
Documente Cultură
TP1
TP1
ovidiu.banias@aut.upt.ro
Cuprins
Prezentare general
Complexitatea algoritmilor
Curs Introductiv
Prezentare general
Metode de programare
Complexitatea algoritmilor Pointeri. Lucru pe biti Stiva Backtracking Recursivitate Divide at Impera Greedy Programare dinamic
Prezentare general
Bibliografie
Tudor Sorin, Tehnici de programare, Teora, 1995 Cormen T.H., Leiserson C.E., Rivest R.R., Introducere n algoritmi, Agora, 2000 Ivac C., Prun M., Bazele informaticii, Petrion, 1995 Atanasiu. A, Pintea R., Culegere de probleme pascal, Petrion, 1996 Manz. D, et. al., Informatica. Culegere de probleme rezolvate i propuse, Mirton, 2005 Ionescu C., et. al., Informatica pentru grupele de performan, Dacia Educaional, 2004 Ciocrlie H., Ciocrlie R., Tehnici de programare i structuri de date, Eurostampa, 2010
Prezentare general
Pai implementare
Analiz
nelegerea corect a cerinei problemei Verificarea constrngerilor (timp de execuie, memorie, ...)
Proiectare
n funcie de timpul alocat rezolvrii problemei (contratimp -> fr proiectare n detaliu, lucru cu compilatorul)
Implementare
Scriere cod Depanare Testare Cum se scrie un program?
Exemplu implementare
Problem: Se d un numr natural cu numr impar de cifre. Afiai numrul format dup eliminarea cifrei din mijloc multiplicat cu 37. Numrul trebuie s conin minim 3 cifre.
Pas 1. Problema impune validarea datelor de intrare? - dac da, atunci se fac toate validrile imaginate n limita timpului disponibil
Pas 2. Problema impune constrngeri de date i timp? - dac nu exist informaii ntrebm sau presupunem (alegem cazul cel mai defavorabil posibil a fi implementat n timpul alocat) - presupunem long/unsigned long suficient ca tip de dat
while (m){ //numarul de cifre cifre++; } x=pow(10,cifre/2); m=n%x; //ultimele cifre n/=10*x; //primele cifre n=n*x+m; //n fara cifra din mijloc cout<<n*37; m/=10;
Identare/Notaii cod/Comentare
Identare (K&R, KNF, GNU)
+ exemple
Notaii cod
+ exemple Camel Case + exemple Hungarian
Comentare
+ exemple
Stil de programare
+ aspect general + claritate/lizibilitate + modularitate + robustee
Analiza algoritmilor
Problem: Se d o list de n elemente, A[1..n] i un element auxiliar x. S se gseasc indexul i, cu proprietatea c A[i]=x, 1 i n. + exemple + 2 metode
Complexitatea algoritmilor
Cutare liniar
Algoritm: LINEARSEARCH Input: vector A[1..n] de n elemente i un element x. Output: i dac x = A[i], 1 i n, i 0 n caz contrar.
Cutare binar
Algoritm: BINARYSEARCH Input: vector A[1..n] de n elemente sortate cresctor i un element x. Output: j if x = A[j], 1 j n, i 0 n caz contrar. Observaie: fie li i lf doi indexi ai vectorului A[1..n], reprezentnd limita iniial i respectiv limita superioar a unui subvector A[li..lf]. Se observ c A[li] A[(li+lf)/2] A[lf] Rezolvare: la fiecare pas se va mpri intervalul n jumtate i elementul x se va cuta n doar unul din cele dou intervale de indexi A[li..(li+lf)/2] i A[(li+lf)/2+1..lf], n funcie de valoarea A[(li+lf)/2] . + cte comparaii minim? cte comparaii maxim? Complexitatea algoritmilor
1 3
2 7
3 12
4 21
5 25
6 26
7 27
8 29
9 37
10 39
+ pas 1: k=[(li+lf)/2] = 5 + pas 2: se obin 2 intervale [1..5] i [6..10] + pas 3: pt. c A[k]=25 < 37 se alege intervalul A[6..10] + pas 4: li=6, lf=10, repeta pasul 1 pn (li==lf) sau A[k]=x Complexitatea algoritmilor
6 26
7 27
8 29
9 37
10
k=8, (A[k]=29)<37 A[8..10]
39
6 26
7 27
8 29
9 37
10
k=9, A[k]=37 OK
39
Complexitatea algoritmilor
1. li 1; lf n; 2. while (li lf) 3. 4. 5. 6. 7. end while 8. return 0 k [(li + lf) / 2] if (x = A[k]) then return 1 else if (x < A[k]) then lf k-1 else li k+1
n = 1 2i 1 i = log 2 n + 1
Complexitatea algoritmilor
n elemente i 1 2
Rata de cretere
100 90 80 70 timp (ms) 60 50 40 30 20 10 0 0 5 10 15 20 25 30 date de intrare (n) log n cn nlog n cn^2 cn^3
+ +
f (n) = n3 + n2
f (n) = n logn + n + 3
Complexitatea algoritmilor
O( n )
O (2 )
0.007 s 0.008s
0.128s 0.256s 1s
0.89s 2s 10s
16s
65s
2ms
16ms
1031 ani
1069 ani
0.01s
0.012s 0.02s
10300 ani
101221 ani
4s 1ms
49s
20 sec
2 20
10314565 ani
Operaii elementare:
(i) adunare, scadere, nmulire i mprire (ii) comparaii i operatori logici (iii) atribuiri Complexitatea algoritmilor
Notaii asimptotice
Notaii
Complexitatea algoritmilor
Notaii asimptotice O
Definiie:
f (n), g (n) : R
( not )
Notaii asimptotice O
Complexitatea algoritmilor
Notaii asimptotice O
( 1 ) O(log n) O ( n) O(n ) O(n c ) O (c n ) O(n!)
2
c - constanta
Complexitatea algoritmilor
Notaii asimptotice
( not )
Complexitate P/NP/NP-complet
Algoritmi deterministici Algoritmi nondeterministici P = Polinomial NP = Nondeterministic Polinomial NP-complet NP complet NP P
P NP
Complexitatea algoritmilor