Algoritmica - Curs 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
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
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
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
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
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
A fost printre primii ce a folosit cifra 0 A scris prima carte de algebra (numele acestei discipline provine de la acelasi matematician)
Algoritmica - Curs 1
Exemple
Algoritmi in viata de zi cu zi: Utilizarea unui telefon, bancomat, 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
Algoritmica - Curs 1
De la problema la algoritm
Algoritm: Variabile = obiecte abstracte ce corespund datelor problemei deimpartit, impartitor, rest Secventa de prelucrari Metoda de rezolvare 1. Atribuie deimpartitului Imparte a la b si retine valoarea lui a si restul impartitorului valoarea lui b Imparte b la rest si 2. Calculeaza restul impartirii retine noul rest deimpartitului la impartitor continua impartirile 3. Atribuie deimpartitului pana se ajunge la un valoarea impartitorului si rest nul impartitorului valoarea Ultimul rest nenul restului anterior reprezinta rezultatul 4. Daca restul e nenul reia de la etapa 2 Algoritmica - Curs 1 10 Problema: Datele problemei a, b - nr.naturale
De la algoritm la program
Algoritm: Variabile = obiecte abstracte ce corespund datelor problemei deimpartit, impartitor, rest Secventa de prelucrari 1. Atribuie deimpartitului valoarea lui a si impartitorului valoarea lui b 2. Calculeaza restul impartirii deimpartitului la impartitor 3. Atribuie deimpartitului valoarea impartitorului si impartitorului valoarea restului anterior 4. 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 - Curs 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 12
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. De exemplu: (2,1,4,3,5) date intrare
(1,2,3,4,5) rezultat
Algoritmica - Curs 1 14
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 .. - Continua pana ultimele doua elemente au fost comparate
Descriere:
-Compara primele doua elemente; daca nu sunt in ordinea dorita se interschimba
Generalitate
Este algoritmul suficient de general ? Asigura ordonarea crescatoare a oricarui sir de valori ? Raspuns: NU Contraexemplu:
Finitudine
Un algoritm trebuie sa se termine dupa un numar finit de prelucrari Exemplu Pas1: Asigneaza 1 lui x; Pas2: Adauga 2 la x; Pas3: Daca x=10 atunci STOP; altfel se reia de la Pasul 2 Cum lucreaza acest algoritm ?
Algoritmica - Curs 1 18
Finitudine
Cum lucreaza algoritmul si ce produce: Pas1: Asigneaza 1 lui x; x=1 Pas2: Adauga 2 la x; Pas3: Daca x=10 atunci STOP; x=3 x=5 x=7 x=9 x=11 altfel afiseaza x; se reia de la Pasul 2
Ce putem spune despre acest algoritm ? Genereaza numere impare dar nu se opreste niciodata !
Algoritmica - Curs 1 19
Finitudine
Algoritmul care genereaza numerele impare mai mici decat 10: Pas1: Asigneaza 1 lui x; Pas2: Adauga 2 la x; Pas3: Daca x>=10 atunci STOP; altfel afiseaza x; se reia de la Pasul 2
Algoritmica - Curs 1
20
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,2] atunci se reia de la Pasul 2; altfel Stop.
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 - Curs 1 22
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,2] atunci se reia de la Pasul 2, altfel Stop. 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 23
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. Sa se gaseasca un algoritm care pentru un cuvant dat ca intrare determina toate anagramele cuvantului care sunt prezente in dictionar. Exemplu de anagrama: cort->troc
Algoritmica - Curs 1 25
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
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
n m2 +nm+ m2
Algoritmica - Curs 1 28
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.5 ore 6*10^6 1.66 ore
Algoritmica - Curs 1
29
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
i = 1 + 2 + ... + n
i =1
Algoritmica - Curs 1
Descriere algoritmica ?
31
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
7
Multimi (obs: {3,7,4}={3,4,7}) Ordinea elementelor nu are importanta Secvente (obs:. (3,7,4) este diferit de(3,4,7)) Index: 1 Ordinea elementelor are importanta Matrici Tablouri multidimensionale
3 4 3 7 4
2 3
(1,1) (1,2)
1 0
0 1
1 0
0 1
35
Algoritmica - Curs 1
(2,1) (2,2)
Algoritmica - Curs 1
36
Algoritmica - Curs 1
37
Algoritmica - Curs 1
38
i1
i2
n m
Algoritmica - Curs 1
i2
39
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 40
Algoritmica - Curs 1
41
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, valori constante Operatori: aritmetici (+,-,*,/) relationali (=, !=, <, >, <=, >=) logici (NOT, OR, AND)
Algoritmica - Curs 1
42
Operatori
Aritmetici: + (adunare), - (scadere), *(inmultire), / (impartire), ^ (ridicare la putere), DIV (catul impartirii intregi), MOD (restul impartirii intregi) Relationali: = (equal), != (diferit), < (strict mai mic), <= (mai mic sau egal), >(strict mai mare) >= (mai mare sau egal) Logici: OR (disjunctie), AND (conjunctie), NOT (negatie)
Algoritmica - Curs 1 43
Intrare/iesire
Scop: Preia date de intrare Furnizeaza rezultate Descriere: read v1,v2, write e1,e2,
44
Structuri de prelucrare
Secventa de instructiuni
Algoritmica - Curs 1
45
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>
Adevarat
conditie
Fals
Varianta simplificata:
if <conditie> then <S> endif
Algoritmica - Curs 1 46
<S>
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
WHILE
Fals
<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>
Daca conditia este falsa de la inceput atunci corpul ciclului nu este executat niciodata
Algoritmica - Curs 1
48
WHILE - exemplu
Fals
<conditie>
Adevarat
Urmatoarea instructiune
i = 1 + 2 + ... + n
i =1
<instructiune>
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
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 - exemplu
v:=v1
Fals
v <= v2
Adevarat
Urmatoarea instructiune
i = 1 + 2 + ... + n
i =1
<instructiune> v:=v+pas S:=0 // pregateste variabila in //care se va colecta rezultatul for i:=1,n do S:=S+i // adauga termenul la S endfor
Algoritmica - Curs 1
51
REPEAT
La inceput se executa corpul ciclului. 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
Algoritmica - Curs 1
REPEAT - exemplu
<instructiune> <conditie>
Adevarat
i = 1 + 2 + ... + n
i =1
Instructiune urmatoare
Algoritmica - Curs 1
53
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
Sumar
Pseudocod:
Atribuire Transfer Decizie Ciclare sau := read, write IF THEN ELSE ENDIF WHILE DO ENDWHILE FOR DO ENDFOR REPEAT UNTIL
Algoritmica - Curs 1
55
Exemple simple Exemple ceva mai complicate + subalgoritmi Verificarea corectitudinii algoritmilor
Algoritmica - Curs 1
56