Professional Documents
Culture Documents
Proiectarea Algoritmilor Curs I
Proiectarea Algoritmilor Curs I
S
t. Ciobaca, Dorel Lucanu
PA 2016/2017
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 1 / 55
Outline
1 Introducere
2 Limbajul Alk
Modelul de memorie
Valori
Operatii
Expresii si instructiuni
Sintaxa
Semantica
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 2 / 55
Introducere
Plan
1 Introducere
2 Limbajul Alk
Modelul de memorie
Valori
Operatii
Expresii si instructiuni
Sintaxa
Semantica
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 3 / 55
Introducere
Ce este un algoritm?
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.
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 4 / 55
Introducere
Ce este un algoritm?
Wikipedia:
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 5 / 55
Introducere
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 6 / 55
Introducere
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 7 / 55
Introducere
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 8 / 55
Introducere
De ce nevoie de formalizare?
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 9 / 55
Introducere
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 10 / 55
Introducere
Teza Church-Turing
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 11 / 55
Introducere
Nivelul de formalizare
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 12 / 55
Limbajul Alk
Plan
1 Introducere
2 Limbajul Alk
Modelul de memorie
Valori
Operatii
Expresii si instructiuni
Sintaxa
Semantica
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 13 / 55
Limbajul Alk
Motivatie
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 14 / 55
Limbajul Alk Modelul de memorie
Plan
1 Introducere
2 Limbajul Alk
Modelul de memorie
Valori
Operatii
Expresii si instructiuni
Sintaxa
Semantica
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 15 / 55
Limbajul Alk Modelul de memorie
Modelul de memorie
memoria este data de o multime de variabile
o variabila este o pereche:
notatie matematica nume-variabila 7 valoare
valoare
notatie grafica nume-variabila
o valoare va fi o constanta a unui tip de date
exemple de tipuri de valori:
scalare
tablouri
structuri
liste
...
Val desemneaza multimea tuturor valorilor
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 16 / 55
Limbajul Alk Modelul de memorie
Exemple de variabile
true 5 0 1 2
notatie grafica b i 3 0 8
a
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 17 / 55
Limbajul Alk Valori
Plan
1 Introducere
2 Limbajul Alk
Modelul de memorie
Valori
Operatii
Expresii si instructiuni
Sintaxa
Semantica
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 18 / 55
Limbajul Alk Valori
Dimensiunea valorilor
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 19 / 55
Limbajul Alk Valori
Scalari
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 20 / 55
Limbajul Alk Valori
Scalari (cont)
ntregi:
Int = {. . . , 2, 1, 0, 1, 2, . . .}
dimensiunea uniforma: |n|unif = 1
dimensiunea logaritmica: |n|log = log2 n
booleeni:
Bool = {false, true}
dimensiunea uniforma: |b|unif = 1
dimensiunea logaritmica: |b|log = 1
numere rationale:
Float = numerele rationale
dimensiunea uniforma: |v |unif = 1
dimensiunea logaritmica: |v |log = log2 (mantis
a) + log2 (exponent)
...
Avem Int Bool Float . . . Val.
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 21 / 55
Limbajul Alk Valori
Tablouri (unidimensionale)
a = [a0 , a1 , . . . , an1 ]
|a|d = |a0 |d + |a1 |d + + |an1 |d , d {unif, log}
Arr n hV i = {{0 7 v0 , . . . , n1 7 vn1 | vi V , i = 0, . . . , n1}
S
n1 Arr n hV i Val pentru fiecare tip V Val
tablourile bidimensionale sunt tablouri unidimensionale de tablouri
unidimensionale,
tablourile tridimensionale sunt tablouri unidimensionale de tablouri
bidimensionale,
etc.
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 22 / 55
Limbajul Alk Valori
Structuri
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 23 / 55
Limbajul Alk Valori
Liste liniare
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 24 / 55
Limbajul Alk Valori
Graful G = ({0, 1, 2, 3}, {(0, 1), (0, 2), (0, 3), (1, 2)}) este reprezentat prin
liste de adiacenta de urmatoarea valoare:
{
n4
a [h1, 2, 3i, h0, 2i, h0, 1i, h0i]
}
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 25 / 55
Limbajul Alk Operatii
Plan
1 Introducere
2 Limbajul Alk
Modelul de memorie
Valori
Operatii
Expresii si instructiuni
Sintaxa
Semantica
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 26 / 55
Limbajul Alk Operatii
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 27 / 55
Limbajul Alk Operatii
Operatii cu scalari
Intregi:
Operatie timeunif (op) timelog (op)
a +Int b O(1) O(max(log a, log b))
O(log a log b)
a Int b O(1)
O(max(log a, log b)1.545 )
... ... ...
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 28 / 55
Limbajul Alk Operatii
Tablouri
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 29 / 55
Limbajul Alk Operatii
Structuri
unde am presupus S 7 {. . . x sx , . . .}
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 30 / 55
Limbajul Alk Operatii
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 31 / 55
Limbajul Alk Operatii
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 32 / 55
Limbajul Alk Operatii
L.pushBack() O(1) ?
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 33 / 55
Limbajul Alk Operatii
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 34 / 55
Limbajul Alk Expresii si instructiuni
Plan
1 Introducere
2 Limbajul Alk
Modelul de memorie
Valori
Operatii
Expresii si instructiuni
Sintaxa
Semantica
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 35 / 55
Limbajul Alk Expresii si instructiuni
Expresii: sintaxa
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 36 / 55
Limbajul Alk Expresii si instructiuni
Instructiuni: sintaxa
Tipuri de date
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 38 / 55
Limbajul Alk Expresii si instructiuni
Exemplu de program
/*
This example includes the recursive version of the DFS algorithm.
@input: a digraf D and a vertex i0
@output: the list S of the vertices reachable from i0
*/
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 39 / 55
Limbajul Alk Expresii si instructiuni
Evaluarea expresiilor
Consideram o functie [[ ]]( ) : Expresii (Stare Valori), unde [[E ]]() ntoarce
valoarea expresiei E calculata n starea .
Exemplu: Fie o stare ce include a 7 3 b 7 6. Avem:
[[a + b 2]]() =
[[a]]() +Int [[b 2]]()=
3 +Int [[b]]() Int [[2]]()=
3 +Int 6 Int 2 =
3 +Int 12 = 15 unde +Int reprezinta algoritmul de adunare peste ntregi si Int
reprezinta algoritmul de nmultire peste ntregi.
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 40 / 55
Limbajul Alk Expresii si instructiuni
include a 7 3 b 7 6
time log ([[a]]()) = log 3, time log ([[b]]()) = log 6
time unif ([[a]]()) = 1, time unif ([[b]]()) = 1
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 41 / 55
Limbajul Alk Expresii si instructiuni
Configuratii
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 42 / 55
Limbajul Alk Expresii si instructiuni
Pasi de executie
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 43 / 55
Limbajul Alk Expresii si instructiuni
Instructiuni: semantica
atribuirea: x = E ;
informal: se evalueaza E si rezultatul este atribuit ca noua valoare a
variabilei x
formal:
hx = E ;S, }i hS, 0 i
unde este de forma . . . x 7 v . . . si 0 de forma . . . x 7 [[E]]() . . .
(n rest la fel ca ).
Costul timp:
time unif (hx = E ;S, i hS, 0 i) = time unif ([[E ]]()) + 1,
time log (hx = E ;S, i hS, 0 i) = time log ([[E ]]() + log[[E ]]()).
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 44 / 55
Limbajul Alk Expresii si instructiuni
Instructiuni: semantica
formal:
hif (E ) then S else S 0 S 00 , i hS S 00 , i daca [[E ]]() = true
hif (E ) then S else S 0 S 00 , i hS 0 S 00 , i daca [[E ]]() = false
Costul timp:
time d (hif (E ) then S 0 else S 00 S, i h , i) = time d ([[E ]]())
d {unif, log}.
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 45 / 55
Limbajul Alk Expresii si instructiuni
Instructiuni: semantica
while: while (E ) S
informal: se evalueaza e; daca rezultatul obtinut este true, atunci se
executa S, dupa care se evalueaza din nou e si . . . ; altfel executia
instructiunii se termina
formal: se exprima cu ajutorul lui if:
hwhile (e) S S 0 , i
hif (e) { S ; while (e) S } else { }S 0 , i
Costul timp:
time d (hwhile (E ) then S else S 0 S, i hif (e) ...S, i) = 0,
d {unif, log}.
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 46 / 55
Limbajul Alk Expresii si instructiuni
Apelul de functie
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 47 / 55
Limbajul Alk Expresii si instructiuni
Calcul (executie)
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 48 / 55
Limbajul Alk Expresii si instructiuni
Calcul: exemplu
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 49 / 55
Limbajul Alk Expresii si instructiuni
Calcul: exemplu
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 50 / 55
Testarea algoritmilor cu K Framework
Plan
1 Introducere
2 Limbajul Alk
Modelul de memorie
Valori
Operatii
Expresii si instructiuni
Sintaxa
Semantica
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 51 / 55
Testarea algoritmilor cu K Framework
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 52 / 55
Testarea algoritmilor cu K Framework
alki dfsrec.alk \
--init="D |-> { n -> 3
a -> [ < 1, 2 >, < 2, 0 >, < 0 > ] }
i0 |-> 1"
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 53 / 55
Testarea algoritmilor cu K Framework
D |-> { (n -> 3) (a -> ([ (< 1, 2 >), (< 2, 0 >), (< 0 >) ])) }
i0 |-> 1
reached |-> [ 1, 1, 1 ]
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 54 / 55
Testarea algoritmilor cu K Framework
Demo
S
t. Ciob
ac
a, D. Lucanu (FII - UAIC) Limbajul Algoritmic PA 2016/2017 55 / 55