Professional Documents
Culture Documents
Curs 01
Curs 01
Limbaj algoritmic
SD 2016/2017
Conţinut
Algoritmi. Introducere
Limbaj algoritmic
Tipuri de date
I secvenţa Fibonacci
0, if n = 0
definiţia matematică: Fn = 1, if n = 1
Fn−1 + Fn−2 , if n > 1
I secvenţa Fibonacci
0, if n = 0
definiţia matematică: Fn = 1, if n = 1
Fn−1 + Fn−2 , if n > 1
I implemetare C
int F( int n) {
i f ( n == 0 ) r e t u r n 0 ;
e l s e i f ( n == 1 ) r e t u r n 1 ;
else
r e t u r n F ( n−1) + F ( n −2);
}
I Cambridge Dictionary:
“A set of mathematical instructions that must be followed in a fixed
order, and that, especially if given to a computer, will help to
calculate an answer to a mathematical problem.”
I Wikipedia:
“In mathematics and computer science, an algorithm is a step-by-step
procedure for calculations. Algorithms are used for calculation, data
processing, and automated reasoning. An algorithm is an effective
method expressed as a finite list of well-defined instructions for
calculating a function. Starting from an initial state and initial input
(perhaps empty), the instructions describe a computation that, when
executed, proceeds through a finite number of well-defined successive
states, eventually producing “output” and terminating at a final
ending state. The transition from one state to the next is not
necessarily deterministic; some algorithms, known as randomized
algorithms, incorporate random input.”
I will, in fact, claim that the difference between a bad programmer and a
good one is whether he considers his code or his data structures more
important. Bad programmers worry about the code. Good programmers
worry about data structures and their relationships. — Linus Torvalds
I input (intrare) – zero sau mai multe entităţi de date furnizate din
exterior.
I soluţii optimizate.
20
0
20 25 30 35 40 45 50
n
Observat, ie: Comportamentul este diferit ı̂n funcţie de tipul implementării; totuşi diferenţele nu
sunt atât de substanţiale =⇒ Problema e algoritmul! (complexitate exponenţială)
I definirea problemei
I abstractizează detaliile irelevante;
I implementarea algoritmului;
I formal:
I notat, ie matematică (mas, ini Turing, lambda-calcul (Church), funct, ii
recursive, etc.);
I limbaje de programare: de nivel inalt, de nivel jos, declarative (e.g.,
programare funct, ională, programare logică). Acesta poate fi s, i un
model informal dacă nu există o semnatică formală pentru limbaj.
I semiformal:
I pseudo-cod: combină notat, ia formală a limbajelor de prgramare cu
limbajul natural;
I notat, ie grafică: scheme logice, automate (state machines), diagrame
de activităt, i.
Algoritmi. Introducere
Limbaj algoritmic
Tipuri de date
I Nume
I Adresă
I Instanţă a variabilei
I variabile
I pointeri
Algoritmi. Introducere
Limbaj algoritmic
Tipuri de date
I Operaţii
I Numere ı̂ntregi
I valori: numere ı̂ntregi
I operaţii: +, -, ...
I Numere reale
I valori: numere raţionale
I operaţii: +, -, ...
I Valori booleene
I valori: true, false
I operaţii: and, or, not
I Caractere
I valori: ’a’, ’b’, ...
I operaţii: —
I Pointeri
I valori: adrese de variabile aparţinând altui tip, valoarea NULL
I operaţii: —
I referire indirecta: *p
timp(operatie)
operatie
cost uniform cost logaritmic
a+b O(1) O(max(loga, logb))
...
I Expresii
I Condiţionale: if if-else
I Atribuirea
I Sintaxa: < variabila >←< expresie >
I Sematica:
I se evaluează < expresie > şi rezultatul obţinut se memorează ı̂n locaţia
desemnată de < variabila >
I este singura instrucţiune cu ajutorul căreia se poate modifica conţinutul
memoriei
Exemplu:
I Înainte de atribuire:
I După atribuirea u ← −v ∗ u:
I Sematica:
I se evaluează < expresie > şi rezultatul obţinut se memorează ı̂n locaţia
de la adresa stocată ı̂n < variabila pointer >
I Exemplu: ∗p ← 10
I if
I Sintaxa:
if < expresie > then
< secventa − instructiuni1 >
else
< secventa − instructiuni2 >
I Semantica:
I Se evaluează < expresie >. Dacă rezultatul este true, atunci se execută
< secventa − instructiuni1 > iar dacă rezultatul este false, atunci se
execută < secventa − instructiuni2 > după care instrucţiunea if se
termină
if a < b then
min ← a
else
min ← b
sau
min ← a
if b < a then
min ← b
I while
I Sintaxa:
while < expresie > do
< secventa − instructiuni >
I Semantica:
I Se evaluează < expresie >
I Dacă rezultatul este true atunci se execută < secventa − instructiuni >
după care se reia procesul ı̂ncepând cu pasul 1. Dacă rezultatul este
false atunci execuţia instrucţiunii while se termină.
I repeat
I Sintaxa:
repeat
< secventa − instructiuni >
until < expresie >;
I Semantica:
Instrucţiunea:
repeat
S
until e;
simulează execuţia următorului program:
S
while not e do
S
I for
I Sintaxa:
for < variabila >←< expresie1 > to < expresie2 > do
< secventa − instructiuni >
sau
for < variabila >←< expresie1 > downto < expresie2 > do
< secventa − instructiuni >
I for
I Semantica:
for i ← e1 to e2 do
S
I for
I Semantica:
for i ← e1 downto e2 do
S
I Subprograme:
I Proceduri
I Funcţii
I Proceduri:
I Sintaxa:
I Apel: NUME(lista-parametri-actuali)
I interfaţa ı̂ntre o procedură şi modulul care o apelează se realizează doar
prin intermediul parametrilor şi a variabilelor globale
I Exemplu:
Apel:
SWAP(a, b)
SWAP(b, c)
I Funcţii:
I Sintaxa:
I Apel: NUME(lista-parametri-actuali)
I Exemplu:
Function max3(x,y,z)
begin
temp ← x
if y > temp then
temp ← y
if z > temp then
temp ← z
return temp
end
Apel:
max3(a, b, c)
2*max3(a, b, c) > 5
Algoritmi. Introducere
Limbaj algoritmic
Tipuri de date
for i ← 0 to n − 1 do
c[i] ← a[i] + b[i]
Costul operaţiilor:
timp(operatie)
operatie
cost uniform cost logaritmic
a[i] O(1) O(i + logai )
a[i] ← v O(1) O(i + logv )
I Structura are un nume şi fiecare câmp are propriul nume şi propriul
tip.
Costul operaţiilor:
timp(operatie)
operatie
cost uniform cost logaritmic
S.x O(1) O(logSx )
S.x ← v O(1) O(logv )