1 / 40

Algoritmi si programare (AP)

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

loman
Download Presentation

Algoritmi si programare (AP)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. Curs 1 - Agenda • limbaj algoritmic • tablouri • structuri • calculul unui program • problema rezolvata de un program • timpul de executie Algoritmica si programare

  8. 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

  9. 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

  10. 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

  11. Limbaj algoritmic • modelarea memoriei • tipuri de date elementare • instructiuni • tipuri de date structurate de nivel jos • calcul • timpul de executie Algoritmica si programare

  12. Modelarea memoriei x p adr adr int adr int* int *p • variabila = (nume, atribute, adresa) • pointer Algoritmica si programare

  13. Modelarea memoriei x p adr int int *p adr int* adr • notatia grafica scurta Algoritmica si programare

  14. Tipuri de date elementare • numere intregi • numere rationale • valori booleene • pointeri • ... Algoritmica si programare

  15. 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

  16. Atribuirea p int *p adr int* adr • Cazul pointerilor *p  147 147 Algoritmica si programare

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. for - exemple • Exemplu: s = n + n-1 + ... + 1 s  0 for i  n downto 1 do s  s + i Algoritmica si programare

  27. Subprograme - proceduri • sintaxa procedure nume(parametri) secventa_instructiuni end • clasificarea parametrilor: • de intrare • de iesire • de intrare/iesire Algoritmica si programare

  28. 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

  29. Subprograme - functii • sintaxa function nume(parametri) secventa_instructiuni return expresie end • pot exista mai multe instructiuni return Algoritmica si programare

  30. 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

  31. Exceptii • sintaxa throw mesaj if expresie then throw mesaj • exemplu if (b = 0) then throw “impartire prin 0” x  a/b Algoritmica si programare

  32. 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

  33. 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

  34. 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

  35. 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

  36. 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

  37. Structuri si pointeri d data* data *d 1..31 d->zi 1..12 d->ln int d->an Algoritmica si programare

  38. 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

  39. 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

  40. 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

More Related