420 likes | 734 Views
Algoritmi si programare (AP). Dorel Lucanu http://www.infoiasi.ro/~dlucanu/. Obiective. Algoritmi: însuşirea unei gândiri algoritmice dezvoltarea abilitaţilor de proiectare de soluţii algoritmice însuşirea tehnicilor de utilizare a principalelor structuri de date
E N D
Algoritmi si programare (AP) Dorel Lucanu http://www.infoiasi.ro/~dlucanu/
Obiective • Algoritmi: • însuşirea unei gândiri algoritmice • dezvoltarea 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 programare • descrierea principalelor structuri de date • însuşirea tehnicilor de bază în proiectarea programelor Algoritmica si programare
Agenda disciplina • Algoritmi • Limbaj algoritmic, tablouri, structuri statice, structuri înlănţuite • liste liniare • arbori binari, heap-uri, union-find • grafuri (ca structuri de date) • sortare, căutare • paradigme • Programare • prezentarea graduata a limbajului C (ISO Standard) cu accent pe implementarea structurilor de date si a soluţiilor prezentate in prima parte Algoritmica si programare
Evaluare • conditii • activitatea la seminar (AS) • activitatea la laborator (AL) • testele scrise (TS) • criterii de promovare • AS 5, AL 6, TS 4 • forme • AS: întrebări, participare la discuţii, soluţii originale • AL: 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ă. 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) Algoritmica si programare
Bibliografie • T.H. Cormen, C.E. Leiserson, R.L. Rivest: Introducere in Algoritmi, Computer Libris Agora, 2000 • Herbert Schildt: C Manual Complet, Bucuresti, Ed. Teora, 1998 • resurse electronice • a se consulta pagina cursului http://thor.info.uaic.ro/~dlucanu/ap/ap.html Algoritmica si programare
Curs 1 - Agenda • limbaj algoritmic • tablouri • structuri • calculul unui program • problema rezolvata de un program • timpul de executie Algoritmica si programare
Algoritm • algoritm = o secventa finita de pasi aranjata intr-o ordine logica specifica cu proprietatea ca, atunci cand este executata, produce o solutie corecta la o problema data. • exemplu: reteta culinara • algoritmcalculator (“computer algorithm”) = un algoritm pentru care secventa de pasi este executata de un calculator • limbajalgoritmic = un limbaj cu care sunt descrisi algoritmii Algoritmica si programare
Tip de date: definitii • tip de date = colectie de entitati de tip data (obiecte reprezentabile in memoria calculatorului) si un set de operatii peste aceste obiecte • tip de date abstract = tip de data organizat in asa fel incat specificarea obiectelor si specificarea operatiilor este independenta de reprezentarea obiectelor si implementarea operatiilor • model standard = model utilizat pentru specificarea tipurilor de data abstracte (bazat pe notatii matematice) Algoritmica si programare
Tip de date abstract: exemple • INT • obiecte: int = {. . . –2, –1, 0, 1, 2, . . . } • operatii: • adunarea • intrare: a, b int • iesire: a + b • . . . • BOOL • obiecte: bool = {false, true} • operatii: • conjunctia • intrare: a, b bool • iesire: a b (a and b) • . . . Algoritmica si programare
Limbaj algoritmic • modelarea memoriei • tipuri de date elementare • instructiuni • tipuri de date structurate de nivel jos • calcul • timpul de executie Algoritmica si programare
Modelarea memoriei x p adr adr int adr int* int *p • variabila = (nume, atribute, adresa) • pointer Algoritmica si programare
Modelarea memoriei x p adr int int *p adr int* adr • notatia grafica scurta Algoritmica si programare
Tipuri de date elementare • numere intregi • numere rationale • valori booleene • pointeri • ... Algoritmica si programare
Atribuirea latura int lung_drum real • sintaxa variabila expresie latura 217 lung_drum sqrt(5.0)*latura 217 sqrt(5.0)*217 485.2267 Algoritmica si programare
Atribuirea p int *p adr int* adr • Cazul pointerilor *p 147 147 Algoritmica si programare
if • sintaxa if expresie then secventa_instructiuni else secventa_instructiuni • semantica if e then i1 else i2 • se evalueaza e • daca rezultatul este adevarat atunci executa i1 altfel executa i2 Algoritmica si programare
if - exemple • calcululul min(a,b) - varianta 1 if (a < b) then min a else min b • calcululul min(a,b) - varianta 1 min a if (b < a) then min b Algoritmica si programare
while • sintaxa while (expresie) do secventa_instructiuni • semantica while (e) do i1 ... ik • se evalueaza e • daca rezultatul este adevarat • se executa instructiunile i1, ..., ik • se reia procesul de la pasul 1 • altfel, executia instructiunii while se termina Algoritmica si programare
while - exemple • cel mai mic k a.i. 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 Algoritmica si programare
repeat • sintaxa repeat secventa_instructiuni until expresie • semantica repeat i1 ... ik until (e) • se executa instructiunile i1, ..., ik • se evalueaza e • daca rezultatul este fals, se reia procesul de la pasul 1 • altfel, executia instructiunii repeat se termina Algoritmica si programare
repeat - exemple • 7k - inlocuirea lui while cu repeat k 0 sapte_la_k 1 repeat k k+1 sapte_la_k sapte_la_k * 7 until (sapte_la_k n) • pentru n = 0 nu mai obtinem rezultatul corect Algoritmica si programare
for – versiunea 1 • sintaxa for variabila expresie1 to expresie2 do secventa_instructiuni • semantica i e1 while (i <= e2) do i1 ... ik i succ(i) • for i e1 to e2 do • i1 • ... • ik Algoritmica si programare
for - exemple • Exemplu: s = 1 + 2 + ... + n s 0 for i 1 to n do s s + i • Exemplu: a = 2k a 1 for i 1 to k do a a * 2 Algoritmica si programare
for – versiunea 2 for variabila expresie1 downto expresie2 do secventa_instructiuni • semantica • i e1 • while (i >= e2) do • i1 • ... • ik • i pred(i) for i e1 downto e2 do i1 ... ik Algoritmica si programare
for - exemple • Exemplu: s = n + n-1 + ... + 1 s 0 for i n downto 1 do s s + i Algoritmica si programare
Subprograme - proceduri • sintaxa procedure nume(parametri) secventa_instructiuni end • clasificarea parametrilor: • de intrare • de iesire • de intrare/iesire Algoritmica si programare
Subprograme - exemple • interschimbarea valorilor a doua variabile procedure swap (a, b) temp a a b b temp end • utilizare x 7 y 23 swap(x,y) // x = 23, y =7 Algoritmica si programare
Subprograme - functii • sintaxa function nume(parametri) secventa_instructiuni return expresie end • pot exista mai multe instructiuni return Algoritmica si programare
Subprograme - exemple • functia care intoarce suma function suma(n) s 0 for i 1 to n do s s + i return s end • utilizare v suma(m) – m/2 Algoritmica si programare
Exceptii • sintaxa throw mesaj if expresie then throw mesaj • exemplu if (b = 0) then throw “impartire prin 0” x a/b Algoritmica si programare
Calculul unui program x 1 i 2 while (i < 4) do x X*i i i+1 fiecare instructiune = o unitate de timp timpul de executie T = 9 Algoritmica si programare
Calculul unui program • linie in tabel = configuratie (c) • obtinerea unei linii din precedenta: relatie de tranzitie (ci-1| ci) • calcul • problema • calcul generat de instanta • problema rezolvata de un program Algoritmica si programare
Tablouri a int[3] int a[0] int a[1] int a[2] int a[3] 14 7 a[1] 7 a[2] a[1] * 2 Algoritmica si programare
Tablouri - exemple • suma primelor n elemente dintr-un tablou s 0 for i 0 to n-1 do s s + a[i] • cautarea unui element x intr-un tablou i 0 while (i < n-1 and a[i] != x) do i i + 1 if (a[i] = x) then poz i else poz -1 Algoritmica si programare
Structuri statice (articole) d data 1..31 d.zi 1..12 d.ln int d.an data calendaristica: zi, luna, an 6 2004 11 d.ln 11 d.zi 6 d.an 2004 Algoritmica si programare
Structuri si pointeri d data* data *d 1..31 d->zi 1..12 d->ln int d->an Algoritmica si programare
Liste simplu inlantuite prim ultim e0 ei … … en-1 curent • un nod v este o structura cu doua campuri: v.inf - memoreaza informatia din nod v.succ – adresa nodului urmator • o lista este identificata de 2 pointeri: prim si ultim • la un moment dat se proceseaza nodul curent • operatii: inserare/eliminare noduri, parcurgere Algoritmica si programare
Timpul de executie in cazul cel mai nefavorabil i 0 while (i < n-1 and a[i] != x) do i i + 1 if (a[i] = x) then poz i else poz -1 • a = (4, 1, 5, 9, 6) • daca x = 4, atunci T = 1 + 1 + 2 = 4 (cel mai favorabil) • daca x = 6 sau x = 3, atunci T = 1 + 4*2 + 2 = 11 (cel mai nefavorabil) • in general: T(n) = 1 + 2*(n-1) + 2 = 2*n+1 • n – dimensiunea instantei problemei Algoritmica si programare
Notatia O(f(n)) • functii f(n) de argument numar natural si valori numere reale pozitive • O(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) Algoritmica si programare