Curs 1

:

Introducere in rezolvarea algoritmica a problemelor

Algoritmica - Curs 1

1

Cuprins
• Rezolvarea problemelor • Ce este un algoritm ? • Ce proprietati ar trebui sa aiba un algoritm ? • Cum pot fi descrisi algoritmii ? • Ce tipuri de date vor fi utilizate ? • Cum pot fi specificate prelucrarile dintr-un algoritm ?

Algoritmica - Curs 1

2

Rezolvarea problemelor
Problema = ansamblu de intrebari referitoare la anumite entitati care reprezinta universul problemei Enuntul problemei = descrierea proprietatilor entitatilor si a relatiei dintre datele de intrare si solutia problemei Metoda de rezolvare = procedura de construire a solutiei pornind de la datele de intrare

Date de intrare

Metoda de rezolvare

Rezultat

Algoritmica - Curs 1

3

Rezolvarea problemelor
Exemplu: Fie a si b doua numere naturale nenule. Sa se determine numarul c care are urmatoarele proprietati: – c divide pe a si pe b (c este divizor comun al lui a si al lui b) – c este mai mare decat orice alt divizor al lui a si b Universul problemei: multimea numerelor naturale (a si b reprezinta datele de intrare, c reprezinta rezultatul) Enuntul problemei (relatia dintre datele de intrare si rezultat): c este cel mai mare divizor comun al lui a si b

Algoritmica - Curs 1

4

Rezolvarea problemelor
Observatie: • Aceasta problema face parte din clasa celor care calculeaza valoarea unei functii (care asociaza unei perechi de numere naturale valoarea celui mai mare divizor comun) • Un alt tip de probleme sunt cele care cer sa se verifice daca datele de intrare satisfac o anumita proprietate. Acestea sunt denumite probleme de decizie. Exemplu: sa se verifice daca un numar natural este prim sau nu In ambele cazuri solutia poate fi obtinuta folosind un calculator doar daca exista o metoda care sa furnizeze rezultatul dupa un numar finit de prelucrari … o astfel de metoda este un algoritm

Algoritmica - Curs 1

5

Cuprins • Rezolvarea problemelor • Ce este un algoritm ? • Ce proprietati ar trebui sa aiba un algoritm ? • Cum pot fi descrisi algoritmii ? • Ce tipuri de date vor fi utilizate ? • Cum pot fi specificate prelucrarile dintr-un algoritm ? Algoritmica .Curs 1 6 .

Curs 1 7 .Ce este un algoritm ? Exista diferite definitii … Algoritm = o descriere pas cu pas a metodei de rezolvare a unei probleme Algoritm = o succesiune finita de operatii care aplicate datelor de intrare ale unei probleme conduc la solutie Algoritm = reteta de rezolvare a unei probleme Algoritmica .

Curs 1 8 .Care este originea cuvantului ? al-Khowarizmi .matematician persan (790-840) algorism algorithm • A fost printre primii ce a folosit cifra 0 • A scris prima carte de algebra (numele acestei discipline provine de la acelasi matematician) Algoritmica .

Exemple Algoritmi in viata de zi cu zi: • Utilizarea unui telefon.) Algoritmica . automat pentru cafea etc Algoritmi specifici matematicii: • Algoritmul lui Euclid (este considerat primul algoritm) • Determinarea celui mai mare divizor comun a doua numere • Algoritmul lui Eratostene • Generarea numerelor prime • Algoritmul lui Horner • Calculul valorii unui polinom Euclid (cca.Curs 1 9 . 325 -265 i.C. bancomat.

rest • Secventa de prelucrari • Metoda de rezolvare 1.Curs 1 10 Problema: • Datele problemei • a.De la problema la algoritm Algoritm: • Variabile = obiecte abstracte ce corespund datelor problemei • deimpartit. b . Daca restul e nenul reia de la etapa 2 Algoritmica .nr. Atribuie deimpartitului pana se ajunge la un valoarea impartitorului si rest nul impartitorului valoarea • Ultimul rest nenul restului anterior reprezinta rezultatul 4. Calculeaza restul impartirii retine noul rest deimpartitului la impartitor • continua impartirile 3.naturale . impartitor. Atribuie deimpartitului • Imparte a la b si retine valoarea lui a si restul impartitorului valoarea lui b • Imparte b la rest si 2.

Atribuie deimpartitului valoarea impartitorului si impartitorului valoarea restului anterior 4. Atribuie deimpartitului valoarea lui a si impartitorului valoarea lui b 2. Daca restul e nenul reia de la etapa 2 Program: • Variabile = obiecte abstracte ce corespund datelor problemei • Fiecare variabila are asociata o zona in memoria calculatorului • Secventa de instructiuni • Fiecare instructiune corespunde unei prelucrari elementare care poate fi executata de catre calculator Model (extrem de) simplificat I/E Intrare/iesire M Unitate memorie P Unitate 11 calcul Algoritmica . rest • Secventa de prelucrari 1. Calculeaza restul impartirii deimpartitului la impartitor 3. impartitor.Curs 1 .De la algoritm la program Algoritm: • Variabile = obiecte abstracte ce corespund datelor problemei • deimpartit.

Curs 1 12 .Cuprins • Rezolvarea problemelor • Ce este un algoritm ? • Ce proprietati ar trebui sa aiba un algoritm ? • Cum pot fi descrisi algoritmii ? • Ce tipuri de date vor fi utilizate ? • Cum pot fi specificate prelucrarile dintr-un algoritm ? Algoritmica .

Curs 1 13 .Ce proprietati ar trebui sa aiba un algoritm ? • Generalitate • Finitudine • Neambiguitate • Eficienta Algoritmica .

5) date intrare (1.1.3.Curs 1 14 . De exemplu: (2.4.4.Generalitate Un algoritm trebuie sa functioneze corect pentru toate instantele de date de intrare nu doar pentru instante particulare Exemplu: Sa consideram problema sortarii crescatoare a unui sir de valori numerice.5) rezultat Algoritmica .3.2.

Generalitate Metoda: Pas 1: Pas 2: Pas 3: Pas 4: 2 1 1 1 1 2 2 2 4 4 4 3 3 3 3 4 5 5 5 5 -Compara al doilea cu al treilea si aplica aceeasi strategie …. daca nu sunt in ordinea dorita se interschimba Secventa a fost ordonata Algoritmica .Curs 1 15 .Continua pana ultimele doua elemente au fost comparate Descriere: -Compara primele doua elemente.. .

..Generalitate • Este algoritmul suficient de general ? Asigura ordonarea crescatoare a oricarui sir de valori ? • Raspuns: NU Contraexemplu: 32145 23145 21345 21345 In acest caz metoda nu functioneaza deci nu poate fi considerata un algoritm general de ordonare .Curs 1 16 . e necesara reluarea procesului de parcurgere a secventei Algoritmica .

Ce proprietati ar trebui sa aiba un algoritm ? • Generalitate • Finitudine • Neambiguitate • Eficienta Algoritmica .Curs 1 17 .

Pas3: Daca x=10 atunci STOP.Finitudine • Un algoritm trebuie sa se termine dupa un numar finit de prelucrari Exemplu Pas1: Asigneaza 1 lui x.Curs 1 18 . altfel se reia de la Pasul 2 Cum lucreaza acest algoritm ? Algoritmica . Pas2: Adauga 2 la x.

Finitudine Cum lucreaza algoritmul si ce produce: Pas1: Asigneaza 1 lui x. x=1 Pas2: Adauga 2 la x. se reia de la Pasul 2 Ce putem spune despre acest algoritm ? Genereaza numere impare dar nu se opreste niciodata ! Algoritmica . x=3 x=5 x=7 x=9 x=11 altfel afiseaza x.Curs 1 19 . Pas3: Daca x=10 atunci STOP.

Pas2: Adauga 2 la x. altfel afiseaza x.Finitudine Algoritmul care genereaza numerele impare mai mici decat 10: Pas1: Asigneaza 1 lui x.Curs 1 20 . Pas3: Daca x>=10 atunci STOP. se reia de la Pasul 2 Algoritmica .

Curs 1 21 .Ce proprietati ar trebui sa aiba un algoritm ? • Generalitate • Finitudine • Neambiguitate • Eficienta Algoritmica .

Atat timp cat nu este specificat un criteriu clar in baza caruia sa se decida daca x este incrementat sau decrementat secventa de mai sus nu poate fi considerata algoritm Algoritmica .Neambiguitate Operatiile dintr-un algoritm trebuie definite in mod riguros: – La executia fiecarui pas trebuie specificat clar ce trebuie executat si care va fi urmatorul pas Exemplu: Pas 1: Atribuie 0 lui x Pas 2: Fie incrementeaza x cu 1 fie decrementeaza x cu 1 Pas 3: Daca x∈[-2. altfel Stop.2] atunci se reia de la Pasul 2.Curs 1 22 .

2] atunci se reia de la Pasul 2.Curs 1 23 . altfel Stop.Neambiguitate Modificam algoritmul anterior dupa cum urmeaza: Pas 1: Atribuie 0 lui x Pas 2: Arunca o moneda Pas 3: Daca se obtine cap atunci incrementeaza x cu 1 altfel decrementeaza x cu 1 Pas 4: Daca x∈[-2. • De aceasta data algoritmul poate fi executat dar … la rulari diferite poate conduce la rezultate diferite • Acesta este un exemplu de algoritm aleator Algoritmica .

Curs 1 24 .Ce proprietati ar trebui sa aiba un algoritm ? • Generalitate • Finitudine • Neambiguitate • Eficienta Algoritmica .

Eficienta Un algoritm trebuie sa foloseasca un volum rezonabil de resurse de calcul: memorie si timp de calcul Finitudinea nu e suficienta daca timpul necesar obtinerii unui rezultat este prea mare Exemplu: Sa consideram un dictionar continand 50000 de cuvinte.Curs 1 25 . Exemplu de anagrama: cort->troc Algoritmica . Sa se gaseasca un algoritm care pentru un cuvant dat ca intrare determina toate anagramele cuvantului care sunt prezente in dictionar.

Eficienta Prima abordare: Pas 1: genereaza toate anagramele cuvantului Pas 2: pentru fiecare anagrama a cuvantului se verifica daca este prezenta in dictionar (folosind de algoritm eficient. de exemplu cautare binara) A doua abordare: Pas 1: se sorteaza literele cuvantului initial Pas 2: Pentru fiecare cuvant din dictionar avand m litere: • Se sorteaza literele cuvantului • Se compara versiunile sortate ale cuvantului initial si ale fiecarui cuvant din dictionar Care varianta este mai buna (in raport cu numarul de operatii efectuate) ? Algoritmica .Curs 1 26 .

Eficienta Prima abordare: Pas 1: genereaza toate anagramele cuvantului Pas 2: pentru fiecare anagrama a cuvantului se verifica daca este prezenta in dictionar (folosind de exemplu un algoritm de cautare binara) Sa consideram ca: – Dictionarul contine n cuvinte – Cuvantul analizat contine m litere O estimare a numarului de comparatii la nivel de litere: – Numarul de anagrame: m! – Numarul de comparatii pentru fiecare anagrama: log2n – Numarul de litere comparate pentru fiecare anagrama: m m!* m*log2n Algoritmica .Curs 1 27 .

Eficienta A doua abordare: Pas 1: se sorteaza literele cuvantului initial Pas 2: Pentru fiecare cuvant din dictionar avand m litere: • Se sorteaza literele cuvantului • Se compara versiunile sortate ale cuvantului initial si ale fiecarui cuvant din dictionar Estimarea numarului de comparatii: – Sortarea cuvantului initial necesita circa m2 comparatii – Cautarea secventiala si sortarea fiecarui cuvant necesita circa nm2 comparatii – Compararea versiunilor sortate necesita cel mult nm comparatii n m2 +nm+ m2 Algoritmica .Curs 1 28 .

66 ore Algoritmica .Eficienta Care abordare este mai buna ? Prima abordare m! m log2n A doua abordare n m2 +n m+ m2 Exemplu: m=11 (cuvantul algoritmica) n=50000 (numarul de cuvinte din dictionar) 2* 10^9 o comparatie= 1ms=10-3 s 555.Curs 1 29 .5 ore 6*10^6 1.

Cuprins • Rezolvarea problemelor • Ce este un algoritm ? • Ce proprietati ar trebui sa aiba un algoritm ? • Cum pot fi descrisi algoritmii ? • Ce tipuri de date vor fi utilizate ? • Cum pot fi specificate prelucrarile dintr-un algoritm ? Algoritmica .Curs 1 30 .

. + n i =1 Algoritmica .Cum pot fi descrisi algoritmii ? Metodele de rezolvare a problemelor sunt de regula descrise intr-un limbaj matematic Limbajul matematic nu este intotdeauna adecvat intrucat: – Operatii considerate elementare din punct de vedere matematic nu corespund unor prelucrari elementare cand sunt executate pe un calculator..Curs 1 n Descriere algoritmica ? 31 . Exemple: calculul unei sume. evaluarea unui polinom etc Descriere matematica ∑ i = 1 + 2 + .

Cum pot fi descrisi algoritmii ? Exista cel putin doua modalitati: • Scheme logice: – Descrieri grafice ale fluxului de prelucrari din algoritm – Sunt destul de rar utilizate la ora actuala – Totusi pot fi utile in descrierea structurii generale a unei aplicatii • Pseudocod: – Limbaj artificial bazat pe • vocabular (set de cuvinte cheie) • sintaxa (set de reguli de construire a frazelor limbajului) – Nu e la fel de restrictiv ca un limbaj de programare Algoritmica .Curs 1 32 .

De ce i se spune pseudocod ? Pentru ca … • Este oarecum similar unui limbaj de programare (cod) • Dar nu este la fel de riguros ca un limbaj de programare (pseudo) Frazele pseudocodului sunt: • Instructiuni (utilizate pentru a descrie pasii de prelucrare) • Declaratii (utilizate pentru a specifica datele) Algoritmica .Curs 1 33 .

caractere.Ce tipuri de date pot fi utilizate ? Data = entitate purtatoare de informatie Caracteristici: – nume – valoare • constanta (aceeasi valoare pe parcursul executiei algoritmului) • variabila (valoarea se schimba pe parcursul executiei algoritmului) – tip • simplu (numere. valori de adevar …) • structurat (tablouri) Algoritmica .Curs 1 34 .

2) .7}) – Ordinea elementelor nu are importanta • Secvente (obs:.7.1) (1.4.7)) Index: 1 – Ordinea elementelor are importanta • Matrici – Tablouri multidimensionale 3 4 3 7 4 2 3 (1.2) 1 0 0 1 1 0 0 1 35 Algoritmica .4.Curs 1 (2.4) este diferit de(3.1) (2.7.4}={3. (3.Ce tipuri de date pot fi utilizate ? Tablourile sunt utilizate pentru a reprezenta: 7 • Multimi (obs: {3.

Cum pot fi specificate datele ? • Date simple: – Intregi – Reale – Logice – Caractere INTEGER <variable> REAL <variable> BOOLEAN <variable> CHAR <variable> Algoritmica .Curs 1 36 .

n2] (ex: REAL x[1..n2] (ex: INTEGER A[1.Curs 1 37 . n1....m..1.m2.Cum pot fi specificate datele ? Tablouri Unidimensionale <tip element> <nume>[n1.n]) Algoritmica ..n]) Bi-dimensionale <tip element> <nume>[ m1.

i este indice de linie.Cum pot fi specificate datele ? Specificarea elementelor tablourilor: – Unidimensionale x[i] .i este indicele elementului – Bidimensionale A[i. j este indice de coloana Algoritmica .Curs 1 38 .j] .

Curs 1 i2 39 ..i2] (1<=i1<i2<=n) – Bidimensional: A[i1.Cum pot fi specificate datele ? Specificarea subtablourilor • Subtablou= portiune contigua a unui tablou – Unidimensional: x[i1.. j1. 1<=j1<j2<=n) 1 1 i1 j1 j2 n 1 i1 i2 n m Algoritmica .j2] (1<=i1<i2<=m..i2.

Curs 1 40 .Cuprins • Rezolvarea problemelor • Ce este un algoritm ? • Ce proprietati ar trebui sa aiba un algoritm ? • Cum pot fi descrisi algoritmii ? • Ce tipuri de date vor fi utilizate ? • Cum pot fi specificate prelucrarile dintr-un algoritm ? Algoritmica .

Cum pot fi specificate prelucrarile dintr-un algoritm ? Instructiune = actiune executata de catre un algoritm Tipuri de instructiuni: – Simple • Atribuire (atribuie o valoare unei variabile) • Transfer (preia date de intrare. Algoritmica . afiseaza rezultate) • Control (specifica care este urmatorul pas care trebuie executat) – Structurate ….Curs 1 41 .

>=) logici (NOT. valori constante – Operatori: aritmetici (+. >. <.Atribuire • Scop: atribuie o valoare unei variabile • Descriere: v← <expresie> sau v:=<expresie> • Expresie = constructie sintactica (= succesiune de simboluri care respecta niste reguli) utilizata pentru a descrie un calcul Este constituita din: – Operanzi: variabile. OR.Curs 1 42 . AND) Algoritmica .*./) relationali (=. !=. <=.-.

DIV (catul impartirii intregi). != (diferit). NOT (negatie) Algoritmica . < (strict mai mic). AND (conjunctie). >(strict mai mare) >= (mai mare sau egal) • Logici: OR (disjunctie). *(inmultire). .Operatori • Aritmetici: + (adunare).(scadere). <= (mai mic sau egal).Curs 1 43 . / (impartire). MOD (restul impartirii intregi) • Relationali: = (equal). ^ (ridicare la putere).

e2.v2.Intrare/iesire • Scop: – Preia date de intrare – Furnizeaza rezultate • Descriere: read v1.Curs 1 Iesire (scriere) utilizator Write (print) 44 .… Intrare (citire) utilizator Read (input) Variabile algoritm Algoritmica .… write e1.

Structuri de prelucrare – Secventa de instructiuni – Instructiune de decizie (conditionala) – Instructiune de ciclare (repetitiva) Algoritmica .Curs 1 45 .

Curs 1 46 <S> .Instructiune de decizie • Scop: permite alegerea intre doua sau mai multe variante de prelucrare in functie de realizarea/ nerealizarea unei (unor) conditii Adevarat conditie • Varianta generala: Fals <S1> <S2> if <conditie> then <S1> else <S2> endif Adevarat conditie Fals • Varianta simplificata: if <conditie> then <S> endif Algoritmica .

Instructiuni de ciclare • Scop: permite repetarea unei prelucrari • Exemplu: calculul sumei S= 1+2+…+i+…+n • Un ciclu este caracterizat prin: – Pasul de prelucrare care trebuie repetat (ex: adunarea urmatoarei valori la valoarea curenta a sumei) – O conditie de oprire (continuare) a prelucrarii repetitive ex: (s-au adunat deja toate valorile) • Depinzand de momentul in care conditia de continuare/oprire este analizata exista: – Cicluri preconditionate (WHILE) – Cicluri postconditionate (REPEAT) Algoritmica .Curs 1 47 .

Curs 1 48 .WHILE Fals • Se analizeaza conditia de continuare <conditie> Urmatoarea • Daca este adevarata se executa instructiune instructiunea din corpul ciclului dupa care se evalueaza din nou conditia Adevarat • Cand conditia devine falsa se trece la urmatoarea prelucrare din algoritm • Daca conditia nu devine niciodata falsa ciclul este infinit <instructiune> while <conditie> do <instructiune> endwhile • Daca conditia este falsa de la inceput atunci corpul ciclului nu este executat niciodata Algoritmica .

+ n i =1 n <instructiune> while <conditie> do <instructiune> endwhile S:=0 // pregateste variabila in //care se va colecta rezultatul i:=1 // initializeaza indicele // termenului de adaugat while i<=n do S:=S+i // adauga termenul la S i:=i+1 // pregateste urmatorul //termen endwhile Algoritmica .Curs 1 49 .WHILE ..exemplu Fals <conditie> Adevarat Urmatoarea instructiune ∑ i = 1 + 2 + ..

v2.Curs 1 50 .pas do <instructiune> endfor v:=v1 while v<=v2 do <instructiune> v:=v+pas endwhile Algoritmica .FOR • Uneori numarul de repetari ale corpului ciclului este cunoscut de la inceput Fals • In acest caz se poate folosi o v <= v2 Urmatoarea varianta bazata pe o variabila instructiune contor Adevarat • Numarul de repetari: v2-v1+1 daca <instructiune> pas=1 v:=v1 v:=v+pas for v:=v1.

pas do <instructiune> endfor Algoritmica .n do S:=S+i // adauga termenul la S endfor for v:=v1. + n i =1 n <instructiune> v:=v+pas S:=0 // pregateste variabila in //care se va colecta rezultatul for i:=1.v2.FOR ..Curs 1 51 ..exemplu v:=v1 Fals v <= v2 Adevarat Urmatoarea instructiune ∑ i = 1 + 2 + .

Prin urmare acesta va fi executat cel putin o data • Este analizata conditia de oprire iar daca aceasta este falsa se executa din nou corpul ciclului • Cand conditia de oprire devine adevarata se trece la urmatoarea prelucrare a algoritmului • Daca conditia de oprire nu devine niciodata adevarata atunci ciclul este infinit 52 <instructiune> <conditie> Adevarat Instructiune urmatoare repeat <instructiune> until <conditie> Algoritmica .REPEAT • La inceput se executa corpul ciclului.Curs 1 .

+ n i =1 n Instructiune urmatoare S:=0 i:=1 repeat S:=S+i i:=i+1 until i>n S:=0 i:=0 repeat i:=i+1 S:=S+i until i>=n repeat <instructiune> until <conditie> Algoritmica .exemplu <instructiune> <conditie> Adevarat ∑ i = 1 + 2 + ..Curs 1 53 .REPEAT ..

Sumar • Algoritmii sunt proceduri de rezolvare pas cu pas a problemelor • Trebuie sa aiba proprietatile: •Generalitate •Finitudine •Rigurozitate (neambiguitate) •Eficienta •Datele prelucrate de catre un algoritm pot fi: • simple • structurate (ex: tablouri) •Algoritmii sunt descrisi utilizand un pseudocod Algoritmica .Curs 1 54 .

write IF … THEN … ELSE … ENDIF WHILE … DO … ENDWHILE FOR … DO … ENDFOR REPEAT … UNTIL Algoritmica .Curs 1 55 .Sumar • Pseudocod: Atribuire Transfer Decizie Ciclare ← sau := read.

Urmatorul curs va fi despre … • Exemple simple • Exemple ceva mai complicate + subalgoritmi • Verificarea corectitudinii algoritmilor Algoritmica .Curs 1 56 .

Sign up to vote on this title
UsefulNot useful