Sunteți pe pagina 1din 40

Algoritmi si programare (AP)

Dorel Lucanu
http://www.infoiasi.ro/~dlucanu/
Dorel Lucanu Algoritmica si programare
Obiective
Algoritmi:
nsuirea unei gndiri algoritmice
dezvoltarea abilitailor de proiectare de
soluii algoritmice
nsuirea tehnicilor de utilizare a
principalelor structuri de date
evaluarea timpului de execuie in cazul cel
mai nefavorabil
Programare
iniiere n utilizarea unui limbaj de
programare
descrierea principalelor structuri de date
nsuirea tehnicilor de baz n proiectarea
programelor
Dorel Lucanu Algoritmica si programare
Agenda disciplina
Algoritmi
Limbaj algoritmic, tablouri, structuri statice,
structuri nlnuite
liste liniare
arbori binari, heap-uri, union-find
grafuri (ca structuri de date)
sortare, cutare
paradigme
Programare
prezentarea graduata a limbajului C (ISO
Standard) cu accent pe implementarea
structurilor de date si a soluiilor prezentate
in prima parte
Dorel Lucanu Algoritmica si programare
Evaluare
conditii
activitatea la seminar (AS)
activitatea la laborator (AL)
testele scrise (TS)
criterii de promovare
AS 5, AL 6, TS 4
forme
AS: ntrebri, participare la discuii, soluii
originale
AL: fiecare tema de laborator va fi notata cu
note de la 1 la 10
TS: 2 teste scrise (spt. 7,13), fiecare test
coninnd 8 ntrebri gril i o problem.
Dorel Lucanu Algoritmica si programare
Nota finala
normele ECTS (European Credit Transfer System)
Punctaj Final (PF) = 10% AS + 40% AL +50% TS
4 daca sunt indeplinite conditiile si NU sunt
indeplinite criteriile de promovare,
= 10 daca PF este in primii 10% din cei
promovati (A)
= 9 urmatorii 25% din cei promovati (B)
= 8 urmatorii 30% din cei promovati (C)
= 7 urmatorii 25% din cei promovati (D)
= 6 urmatorii 10% din cei promovati (D)
= 5 daca criteriile nu sunt indeplinite cu o eroare
de 3% si activitatea generala justifica totusi o
promovare la limita (max 5% din cei promovati)
Dorel Lucanu Algoritmica si programare
Bibliografie
T.H. Cormen, C.E. Leiserson, R.L. Rivest:
Introducere in Algoritmi, Computer Libris
Agora, 2000
Herbert Schildt: C Manual Complet, Bucuresti,
Ed. Teora, 1998
resurse electronice
a se consulta pagina cursului
http://thor.info.uaic.ro/~dlucanu/ap/ap.html
Dorel Lucanu Algoritmica si programare
Curs 1 - Agenda
limbaj algoritmic
tablouri
structuri
calculul unui program
problema rezolvata de un program
timpul de executie
Dorel Lucanu Algoritmica si programare
Algoritm
algoritm = o secventa finita de pasi aranjata
intr-o ordine logica specifica cu proprietatea ca,
atunci cand este executata, produce o solutie
corecta la o problema data.
exemplu: reteta culinara
algoritm calculator (computer algorithm) =
un algoritm pentru care secventa de pasi este
executata de un calculator
limbaj algoritmic = un limbaj cu care sunt
descrisi algoritmii
Dorel Lucanu Algoritmica si programare
Tip de date: definitii
tip de date = colectie de entitati de tip data
(obiecte reprezentabile in memoria
calculatorului) si un set de operatii peste
aceste obiecte
tip de date abstract = tip de data organizat
in asa fel incat specificarea obiectelor si
specificarea operatiilor este independenta de
reprezentarea obiectelor si implementarea
operatiilor
model standard = model utilizat pentru
specificarea tipurilor de data abstracte (bazat
pe notatii matematice)
Dorel Lucanu Algoritmica si programare
Tip de date abstract: exemple
INT
obiecte: int = {. . . 2, 1, 0, 1, 2, . . . }
operatii:
adunarea
intrare: a, b int
iesire: a + b
. . .
BOOL
obiecte: bool = {false, true}
operatii:
conjunctia
intrare: a, b bool
iesire: a b (a and b)
. . .
Dorel Lucanu Algoritmica si programare
Limbaj algoritmic
modelarea memoriei
tipuri de date elementare
instructiuni
tipuri de date structurate de nivel jos
calcul
timpul de executie
Dorel Lucanu Algoritmica si programare
variabila = (nume, atribute, adresa)
Modelarea memoriei
x
adr
int
*p int
p
int*
adr
adr
pointer
Dorel Lucanu Algoritmica si programare
notatia grafica scurta
Modelarea memoriei
x
adr
int
adr
*p
int
p int*
adr
Dorel Lucanu Algoritmica si programare
Tipuri de date elementare
numere intregi
numere rationale
valori booleene
pointeri
...
Dorel Lucanu Algoritmica si programare
Atribuirea
sintaxa
variabila expresie
latura 217
lung_drum sqrt(5.0)*latura
latura int
lung_drum real
217
sqrt(5.0)*217
485.2267
Dorel Lucanu Algoritmica si programare
Atribuirea
Cazul pointerilor
*p 147
adr
*p
int
p int*
adr
147
Dorel Lucanu Algoritmica si programare
if
sintaxa
if expresie
then secventa_instructiuni
else secventa_instructiuni
semantica
if e
then i1
else i2
1. se evalueaza e
2. daca rezultatul este adevarat atunci executa
i1
altfel executa i2
Dorel Lucanu Algoritmica si programare
if - exemple
calcululul min(a,b) - varianta 1
if (a < b)
then min a
else min b
calcululul min(a,b) - varianta 1
min a
if (b < a) then min b
Dorel Lucanu Algoritmica si programare
while
sintaxa
while (expresie) do
secventa_instructiuni
semantica
while (e) do
i1
...
ik
1. se evalueaza e
2. daca rezultatul este adevarat
a) se executa instructiunile i1, ..., ik
b) se reia procesul de la pasul 1
3. altfel, executia instructiunii while se termina
Dorel Lucanu Algoritmica si programare
while - exemple
cel mai mic k a.i. 7
k
n pentru un n dat
k 0
sapte_la_k 1
while (sapte_la_k < n) do
k k+1
sapte_la_k sapte_la_k * 7
Dorel Lucanu Algoritmica si programare
repeat
sintaxa
repeat
secventa_instructiuni
until expresie
semantica
repeat
i1
...
ik
until (e)
1. se executa instructiunile i1, ..., ik
2. se evalueaza e
3. daca rezultatul este fals, se reia procesul
de la pasul 1
4. altfel, executia instructiunii repeat se
termina
Dorel Lucanu Algoritmica si programare
repeat - exemple
7
k
- inlocuirea lui while cu repeat
k 0
sapte_la_k 1
repeat
k k+1
sapte_la_k sapte_la_k * 7
until (sapte_la_k n)
pentru n = 0 nu mai obtinem rezultatul corect
Dorel Lucanu Algoritmica si programare
for versiunea 1
sintaxa
for variabila expresie1 to expresie2 do
secventa_instructiuni
semantica
for i e1 to e2 do
i1
...
ik
i e1
while (i <= e2) do
i1
...
ik
i succ(i)
Dorel Lucanu Algoritmica si programare
for - exemple
Exemplu: s = 1 + 2 + ... + n
s 0
for i 1 to n do
s s + i
Exemplu: a = 2
k
a 1
for i 1 to k do
a a * 2
Dorel Lucanu Algoritmica si programare
for versiunea 2
for variabila expresie1 downto expresie2 do
secventa_instructiuni
semantica
for i e1 downto e2 do
i1
...
ik
i e1
while (i >= e2) do
i1
...
ik
i pred(i)
Dorel Lucanu Algoritmica si programare
for - exemple
Exemplu: s = n + n-1 + ... + 1
s 0
for i n downto 1 do
s s + i
Dorel Lucanu Algoritmica si programare
Subprograme - proceduri
sintaxa
procedure nume(parametri)
secventa_instructiuni
end
clasificarea parametrilor:
de intrare
de iesire
de intrare/iesire
Dorel Lucanu Algoritmica si programare
Subprograme - exemple
interschimbarea valorilor a doua variabile
procedure swap (a, b)
temp a
a b
b temp
end
utilizare
x 7
y 23
swap(x,y)
// x = 23, y =7
Dorel Lucanu Algoritmica si programare
Subprograme - functii
sintaxa
function nume(parametri)
secventa_instructiuni
return expresie
end
pot exista mai multe instructiuni return
Dorel Lucanu Algoritmica si programare
Subprograme - exemple
functia care intoarce suma
function suma(n)
s 0
for i 1 to n do
s s + i
return s
end
utilizare
v suma(m) m/2
Dorel Lucanu Algoritmica si programare
Exceptii
sintaxa
throw mesaj
if expresie then throw mesaj
exemplu
if (b = 0) then throw impartire prin 0
x a/b
Dorel Lucanu Algoritmica si programare
Calculul unui program
x 1
i 2
while (i < 4) do
x X*i
i i+1
fiecare instructiune
= o unitate de timp
timpul de executie
T = 9
3 2
i < 4
6
2 1
i < 4
3
4 6
i < 4
9
3 6
i i+1
8
3 2
x x*i
7
2 2
i i+1
5
2 1
x x*i
4
- 1
i 2
2
- -
x 1
1
i x Instruct./exp pas
Dorel Lucanu Algoritmica si programare
Calculul unui program
linie in tabel = configuratie (c)
obtinerea unei linii din precedenta = relatie de tranzitie:
c
i-1
c
i
calcul
finit: c
0
c
1
c
2
c
n
infinit: c
0
c
1
c
2

problema
(intrare, iesire)
un caz particular de intrare se numeste instanta
calcul generat de instanta
o instanta det. c
0
si c
0
det. unic un calcul
problema rezolvata de un program
calculul generat de c
0
este finit
configuratia finala c
n
contine iesirea
Dorel Lucanu Algoritmica si programare
Tablouri
a int[3]
a[0]
int
a[1]
int
a[2]
int
a[1] 7
a[2] a[1] * 2
int a[3]
7 14
Dorel Lucanu Algoritmica si programare
Tablouri - exemple
suma primelor n elemente dintr-un tablou
s 0
for i 0 to n-1 do
s s + a[i]
cautarea unui element x intr-un tablou
i 0
while (i < n-1 and a[i] != x) do
i i + 1
if (a[i] = x)
then poz i
else poz -1
Dorel Lucanu Algoritmica si programare
Structuri statice (articole)
d data
d.zi
1..31
d.ln
1..12
d.an
int
data calendaristica: zi, luna, an
d.ln 11
d.zi 6
d.an 2004
11
6
2004
Dorel Lucanu Algoritmica si programare
Structuri si pointeri
*pd
data
p->zi
1..31
p->ln
1..12
p->an
int
pd
data*
Dorel Lucanu Algoritmica si programare
Liste simplu inlantuite
un nod v este o structura cu doua campuri:
v.inf - memoreaza informatia din nod
v.succ adresa nodului urmator
o lista este identificata de 2 pointeri: prim si
ultim
la un moment dat se proceseaza nodul curent
operatii: inserare/eliminare noduri, parcurgere
e
0
e
i
e
n-1

prim
curent
ultim

Dorel Lucanu Algoritmica si programare


Timpul de executie in cazul cel mai nefavorabil
i 0
while (i < n-1 and a[i] != x) do
i i + 1
if (a[i] = x)
then poz i
else poz -1
a = (4, 1, 5, 9, 6)
daca x = 4, atunci T = 1 + 1 + 2 = 4 (cel mai
favorabil)
daca x = 6 sau x = 3, atunci
T = 1 + 4*2 + 2 = 11 (cel mai nefavorabil)
in general: T(n) = 1 + 2*(n-1) + 2 = 2*n+1
n dimensiunea instantei problemei
Dorel Lucanu Algoritmica si programare
Notatia O(f(n))
functii f(n) de argument numar natural si valori
numere reale pozitive
O(f(n)) = clasa functiilor marginite superior de
f(n)
g(n) O(f(n)) daca exista c > 0, n
0
a.i.
g(n) <= c*f(n) pentru orice n >= n
0
functiile constante O(1)
polinoamele de grad 1 O(n)
polinoamele de grad 2 O(n
2
)
functii logaritmice O(log n)
Pentru cautarea in tablou: T(n) = O(n)
notatie: T(n) = O(n) in loc de T(n) O(n)

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