Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în...

40
Algoritmi si programare (AP) Dorel Lucanu http://www.infoiasi.ro/~dlucanu/

Transcript of Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în...

Page 1: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Algoritmi si programare (AP)

Dorel Lucanuhttp://www.infoiasi.ro/~dlucanu/

Page 2: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Obiective

Algoritmi: însuşirea unei gândiri algoritmicedezvoltarea abilitaţilor de proiectare de soluţii algoritmice însuşirea tehnicilor de utilizare a

principalelor structuri de date evaluarea timpului de execuţie in cazul cel mai nefavorabil

Programare iniţiere în utilizarea unui limbaj de programaredescrierea principalelor structuri de dateînsuşirea tehnicilor de bază în proiectarea programelor

Page 3: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Agenda disciplina

AlgoritmiLimbaj algoritmic, tablouri, structuri statice, structuri înlănţuiteliste liniarearbori binari, heap-uri, union-findgrafuri (ca structuri de date)sortare, căutareparadigme

Programareprezentarea graduata a limbajului C (ISO Standard) cu accent pe implementareastructurilor de date si a soluţiilor prezentatein prima parte

Page 4: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Evaluare

conditiiactivitatea la seminar (AS)activitatea la laborator (AL)testele scrise (TS)

criterii de promovareAS ≥ 5, AL ≥ 6, TS ≥ 4

formeAS: întrebări, participare la discuţii, soluţii

originaleAL: fiecare tema de laborator va fi notata cu note de la 1 la 10 TS: 2 teste scrise (săpt. 7,13), fiecare test conţinând 8 întrebări grilă şi o problemă.

Page 5: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

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)

Page 6: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Bibliografie

T.H. Cormen, C.E. Leiserson, R.L. Rivest: Introducere in Algoritmi, Computer LibrisAgora, 2000Herbert Schildt: C Manual Complet, Bucuresti, Ed. Teora, 1998resurse electronice

a se consulta pagina cursuluihttp://thor.info.uaic.ro/~dlucanu/ap/ap.html

Page 7: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Curs 1 - Agenda

limbaj algoritmictablouristructuricalculul unui programproblema rezolvata de un programtimpul de executie

Page 8: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Algoritm

algoritm = o secventa finita de pasi aranjataintr-o ordine logica specifica cu proprietatea ca, atunci cand este executata, produce o solutiecorecta la o problema data.exemplu: reteta culinara

algoritm calculator (“computer algorithm”) = un algoritm pentru care secventa de pasi esteexecutata de un calculator

limbaj algoritmic = un limbaj cu care suntdescrisi algoritmii

Page 9: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Tip de date: definitii

tip de date = colectie de entitati de tip data (obiecte reprezentabile in memoriacalculatorului) si un set de operatii pesteaceste obiecte

tip de date abstract = tip de data organizatin asa fel incat specificarea obiectelor sispecificarea operatiilor este independenta de reprezentarea obiectelor si implementareaoperatiilor

model standard = model utilizat pentruspecificarea tipurilor de data abstracte (bazatpe notatii matematice)

Page 10: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Tip de date abstract: exemple

INTobiecte: int = {. . . –2, –1, 0, 1, 2, . . . }operatii:

adunareaintrare: a, b ∈ intiesire: a + b

. . .BOOL

obiecte: bool = {false, true}operatii:

conjunctiaintrare: a, b ∈ booliesire: a ∧ b (a and b)

. . .

Page 11: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Limbaj algoritmic

modelarea memorieitipuri de date elementareinstructiunitipuri de date structurate de nivel joscalcultimpul de executie

Page 12: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

variabila = (nume, atribute, adresa)

Modelarea memoriei

xadr

int

*p int

p int*

adradr

pointer

Page 13: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

notatia grafica scurta

Modelarea memoriei

xadr

int

adr

*p int

p int*adr

Page 14: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Tipuri de date elementare

numere intreginumere rationalevalori booleenepointeri...

Page 15: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Atribuirea

sintaxa⟨variabila⟩ ← ⟨expresie⟩

latura ← 217lung_drum ← sqrt(5.0)*latura

latura int

lung_drum real

217sqrt(5.0)*217485.2267

Page 16: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Atribuirea

Cazul pointerilor*p ← 147

adr

*p int

p int*adr

147

Page 17: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

if

sintaxaif ⟨expresie⟩then ⟨secventa_instructiuni⟩else ⟨secventa_instructiuni⟩

semanticaif ethen i1else i2

1. se evalueaza e2. daca rezultatul este adevarat atunci executa

i1altfel executa i2

Page 18: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

if - exemple

calcululul min(a,b) - varianta 1if (a < b)then min ← aelse min ← b

calcululul min(a,b) - varianta 1min ← aif (b < a) then min ← b

Page 19: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

while

sintaxawhile (⟨expresie⟩) do

⟨secventa_instructiuni⟩semanticawhile (e) do

i1...ik

1. se evalueaza e2. daca rezultatul este adevarat

a) se executa instructiunile i1, ..., ikb) se reia procesul de la pasul 1

3. altfel, executia instructiunii while se termina

Page 20: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

while - exemple

cel mai mic k a.i. 7k ≥ n pentru un n datk ← 0sapte_la_k ← 1while (sapte_la_k < n) do

k ← k+1sapte_la_k ← sapte_la_k * 7

Page 21: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

repeat

sintaxarepeat

⟨secventa_instructiuni⟩until ⟨expresie⟩

semanticarepeat

i1...ik

until (e)1. se executa instructiunile i1, ..., ik2. se evalueaza e3. daca rezultatul este fals, se reia procesul

de la pasul 14. altfel, executia instructiunii repeat se

termina

Page 22: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

repeat - exemple

7k - inlocuirea lui while cu repeat k ← 0sapte_la_k ← 1repeat

k ← k+1sapte_la_k ← sapte_la_k * 7

until (sapte_la_k ≥ n)

pentru n = 0 nu mai obtinem rezultatul corect

Page 23: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

for – versiunea 1

sintaxafor ⟨variabila⟩ ← ⟨expresie1⟩ to ⟨expresie2⟩ do

⟨secventa_instructiuni⟩semantica

for i ← e1 to e2 doi1...ik

i ← e1while (i <= e2) doi1...iki ← succ(i)

Page 24: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

for - exemple

Exemplu: s = 1 + 2 + ... + ns ← 0for i ← 1 to n do

s ← s + i Exemplu: a = 2k

a ← 1for i ← 1 to k do

a ← a * 2

Page 25: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

for – versiunea 2

for ⟨variabila⟩ ← ⟨expresie1⟩ downto ⟨expresie2⟩ do⟨secventa_instructiuni⟩

semantica

for i ← e1 downto e2 doi1...ik

i ← e1while (i >= e2) do

i1...iki ← pred(i)

Page 26: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

for - exemple

Exemplu: s = n + n-1 + ... + 1s ← 0for i ← n downto 1 do

s ← s + i

Page 27: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Subprograme - proceduri

sintaxaprocedure ⟨nume⟩(⟨parametri⟩)

⟨secventa_instructiuni⟩end

clasificarea parametrilor:de intrarede iesirede intrare/iesire

Page 28: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Subprograme - exemple

interschimbarea valorilor a doua variabileprocedure swap (a, b)temp ← aa ← bb ← temp

endutilizarex ← 7y ← 23swap(x,y)// x = 23, y =7

Page 29: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Subprograme - functii

sintaxafunction ⟨nume⟩(⟨parametri⟩)

⟨secventa_instructiuni⟩return ⟨expresie⟩

endpot exista mai multe instructiuni return

Page 30: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Subprograme - exemple

functia care intoarce sumafunction suma(n)

s ← 0for i ← 1 to n do

s ← s + ireturn s

endutilizarev ← suma(m) – m/2

Page 31: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Exceptii

sintaxathrow ⟨mesaj⟩if ⟨expresie⟩ then throw ⟨mesaj⟩

exempluif (b = 0) then throw “impartire prin 0”x ← a/b

Page 32: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Calculul unui program

x ← 1i ← 2while (i < 4) do

x ← X*ii ← i+1

fiecare instructiune= o unitate de timptimpul de executieT = 9

32i < 46

21i < 43

46i < 49

36i ← i+18

32x ← x*i7

22i ← i+15

21x ← x*i4

-1i ← 22

--x ← 11

ixInstruct./exppas

Page 33: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Calculul unui program

linie in tabel = configuratie (c)obtinerea unei linii din precedenta = relatie de tranzitie: ci-1 → ci

calculfinit: c0 → c1 → c2 →… → cn

infinit: c0 → c1 → c2 →…problema

(intrare, iesire)un caz particular de intrare se numeste instanta

calcul generat de instantao instanta det. c0 si c0 det. unic un calcul

problema rezolvata de un programcalculul generat de c0 este finitconfiguratia finala cn contine iesirea

Page 34: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Tablouri

a int[3]

a[0] int

a[1] int

a[2] int

a[1] ← 7a[2] ← a[1] * 2

int a[3]

7 14

Page 35: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Tablouri - exemple

suma primelor n elemente dintr-un tablous ← 0for i ← 0 to n-1 do

s ← s + a[i]cautarea unui element x intr-un tablou

i ← 0while (i < n-1 and a[i] != x) do

i ← i + 1if (a[i] = x)then poz ← ielse poz ← -1

Page 36: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

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 ← 11d.zi ← 6d.an ← 2004

116 2004

Page 37: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Structuri si pointeri

*pd data

p->zi 1..31

p->ln 1..12

p->an int

pd data*

Page 38: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Liste simplu inlantuite

un nod v este o structura cu doua campuri:v.inf - memoreaza informatia din nodv.succ – adresa nodului urmatoro lista este identificata de 2 pointeri: prim siultimla un moment dat se proceseaza nodul curentoperatii: inserare/eliminare noduri, parcurgere

e0 ei en-1…

prim

curent

ultim

Page 39: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Timpul de executie in cazul cel mai nefavorabil

i ← 0while (i < n-1 and a[i] != x) do

i ← i + 1if (a[i] = x)then poz ← ielse poz ← -1a = (4, 1, 5, 9, 6)daca x = 4, atunci T = 1 + 1 + 2 = 4 (cel maifavorabil)daca x = 6 sau x = 3, atunciT = 1 + 4*2 + 2 = 11 (cel mai nefavorabil)in general: T(n) = 1 + 2*(n-1) + 2 = 2*n+1 n – dimensiunea instantei problemei

Page 40: Algoritmi si programare (AP)dlucanu/cursuri/ap/resurse/... ·  · 2006-10-29iniţiere în utilizarea unui limbaj de programare ... C Manual Complet, Bucuresti, Ed. Teora, 1998 ...

Dorel Lucanu Algoritmica si programare

Notatia O(f(n))

functii f(n) de argument numar natural si valorinumere reale pozitiveO(f(n)) = clasa functiilor marginite superior de f(n)

g(n) ∈ O(f(n)) daca exista c > 0, n0 a.i.g(n) <= c*f(n) pentru orice n >= n0

functiile constante ∈ O(1)polinoamele de grad 1 ∈ O(n) polinoamele de grad 2 ∈ O(n2)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)