Sunteți pe pagina 1din 65

Curs 1. Algoritmi. Introducere. Limbaj algoritmic.

Octombrie, 2013

Cont inut

Detalii curs

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

Structuri de date

Curs 1

Octombrie, 2013

2 / 63

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 / 63

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 / 63

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 / 63

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

(denit ie/axiom a)

(descriere deductiv a)

Structuri de date

Curs 1

Octombrie, 2013

6 / 63

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 / 63

Bibliograe

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 / 63

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 / 63

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 / 63

Evaluare

Normele ECTS (European Credit Transfer System) Punctaj Final (PF) = 50%AS + 50%TS Nota nal 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 / 63

Cont inut

Detalii curs

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

Structuri de date

Curs 1

Octombrie, 2013

12 / 63

Cont inut

Detalii curs

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

Structuri de date

Curs 1

Octombrie, 2013

13 / 63

Algoritmi

Problem a, Solut ie Algoritm: o secvent a nit a de pa si aranjat a ntr-o ordine logic a specic 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 / 63

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 / 63

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 dicile programatori mai buni I will, in fact, claim that the dierence 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 prot

Structuri de date

Curs 1

Octombrie, 2013

16 / 63

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

Structuri de date

Curs 1

Octombrie, 2013

17 / 63

Exemplu
o secvent a de numere: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... secvent a Fibonacci denit ia matematic a: Fn = 0, 1, Fn1 + Fn2 , if n = 0 if n = 1 if n > 1

Structuri de date

Curs 1

Octombrie, 2013

17 / 63

Exemplu
o secvent a de numere: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... secvent a Fibonacci denit 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, Fn1 + Fn2 , if n = 0 if n = 1 if n > 1

Structuri de date

Curs 1

Octombrie, 2013

17 / 63

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 nit 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 / 63

Algoritmi - Ecient a

Un algoritm trebuie s a foloseasc a un volum rezonabil de resurse de calcul: memorie si timp Avem nevoie de algoritmi ecient 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 / 63

Algoritmi - Ecient 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 / 63

Proiectarea algoritmilor

Rezolvarea algoritmic a a problemelor presupune urm atoarele etape: denirea problemei


abstractizeaz a detaliile irelevante

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

Structuri de date

Curs 1

Octombrie, 2013

21 / 63

Descrierea algoritmilor

limbaj natural - u surint a n exprimare scheme logice: descrieri grace ale prelucr arilor din algoritm; rar utilizate n prezent pseudocod: limbaj articial 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 / 63

Cont inut

Detalii curs

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

Structuri de date

Curs 1

Octombrie, 2013

23 / 63

Limbaj algoritmic

expresiv pentru a descrie algoritmi simplu, pentru a 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 / 63

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 / 63

Variabil a

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

Instant a a variabilei

Structuri de date

Curs 1

Octombrie, 2013

26 / 63

Modelul de memorie

Memoria: structur a liniar a de celule


variabile

pointeri

Structuri de date

Curs 1

Octombrie, 2013

27 / 63

Cont inut

Detalii curs

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

Structuri de date

Curs 1

Octombrie, 2013

28 / 63

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 / 63

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 / 63

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 / 63

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 / 63

Cont inut

Detalii curs

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

Structuri de date

Curs 1

Octombrie, 2013

33 / 63

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 / 63

Instruct iuni

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

Structuri de date

Curs 1

Octombrie, 2013

35 / 63

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 modica cont inutul memoriei

Exemplu:
Inainte de atribuire:

Dup a atribuirea u v u :

Structuri de date

Curs 1

Octombrie, 2013

36 / 63

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 / 63

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 / 63

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 / 63

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 / 63

Exemplu while

cel mai mic k astfel nc at 7k >= n pentru un n dat k0 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 / 63

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 / 63

Exemplu repeat

cel mai mic k astfel nc at 7k >= n pentru un n dat k0 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 / 63

Instruct iuni

for
Sintaxa: for < variabila >< expresie1 > to < expresie2 > do < secventa instructiuni > sau for < variabila >< expresie1 > downto < 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 / 63

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 / 63

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 / 63

Subprograme

Limbajul este modular: un program cont ine un num ar de module Un modul n limbajul prezentat este identicat cu un subprogram Subprograme:
Proceduri Funct ii

Structuri de date

Curs 1

Octombrie, 2013

47 / 63

Subprograme

Proceduri:
Sintaxa: Procedure nume (lista-parametri-formali) begin secventa-instructiuni end 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 / 63

Proceduri

Exemplu: Procedure SWAP (x,y) begin aux x x y y aux end Apel: SWAP(a, b) SWAP(b, c)

Structuri de date

Curs 1

Octombrie, 2013

49 / 63

Subprograme

Funct ii:
Sintaxa: Function nume (lista-parametri-formali) begin secventa-instructiuni end 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 / 63

Funct ii
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

Structuri de date

Curs 1

Octombrie, 2013

51 / 63

Cont inut

Detalii curs

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

Structuri de date

Curs 1

Octombrie, 2013

52 / 63

Tablouri

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

Structuri de date

Curs 1

Octombrie, 2013

53 / 63

Tablouri unidimensionale

Structuri de date

Curs 1

Octombrie, 2013

54 / 63

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 / 63

Tablouri bidimensionale

Structuri de date

Curs 1

Octombrie, 2013

56 / 63

Tablouri bidimensionale

Memorie contigu a de mxn locat ii Componentele sunt identicate 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 lexicograc a a indicilor

Structuri de date

Curs 1

Octombrie, 2013

57 / 63

Tablouri bidimensionale

Cu analogia de la matrici, un tablou 2-dimensional poate privit ca un tablou 1-dimensional n care ecare 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 / 63

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 n1 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 / 63

S iruri de caractere

Pot considerate ca ind tablouri unidimensionale cu elemente de tip caracter Constantele sir de caracter se noteaz a utiliz and : S ir-de-caractere Operat ii: Concatenarea, notat a cu +: un sir + alt sir = un siralt sir

Structuri de date

Curs 1

Octombrie, 2013

60 / 63

Structuri
Structura: ansamblu eterogen de variabile numite c ampuri Structura are un nume si ecare camp are propriul nume si propriul tip Exemple: o structura pentru a reprezenta puncte in plan are doua campuri: x si y ; o structura pentru a reprezenta o persoana poate avea trei campuri: nume, varsta, adresa; Numele complet al unui c amp: punct.x, punct.y persoana.nume, persoana.varsta, persoana.adresa.strada dac a p este pointer la persoana: p > varsta

Structuri de date

Curs 1

Octombrie, 2013

61 / 63

Structuri (articole)

Memoria alocat a este o zon a contigu a; elementele sunt memorate n ordinea declar arii n structur a

Structuri de date

Curs 1

Octombrie, 2013

62 / 63

Structuri si pointeri

Structuri de date

Curs 1

Octombrie, 2013

63 / 63