Curs 1. Algoritmi. Introducere. Limbaj algoritmic.

Octombrie, 2013

Cont ¸inut

Detalii curs

Curs1 Algoritmi-Introducere Limbaj algoritmic Tipuri de date Instruct ¸iuni Tablouri

Structuri de date

Curs 1

Octombrie, 2013

2 / 59

Organizare

Pagina cursului www.info.uaic.ro/~sd Conf. Dr. Cristian Gat ¸u
email: cgatu@info.uaic.ro cabinet: C212 (parter); tel: 0232-201546 url: www.infoiasi.ro/~cgatu consultat ¸ii: vineri, 10:00-12:00

Lect. Dr. M˘ ad˘ alina R˘ aschip
email: mionita@info.uaic.ro cabinet: C416; tel: 0232-202469 url: www.info.uaic.ro/~mionita consultat ¸ii: luni, 10:00-12:00

Structuri de date

Curs 1

Octombrie, 2013

3 / 59

Obiective

ˆ ınsu¸ sirea unei gˆ andiri algoritmice dezvoltarea abilit˘ a¸ tilor de proiectare de solut ¸ii algoritmice ˆ ınsu¸ sirea tehnicilor de utilizare a principalelor structuri de date evaluarea timpului de execut ¸ie ˆ ın cazul cel mai nefavorabil

Structuri de date

Curs 1

Octombrie, 2013

4 / 59

Abilit˘ a¸ ti

Gˆ andire algoritmic˘ a: scriere de programe ˆ Int ¸elegerea limbajului algoritmic: citire de programe ˆ Int ¸elegerea puterii ¸ si a limitelor calculului Capacitatea de reprezentare a descrierii unei probleme ˆ ıntr-un cadru computat ¸ional

Structuri de date

Curs 1

Octombrie, 2013

5 / 59

Cunoa¸ stere

Declarativ˘ a √ x = y a.ˆ ı. 2 y = x , y >= 0

Imperativ˘ a
Start cu G arbitrar if G 2 ≈ x STOP else G = (G + x /G )/2 Repeat step 2

(definit ¸ie/axiom˘ a)

(descriere deductiv˘ a)

Structuri de date

Curs 1

Octombrie, 2013

6 / 59

Cont ¸inutul cursului
Algoritmi. Limbaj algoritmic. Tablouri ¸ si structuri Analiza algoritmilor Recursivitate. Analiza aloritmilor recursivi. Teorema master Liste liniare. Liste liniare ordonate. Stiva. Coada Coada cu priorit˘ a¸ ti. Max-heap. Colect ¸ii de mult ¸imi disjuncte Arbori binari Grafuri Sortare intern˘ a C˘ autare. Arbori binari de c˘ autare Arbori de c˘ autare echilibrat ¸i (arbori AVL, ro¸ su-negru, 2-3 arbori, treaps ) Tabele de dispersie. Rezolvarea coliziunilor
Structuri de date Curs 1 Octombrie, 2013 7 / 59

Bibliografie

T.H. Cormen, C.E. Leiserson, R.L. Rivest: Introducere ˆ ın algoritmi, Libris Agora, 2000 D. Lucanu, M. Craus: Proiectarea algoritmilor, Polirom, 2008 S. Skiena: The Algorithm Design Manual, Springer, 2008 R. Sedgewick, K. Wayne: Algorithms, 4th ed., Addison-Wesley, 2011

Structuri de date

Curs 1

Octombrie, 2013

8 / 59

Cursuri online
Algorithms: Design and Analysis, Part 1 https://www.coursera.org/course/algo Algorithms, Part I https://www.coursera.org/course/algs4partI Introduction to Algorithms http://ocw.mit.edu/courses/ electrical-engineering-and-computer-science/ 6-006-introduction-to-algorithms-fall-2011/

Structuri de date

Curs 1

Octombrie, 2013

9 / 59

Evaluare

forme:
activitatea la seminar(AS)
patru teste punctate cu note 1-10 participarea activ˘ a la seminarii (maxim 2 puncte bonus) nota seminar: 90% teste + 10% prezent ¸a + 20% bonus

testele scrise (TS)
2 teste scrise (sapt. 8, 15-16)

criterii de promovare:
AS >= 6, TS >= 4

Structuri de date

Curs 1

Octombrie, 2013

10 / 59

Evaluare

Normele ECTS (European Credit Transfer System) Punctaj Final (PF) = 50%AS + 50%TS Nota final˘ a
<= 4 dac˘ a sunt ˆ ındeplinite condit ¸iile ¸ si NU sunt ˆ ındeplinite criteriile de promovare, = 10 dac˘ a PF este in primii 5% din cei promovat ¸i (A) = 9 urm˘ atorii 10% din cei promovat ¸i (B) = 8 urm˘ atorii 20% din cei promovat ¸i (C) = 7 urm˘ atorii 30% din cei promovat ¸i (D) = 6 urm˘ atorii 25% din cei promovat ¸i (E) = 5 ultimii 10% din cei promovat ¸i

Structuri de date

Curs 1

Octombrie, 2013

11 / 59

Cont ¸inut

Detalii curs

Curs1 Algoritmi-Introducere Limbaj algoritmic Tipuri de date Instruct ¸iuni Tablouri

Structuri de date

Curs 1

Octombrie, 2013

12 / 59

Cont ¸inut

Detalii curs

Curs1 Algoritmi-Introducere Limbaj algoritmic Tipuri de date Instruct ¸iuni Tablouri

Structuri de date

Curs 1

Octombrie, 2013

13 / 59

Algoritmi

Problem˘ a, Solut ¸ie Algoritm: o secvent ¸˘ a finit˘ a de pa¸ si aranjat˘ aˆ ıntr-o ordine logic˘ a specific˘ a, cu proprietatea c˘ a, atunci cˆ and este executat˘ a, produce o solut ¸ie pentru o problem˘ a dat˘ a. Exemple: ret ¸eta culinar˘ a, algoritmul lui Euclid, ciurul lui Eratostene

Algoritm calculator (”computer algorithm”) = un algoritm pentru care secvent ¸a de pa¸ si este executat˘ a de un calculator Limbaj Algoritmic = un limbaj folosit pentru descrierea algoritmilor

Structuri de date

Curs 1

Octombrie, 2013

14 / 59

Algoritmi - etimologie

Muhammad ibn Musa al-Khwarizmi - matematician persan; a scris prima carte de algebra (cca 830) metode pentru adunarea, ˆ ınmult ¸irea ¸ si ˆ ımp˘ art ¸irea numerelor
Structuri de date Curs 1 Octombrie, 2013 15 / 59

Algoritmi ¸ si structuri de date
Algoritm: metod˘ a de rezolvare a unei probleme Structuri de date: metod˘ a de a p˘ astra informat ¸ia Algorithms + Data Structures = Programs. — Niklaus Wirth De ce studiem algoritmi?
a rezolva probleme dificile programatori mai buni 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 (creator of Linux) a descori lucruri noi modelele computat ¸ionale ˆ ınlocuiesc modelele matematice profit

Structuri de date

Curs 1

Octombrie, 2013

16 / 59

Exemplu
o secvent ¸˘ a de numere: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Structuri de date

Curs 1

Octombrie, 2013

17 / 59

Exemplu
o secvent ¸˘ a de numere: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... secvent ¸a Fibonacci definit ¸ia matematic˘ a: Fn =   0, 1,  Fn−1 + Fn−2 , if n = 0 if n = 1 if n > 1

Structuri de date

Curs 1

Octombrie, 2013

17 / 59

Exemplu
o secvent ¸˘ a de numere: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... secvent ¸a Fibonacci definit ¸ia matematic˘ a: Fn = 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); }   0, 1,  Fn−1 + Fn−2 , if n = 0 if n = 1 if n > 1

Structuri de date

Curs 1

Octombrie, 2013

17 / 59

Algoritmi - propriet˘ a¸ ti

intrare (input) – zero sau mai multe entit˘ a¸ ti de date furnizate din exterior ie¸ sire (output) – algoritmul produce informat ¸ie terminare – pentru orice intrare, algoritmul execut˘ a un num˘ ar finit de pa¸ si corectitudine – algoritmul se termin˘ a¸ si produce ie¸ sirea corect˘ a pentru orice intrare; spunem c˘ a algoritmul rezolv˘ a problema dat˘ a.

Structuri de date

Curs 1

Octombrie, 2013

18 / 59

Algoritmi - Eficient ¸˘ a

Un algoritm trebuie s˘ a foloseasc˘ a un volum rezonabil de resurse de calcul: memorie ¸ si timp Avem nevoie de algoritmi eficient ¸i pentru:
a salva timpi de a¸ steptare, spat ¸iu de depozitare, consum energie, etc. scalabilitate: putem rezolva probleme de dimensiuni mari cu acelea¸ si resurse (CPU, memorie, disc, etc.) solut ¸ii optimizate

Structuri de date

Curs 1

Octombrie, 2013

19 / 59

Algoritmi - Eficient ¸˘ a

60 Ruby Scheme Python C Java C-gcc

timp (secunde)

40

20

0 20

25

30

35 n

40

45

50

Figure : Execut ¸ia algoritmului recursiv F (Fibonacci)

Comportamentul este diferit ˆ ın funct ¸ie de tipul implement˘ arii; totu¸ si diferent ¸ele nu sunt atˆ at de substant ¸iale =⇒ Problema e algoritmul! (complexitate exponent ¸ial˘ a)

Structuri de date

Curs 1

Octombrie, 2013

20 / 59

Proiectarea algoritmilor

Rezolvarea algoritmic˘ a a problemelor presupune urm˘ atoarele etape: definirea problemei
abstractizeaz˘ a detaliile irelevante

identificarea clasei din care face parte problema ¸ si a unui algoritm de construct ¸ie a solut ¸iei analiza corectitudinii ¸ si a eficient ¸ei algoritmului implementarea algoritmului repet˘ a (optimizare ¸ si generalizare)

Structuri de date

Curs 1

Octombrie, 2013

21 / 59

Descrierea algoritmilor

limbaj natural - u¸ surint ¸˘ aˆ ın exprimare scheme logice: descrieri grafice ale prelucr˘ arilor din algoritm; rar utilizate ˆ ın prezent pseudocod: limbaj artificial bazat pe un vocabular ¸ si o sintax˘ a; mai put ¸in riguros ca un limbaj de programare limbaj de programare - precizie

Structuri de date

Curs 1

Octombrie, 2013

22 / 59

Cont ¸inut

Detalii curs

Curs1 Algoritmi-Introducere Limbaj algoritmic Tipuri de date Instruct ¸iuni Tablouri

Structuri de date

Curs 1

Octombrie, 2013

23 / 59

Limbaj algoritmic

expresiv pentru a descrie algoritmi simplu, pentru a fi u¸ sor de ˆ ınt ¸eles abstract, ˆ ın descrierea algoritmului focusul cade pe gˆ andirea algoritmic˘ a¸ si nu pe detaliile de implementare un model computat ¸ional adecvat pentru analiza complexit˘ a¸ tii algoritmilor, ˆ ın special complexitatea timp

Structuri de date

Curs 1

Octombrie, 2013

24 / 59

Limbaj algoritmic
https://fmse.info.uaic.ro/tools/K/ → examples → alg

Executabil - se pot face experimente cu algoritmii descri¸ si
Structuri de date Curs 1 Octombrie, 2013 25 / 59

Variabil˘ a

Nume Adres˘ a Atribute (tip de date asociat valorilor memorate)

Instant ¸˘ a a variabilei

Structuri de date

Curs 1

Octombrie, 2013

26 / 59

Modelul de memorie

Memoria: structur˘ a liniar˘ a de celule
variabile

pointeri

Structuri de date

Curs 1

Octombrie, 2013

27 / 59

Cont ¸inut

Detalii curs

Curs1 Algoritmi-Introducere Limbaj algoritmic Tipuri de date Instruct ¸iuni Tablouri

Structuri de date

Curs 1

Octombrie, 2013

28 / 59

Tip de date

Domeniu (colect ¸ia de obiecte) Operat ¸ii Categorii de tipuri de date:
Tipuri de date elementare Tipuri de date structurate de nivel jos
operat ¸iile la nivel de component˘ a

Tipuri de date de nivel ˆ ınalt
operat ¸iile implementate de algoritmi utilizator

Structuri de date

Curs 1

Octombrie, 2013

29 / 59

Tipuri de date elementare

Numere ˆ ıntregi
valori: numere ˆ ıntregi operat ¸ii: +, -, ...

Numere reale
valori: numere rat ¸ionale operat ¸ii: +, -, ...

Valori booleene
valori: true, false operat ¸ii: and, or, not

Structuri de date

Curs 1

Octombrie, 2013

30 / 59

Tipuri de date elementare

Caractere
valori: ’a’, ’b’, ... operat ¸ii: nu exist˘ a

Pointeri
valori: adrese de variabile apart ¸inˆ and altui tip, valoarea NULL operat ¸ii: nu referire indirecta: *p

Structuri de date

Curs 1

Octombrie, 2013

31 / 59

Tipuri de date elementare

Operatori pentru numere ˆ ıntregi:
aritmetici: a+b, a-b, a*b, a/b, a%b relat ¸ionali: a==b, a!=b, a<b, a<=b, a>b, a>=b cost uniform: O(1) cost logaritmic

Structuri de date

Curs 1

Octombrie, 2013

32 / 59

Cont ¸inut

Detalii curs

Curs1 Algoritmi-Introducere Limbaj algoritmic Tipuri de date Instruct ¸iuni Tablouri

Structuri de date

Curs 1

Octombrie, 2013

33 / 59

Instruct ¸iuni

In limbajul algoritmic alg: Stmt : : = Exp ”=” Exp ” ; ” | Exp ” ; ” | ”” ”” | ” ” Stmts ”” | ” w h i l e ” ” ( ” Exp ” ) ” Stmt | ” r e t u r n ” Exps ” ; ” [ s t r i c t ] | Exp ” ( ” I d s ” ) ” ” ” Stmts ” ” | ” i f ” ” ( ” Exp ” ) ” Stmt ” e l s e ” Stmt | ” i f ” ” ( ” Exp ” ) ” Stmt

Structuri de date

Curs 1

Octombrie, 2013

34 / 59

Instruct ¸iuni

Expresii Condit ¸ionale: if-else if Iterative: while repeat for ˆ Intreruperea secvent ¸ei: return

Structuri de date

Curs 1

Octombrie, 2013

35 / 59

Instruct ¸iuni
Atribuirea
Sintaxa: < variabila >←< expresie > Sematica:
se evalueaz˘ a < expresie > ¸ si rezultatul obt ¸inut se memoreaz˘ aˆ ın locat ¸ia desemnat˘ a de < variabila > este singura instruct ¸iune cu ajutorul c˘ areia se poate modifica cont ¸inutul memoriei

Exemplu:
ˆ Inainte de atribuire:

Dup˘ a atribuirea u ← −v ∗ u :

Structuri de date

Curs 1

Octombrie, 2013

36 / 59

Instruct ¸iuni

Atribuirea ˆ ın cazul pointerilor
Sintaxa: ∗ < variabila pointer >←< expresie > Sematica:
se evalueaz˘ a < expresie > ¸ si rezultatul obt ¸inut se memoreaz˘ aˆ ın locat ¸ia de la adresa stocat˘ aˆ ın < variabila pointer >

Exemplu: ∗p ← 10

Structuri de date

Curs 1

Octombrie, 2013

37 / 59

Instruct ¸iuni
if
Sintaxa: if < expresie > then < secventa − instructiuni1 > else < secventa − instructiuni2 > if < expresie > then < secventa − instructiuni1 > if < expresie > then < secventa − instructiuni1 >; Observat ¸ie: < expresie > este o expresie cu rezultat boolean dup˘ a evaluare Semantica:
Se evalueaz˘ a < expresie >. Dac˘ a rezultatul este true, atunci se execut˘ a < secventa − instructiuni1 > iar dac˘ a rezultatul este false, atunci se execut˘ a < secventa − instructiuni2 > dup˘ a care instruct ¸iunea if se termin˘ a
Structuri de date Curs 1 Octombrie, 2013 38 / 59

Exemplu if

Calcululul minimului a dou˘ a numere: if a < b then min ← a else min ← b sau min ← a if b < a then min ← b

Structuri de date

Curs 1

Octombrie, 2013

39 / 59

Instruct ¸iuni

while
Sintaxa: while < expresie > do < secventa − instructiuni > Semantica:
Se evalueaz˘ a < expresie > Dac˘ a rezultatul este true atunci se execut˘ a < secventa − instructiuni > dup˘ a care se reia procesul ˆ ıncepˆ and cu pasul 1. Dac˘ a rezultatul este false atunci execut ¸ia instruct ¸iunii while se termin˘ a.

Structuri de date

Curs 1

Octombrie, 2013

40 / 59

Exemplu while

cel mai mic k astfel ˆ ıncˆ at 7k >= 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

Structuri de date

Curs 1

Octombrie, 2013

41 / 59

Instruct ¸iuni
repeat
Sintaxa: repeat < secventa − instructiuni > until < expresie >; Semantica: Instruct ¸iunea: repeat S until e ; simuleaz˘ a execut ¸ia urm˘ atorului program: S while not e do S

Structuri de date

Curs 1

Octombrie, 2013

42 / 59

Exemplu repeat

cel mai mic k astfel ˆ ıncˆ at 7k >= n pentru un n dat k←0 sapte la k ← 1 repeat k ←k +1 sapte la k ← sapte la k ∗ 7 until sapte la k >= n;

Structuri de date

Curs 1

Octombrie, 2013

43 / 59

Instruct ¸iuni

for
Sintaxa: for < variabila >←< expresie1 > to to < expresie2 > do < secventa − instructiuni > sau for < variabila >←< expresie1 > downto to < expresie2 > do < secventa − instructiuni > Observat ¸ie: < variabila > este o variabil˘ a de tip ˆ ıntreg, iar < expresie1 > ¸ si < expresie2 > sunt expresii cu rezultat ˆ ıntreg dup˘ a evaluare

Structuri de date

Curs 1

Octombrie, 2013

44 / 59

Instruct ¸iuni

for
Semantica: for i ← e 1 > to e 2 > do S este echivalent˘ a cu: i ← e1 temp ← e 2 while i <= temp do S i ←i +1

Structuri de date

Curs 1

Octombrie, 2013

45 / 59

Instruct ¸iuni

for
Semantica: for i ← e 1 > downto e 2 > do S este echivalent˘ a cu: i ← e1 temp ← e 2 while i >= temp do S i ←i −1

Structuri de date

Curs 1

Octombrie, 2013

46 / 59

Subprograme

Limbajul este modular: un program cont ¸ine un num˘ ar de module Un modul ˆ ın limbajul prezentat este identificat cu un subprogram Subprograme:
Proceduri Funct ¸ii

Structuri de date

Curs 1

Octombrie, 2013

47 / 59

Subprograme

Proceduri:
Sintaxa: procedure nume(lista-parametri-formali) secventa-instructiuni end procedure Apel: NUME(lista-parametri-actuali)
interfat ¸a ˆ ıntre o procedur˘ a¸ si modulul care o apeleaz˘ a se realizeaz˘ a doar prin intermediul parametrilor ¸ si a variabilelor globale

Structuri de date

Curs 1

Octombrie, 2013

48 / 59

Proceduri

Exemplu: procedure swap(x, y) aux ← x x ←y y ← aux end procedure SWAP(a, b) SWAP(b, c)

Structuri de date

Curs 1

Octombrie, 2013

49 / 59

Subprograme

Funct ¸ii:
Sintaxa: function nume(lista-parametri-formali) secventa-instructiuni end function secventa-instructiuni cont ¸ine m˘ acar o instruct ¸iune return < expr > Apel: NUME(lista-parametri-actuali) utilizat ˆ ıntr-o expresie: valoarea ˆ ıntoars˘ a de funct ¸ie este cea obt ¸inut˘ a prin evaluarea < expr >

Structuri de date

Curs 1

Octombrie, 2013

50 / 59

Funct ¸ii

Exemplu: function max3(x, y, z) temp ← x y > temp temp ← y if z > temp then temp ← z return temp end function max3(a, b, c) 2*max3(a, b, c) > 5

Structuri de date

Curs 1

Octombrie, 2013

51 / 59

Cont ¸inut

Detalii curs

Curs1 Algoritmi-Introducere Limbaj algoritmic Tipuri de date Instruct ¸iuni Tablouri

Structuri de date

Curs 1

Octombrie, 2013

52 / 59

Tablouri

Ansamblu omogen de variabile numite componentele tabloului Toate componentele apart ¸in aceluia¸ si tip Componentele sunt identificate cu ajutorul indicilor Tablourile sunt utilizate pentru a reprezenta mult ¸imi, secvent ¸e (ordinea elementelor este important˘ a), matrici Tablourile pot fi:
unidimensionale (1-dimensionale) bidimensionale (2-dimensionale)

Structuri de date

Curs 1

Octombrie, 2013

53 / 59

Tablouri unidimensionale

Structuri de date

Curs 1

Octombrie, 2013

54 / 59

Tablouri unidimensionale

Memoria este o secvent ¸˘ a contigu˘ a de locat ¸ii Ordinea de memorare – ordinea indicilor Operat ¸iile se realizeaz˘ a prin intermediul componentelor Exemple: for i ← 0 to n − 1 do a [i ] ← 0 for i ← 0 to n − 1 do c [i ] ← a[i ] + b [i ] Costul operat ¸iilor
a[i ] : O (1) a[i ] ← v : O (1)

Structuri de date

Curs 1

Octombrie, 2013

55 / 59

Tablouri bidimensionale

Structuri de date

Curs 1

Octombrie, 2013

56 / 59

Tablouri bidimensionale

Memorie contigu˘ a de mxn locat ¸ii Componentele sunt identificate cu ajutorul a 2 indici:
primul indice are valori {0, 1, . . . , m − 1} al doilea indice are valori {0, 1, . . . , n − 1} variabilele componente : a[0, 0], a[0, 1], . . . , a[0, n − 1], a[1, 0], a[1, 1], . . . , a[1, n − 1], . . . , a[m − 1, 0], a[m − 1, 1], . . . , a[m − 1, n − 1]

Ordinea de memorare a componentelor este dat˘ a de ordinea lexicografic˘ a a indicilor

Structuri de date

Curs 1

Octombrie, 2013

57 / 59

Tablouri bidimensionale

Cu analogia de la matrici, un tablou 2-dimensional poate fi privit ca un tablou 1-dimensional ˆ ın care fiecare component˘ a este un tablou 1-dimensional. Notat ¸ie: a[0][0], a[0][1], . . . , a[0][n − 1], . . . , a[m − 1][0], a[m − 1][1], . . . , a[m − 1][n − 1]

Structuri de date

Curs 1

Octombrie, 2013

58 / 59

Tablouri bidimensionale

Operat ¸iile cu tablori 2-dimensionale se realizeaz˘ a prin intermediul componentelor for i ← 0 to m − 1 do for j ← 0 to n–1 do c [i , j ] ← 0 for k ← 0 to p –1 do c [i , j ] ← c [i , j ] + a[i , k ] ∗ b [k , j ]

Structuri de date

Curs 1

Octombrie, 2013

59 / 59