You are on page 1of 22

Tehnici de programare

2013 2013
Ovidiu Bania, ovidiu.banias@aut.upt.ro
Cuprins
Prezentare general
Cum se scrie un program?
Curs Introductiv
Cum se scrie un program?
Complexitatea algoritmilor
Scurt prezentare curs
Curs - 14 sptmni
Lurcri practice - 14 sptmni
Test n primele sptmni pentru recunoaterea cursului
Evaluare:
Prezentare general
Evaluare:
Curs (tem pe parcurs + examen final)
Laborator
Metode de programare
Analiza algoritmilor
Pointeri. Lucru pe biti
Stiva
Backtracking
Prezentare general
Recursivitate
Divide at Impera
Greedy
Programare dinamic
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
Prezentare general
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
Pai implementare
Analiz
nelegerea corect a cerinei problemei
Verificarea constrngerilor (timp de execuie, memorie, ...)
Proiectare
n funcie de timpul alocat rezolvrii problemei
Cum se scrie un program?
n funcie de timpul alocat rezolvrii problemei
Implementare
Scriere cod
Depanare
Testare
Identare/Notaii cod/Comentare
Identare (K&R, KNF, GNU)
+ exemple
Notaii cod
+ exemple Camel Case
Cum se scrie un program?
+ exemple Hungarian
Comentare
+ exemple
Stil de programare
+ aspect general
+ claritate/lizibilitate
+ modularitate
Cum se scrie un program?
+ 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
Complexitatea algoritmilor
+ 2 metode
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.
1. i 1
2. while (i < n) and (x A[i])
Complexitatea algoritmilor
+ cte comparaii minim?
+ cte comparaii maxim?
2. while (i < n) and (x A[i])
3. i i+1
4. end while
5. if (x = A[i]) then return i else return 0
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 indeci ai vectorului A[1..n], reprezentnd limita iniial i
respectiv limita superioar a unui subvector A[li..lf]. Se observ c
Complexitatea algoritmilor
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 indeci 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?
Cutare binar (cont.)
Algoritm: BINARYSEARCH exemplificare (element cutat x=37)
+ li=1, lf=10
Index (i) 1 2 3 4 5 6 7 8 9 10
A[1..10] 3 7 12 21 25 26 27 29 37 39
Complexitatea algoritmilor
+ li=1, lf=10
+ 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
Cutare binar (cont.)
Algoritm: BINARYSEARCH exemplificare (element cutat x=37)
Index (i) 6 7 8 9 10
A[6..10] 26 27 29 37 39
k=8, (A[k]=29)<37 A[8..10]
Complexitatea algoritmilor
Index (i) 6 7 8 9 10
A[8..10] 26 27 29 37 39
k=9, A[k]=37 OK
Cutare binar (cont.)
Algoritm: BINARYSEARCH pseudocod
1. li 1; lf n;
2. while (li lf)
3. k [(li + lf) / 2]
4. if (x = A[k]) then return 1
5. else if (x < A[k]) then lf k-1
Complexitatea algoritmilor
+ dup fiecare pas i, numrul de elemente se njumtete: pas i elemente
+ la ultimul pas,
5. else if (x < A[k]) then lf k-1
6. else li k+1
7. end while
8. return 0
1
2
i
n

1 log 1
2
2
1
+ =

n i
n
i
Ordinul/rata de cretere a unui algoritm
+ timpul de execuie a unui algoritm este o funcie de dimensiunea datelor de intrare
40
50
60
70
80
90
100
t
i
m
p
(
m
s
)
Rata de cretere
log n
cn
nlog n
Complexitatea algoritmilor
+
+
+ cu ct n crete cu att scade importana termenilor de grad inferior
2 3
) ( n n n f + =
3 log ) ( + + = n n n n f
0
10
20
30
0 5 10 15 20 25 30
date de intrare (n)
cn^2
cn^3
Notaii asimptotice
Notaii
- limita superioar

Complexitatea algoritmilor
- lim. inf. = lim. sup.
- limita inferioar

Notaii asimptotice O
Definiie:
). ( ) ( , a..
. i dac
)) ( ( ) ( c spunem
: ) ( ), (
0
0
) (
n cg n f n n
const c n
n g O n f
R n g n f
not

=
=

Complexitatea algoritmilor
). ( ) ( , a..
0
n cg n f n n
). ( ) ( , a.. 12 i 1 c pt.
), ( ) ( 12 ) (
1 , 2 10 2 ) ( Fie
0 0
3 3
2 3
n cg n f n n c n
n O n f n n f
n n n n f
= =
=
+ + =
Notaii asimptotice O
Complexitatea algoritmilor
Notaii asimptotice O
patratic ) (
r supralinia ) log (
liniar ) (
logaritmic ) (log
constant 1
2
=
=
=
=
=
n O
n n O
n O
n O
) (
Complexitatea algoritmilor
factorial ) ! (
expontial ) (
polinomial ) (
patratic ) (
2
=
=
=
=
n O
c O
n O
n O
n
c
constanta - c
Ordinul/rata de cretere a unui algoritm
O( ) O( ) O( ) O( ) O( ) O ( )
3
n
n log
n n nlog
2
n
n
2
n
128 2
7
=
256 2
8
=
1024 2
10
=
s 007 . 0
s 008 . 0
s 01 . 0
s 128 . 0
s 256 . 0
s 1
s 89 . 0
s 2
s 10
s 16
s 65
ms 1
ms 2
ms 16
sec 1
ani
31
10
ani
69
10
ani
300
10
Complexitatea algoritmilor
4096 2
12
=
20
2
s 012 . 0
s 02 . 0
s 4
ms 1
s 49
ms 20
ms 16
min 3 . 18
sec 68
ani 37
ani
1221
10
ani
314565
10
Operaii elementare: (i) adunare, scadere, nmulire i mprire
(ii) comparaii i operatori logici
(iii) atribuiri
Notaii asimptotice
Definiie: R n g n f : ) ( ), ( Fie
,
). ( ) ( , a.. . const i dac
)) ( ( ) ( c spunem
0 0
) (
n cg n f n n c n
n g n f
not
=
=
Complexitatea algoritmilor
). ( ) ( , a.. . const i dac
0 0
n cg n f n n c n =
). ( ) ( ) ( , a..
. const , i dac
)) ( ( ) ( c spunem
2 1 0
2 1 0
) (
n g c n f n g c n n
c c n
n g n f
not

=
=
Complexitate P/NP/NP-complet
Algoritmi deterministici
Algoritmi nondeterministici
P = Polinomial
NP
P
Complexitatea algoritmilor
P = Polinomial
NP = Nondeterministic Polinomial
NP-complet
NP
complet
NP P

You might also like