Sunteți pe pagina 1din 35

ALGORITMI SI STRUCTURI DE

DATE

Lect. dr. Cristian Bologa

Cabinet: 431

Email: cristian.bologa@econ.ubbcluj.ro
c_bologa@yahoo.com
TEMATICA:
Rezolvarea numerica a ecuatiilor algebrice si transcendente; Calcul matricial
Rezolvarea sistemelor de ecuatii algebrice liniare
Complexitatea algoritmilor
Algoritmi de sortare
Recursivitate
Backtracking
Divide et Impera
Greedy
Metode euristice
Structuri de date -aspecte generale; Fisierul, Tabloul, Tabela de dispersie,
Lista liniara simplu inlantuita
Lista liniara dublu inlantuita
Structura de tip stiva
Structura de tip coada
Grafuri neorientate si orientate
Arbori
?
Bibliografie:

[Aho85] Aho A. V. Hopcroft J. E., Ullman J. D. Data Structures and


Algorithms, Addison Wesley, Reading, Massachusets, 1985
[Cormen00] Cormen T., Leiserson C., Rivest R. -Introducere n algoritmi,
Ed. Computer Libris Agora, Tg. Mure, 2000.
[Knuth99] Knuth D. E. Arta programrii calculatoarelor, vol 1 , Algoritmi
fundamentali, Ed. Teora, Bucureti, 1999
[Knuth00] Knuth, D. E. -Arta programarii calculatoarelor, vol. 2, Algoritmi
seminumerici, Ed. Teora, 2000.
[Knuth01] Knuth, D. E. - Arta programarii calculatoarelor, vol. 3, Sortare i
cutare, Ed. Teora, 2001.
[Negrescu02] Negrescu L Limbajele C i C++ pentru nceptori, volumul
1: Limbajul C, Ed. Albastr, Cluj-Napoca, 2002.
[Bologa06] Bologa C. Algoritmi si structuri de date; Editura Risoprint,
Cluj-Napoca, 2006
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente

f(x)=0 ->ecuatie algebrica

x+sin(x) = 0
ex 1 = 0 ->ec transcendente

f:[xmin,xmax] R, unde [xmin,xmax]R

orice valoare pentru care f()=0 se numeste


radacina a ecuatiei.
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente

O radacina aproximativa a.i. avem | | < , R, >0

Determinarea radacinilor reale:

-separarea (izolarea) radacinilor xmin<x1<x2<<xM<xmax a.i. orice


subinterval [xi, xi+1] s contin cel mult o radacina a ecuatiei f(x)=0
-determinarea aproximativa a fiecarei radacini si evaluarea erorii
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente

Daca o functie continua f(x) admite valori de semn contrar la capetele unui
interval [a,b], adica f(a)f(b)<0 atunci n intervalul [a,b] se gaseste cel putin o
radacina a ecuatiei f(x)=0 (mai precis un numar impar de radacini).

Metode de rezolvare:
o metode de partiionare se pornete de la un interval n care se gete
soluia, iar acest interval se ngusteaz treptat, pn la atingerea unei precizii
date.
o metode de aproximare succesiva se porneste de la o aproximare initiala,
care se mbunatateste n pasi succesivi. Daca procesul este convergent, vom
putea obtine o solutie aproximativa ce sa atinga o precizie data.
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente

START

CITESTE
a,b

DA a=0 NU

DA b=0 NU x= -b / a

ecuatie ecuatie
nedeterm impos ec gr 1 cu
sol, x

STOP
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente

#include<stdio.h> //pentru funciile printf() scanf()


#include<conio.h> //pentru funcia getch()
void main(void)
{ float a,b;
printf("Introd coeficientii ec de gradul 1:");
scanf("%f %f",&a,&b);
if(!a)
if(!b) printf("Ecuatie nedeterminata!\n");
else printf("Ecuatie imposibila!\n");
else printf("Ecuatie gr 1 cu solutia %f\n",-b/a);
getch();
}
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente
START

CITESTE
a,b,c

DA a=0 NU
D=b*b-4*a*c

DA b=0 NU

X = -c / b DA D>0 NU
DA c=0 NU
b d
x 1,2 = DA D=0 NU
Scrie Scrie 2a
Scrieec gr
ecuatie ecuatie
1 cu sol, x b
nedeterm impos b
Scrie ec gr x1, 2 = re =
2a 2a
2 cu sol,
x1 , x2
d
Scrie ec gr 2 im =
2a
cu sol egale,
x1 , x2

Scrie ec gr 2 cu
sol imaginare
x1, 2 = re i * im

STOP
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente
#include<stdio.h>
#include<math.h> //pentru funcia sqrt()
#include<conio.h>
void main(void)
{ float a,b,c,x,re,im,d;
scanf("%f %f %f",&a,&b,&c);
if(!a)
if(!b)
if(!c) printf("Ecuatie nedeterminata!\n");
else printf("Ecuatie imposibila!\n");
else printf("Ecuatie gradul 1 cu solutia x=%f\n",-c/b);
else
{ d=b*b-4*a*c;
if(d>0) printf("Ecuatie cu solutii distincte x1=%f, x2=%f\n",(-b-sqrt(d))/(2*a), (-
b+sqrt(d))/(2*a));
else if(!d) printf("Ecuatie cu solutie dubla x1=x2=%f\n",-b/(2*a));
else
{ re=-b/(2*a);im=sqrt(-d)/(2*a);
printf("Ecuatie cu solutii imaginare x1=%f+i*%f, x2=%f-i*%f\n",re,im,re,im);
}
}
getch();
}
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente

Metoda injumatatirii intervalului:


f(a)f(b)<=0

f(b)
Y-Axis

f(c)

a
c=(a+b)/2

X-Axis b
f(a)
noul
c
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente
START

CITESTE
a,b,f,e

Nu f(a)*f(b)<0 Da
c=(a+b)/2

Nu f(a)=0
Da
f(a)*f(c)<0 Da
Nu

Nu f(b)=0 Da
Nu
f(c)=0
Scrie Nu Da
Scrie Scrie
cerinte b=c
Solutie,b Solutie, a
nesatisf a=c a=b

|a-b|<e

Da
Scrie
Solutie,c

STOP
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente

Metoda secantei (corzii):

f(b)

Y-Axis
f(xi)

xi
X-Axis b
f(a)
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente
Metoda aproximatiilor succesive (metoda contractiei)
f(x) + x x = 0 -> x = f(x) + x ->x = F(x).
x1=F(x0), x2=F(x1), xi+1=F(xi)

1. Se citesc aproximatia initiala x, precizia Eps si numarul maxim de iteraii


Nmax.
2. Se construieste functia F(x) = x + f(x).
3. a)Se initializeaza contorul de iteratii It 0;
b)Daca s-a atins precizia dorita (|f(x)|<Eps) sau numarul maxim de iteratii
(It=Nmax) se opreste ciclarea si se trece la pasul 4.
c)Se trece la o noua iteratie: It It+1;
d)Calculul noii aproximatii: x F(x)
e)Se revine la pasul 3b
4. Dupa iesirea din bucla iterativa:
a)Daca |f(x)|<Eps atunci procesul a fost convergent iar solutia aproximativ este
x.
b)Daca |f(x)|>=Eps i It=Nmax, se afiseaza mesajul "Depasire numar maxim de
iteratii; proces divergent".
Cap.4 Rezolvarea numerica a ecuatiilor
algebrice si transcendente

Metoda lui Newton (tangentei)


y-f(x0)=f(x0)(x1-x0)
f(x0)

Y-Axis
f(x1)

X-Axis x0
x1
Cap.5 Calcul matricial
Matrice A(m,n)
Transpusa unei matrici AT
Matrice patratica A(n,n)
Matrice linie A(1,n)
Matrice coloana A(n,1)
Matrice nula; diagonala principala; diagonala secundara
Matrice simetrica A= AT
Matrice antisimetrica A=-AT
Matrice patratica superior triunghiulara a(i,j)=0, V i>=j
Matrice patratica inferior triunghiulara a(i,j)=0, V i<=j
Matrice patratica superior trapezoidala a(i,j)=0, V i>j
Matrice patratica inferior trapezoidala a(i,j)=0, V i<j
Matrice patratica diagonala a(i,j)=0, V i<>j
Matrice unitate diagonala + a(i,j)=1, V i=j
Matrice patratica ortogonala A-1= AT adica A AT=I (matricea unitate)
Cap.5 Calcul matricial
Matrice A(m,n)
Transpusa unei matrici AT
Matrice patratica A(n,n)
Matrice linie A(1,n)
Matrice coloana A(n,1)
Matrice nula; diagonala principala; diagonala secundara
Matrice simetrica A= AT
Matrice antisimetrica A=-AT
Matrice patratica superior triunghiulara a(i,j)=0, V i>=j
Matrice patratica inferior triunghiulara a(i,j)=0, V i<=j
Matrice patratica superior trapezoidala a(i,j)=0, V i>j
Matrice patratica inferior trapezoidala a(i,j)=0, V i<j
Matrice patratica diagonala a(i,j)=0, V i<>j
Matrice unitate diagonala + a(i,j)=1, V i=j
Matrice patratica ortogonala A-1= AT adica A AT=I (matricea unitate)
Cap.5 Calcul matricial
Produsul a 2 matrici:

Dac n=l atunci A(m,n)B(l,p)=C(m,p) n


cij aik bkj
k 1

Citete m,n,p,A(m,n),B(n,p)
Pentru i=1 la m execut
Pentru j=1 la p execut
c(i,j)=0;
Pentru k=1 la n execut
c(i,j)=c(i,j)+a(i,k)*b(k,j)
Sf-pentru
Sf-pentru
Sf-pentru
Afieaz C(m,p)
Cap.5 Calcul matricial
Inversa unei matrici:

AA-1=A-1A=I (unde I este matrice unitate)

O matrice este inversabil dac i numai dac determinantul asociat ei este nenul. O astfel de matrice
se numete nesingular.

1
A-1 A*
det A

unde det A este determinantul matricei A iar A* este matricea adjunct a matricei A. Pentru a obine
matricea adjunct se fac urmtoarele operaii:

Se obine matricea transpus AT a matricei A


Se calculeaz elementele matricii adjuncte a*ij prin calcularea determinantului matricei ce se obine
prin eliminarea liniei i i coloanei j, valoare ce se nmultete cu (-1)i+j.
Cap.5 Calcul matricial
Inversa unei matrici

Dac printr-un ir finit de operaii elementare o matrice se aduce la matricea unitate, atunci aplicnd
aceleai operaii asupra unei matrici unitate, se va obine matricea invers.

Prin operaii elementare se ntelege:


nmulirea unei linii cu o constant
schimbarea a 2 linii ntre ele
nmulirea unei linii cu o constant i adunarea ei la o alt linie.

a11 a12 a1n 1 0 ... 0


a21 a22 a2n 0 1 ... 0
...
an1 an2 ann 0 0 ... 1
Cap.5 Calcul matricial
Inversa unei matrici

Pasul 1:

Dac a11=0 atunci cutm un ai1<>0 pentru i=2,n.


Dac nu se gsete atunci se d mesaj Matrice neinversabil i se oprete algoritmul.
Dac se gsete, se schimb linia 1 cu linia i.
Se mparte linia 1 cu a11 deci a1 j
a1 j pentru j=1,2n (atenie: toate operaiile se fac asupra
matricei extinse). a11
Se nmulete linia 1 cu ak1 i se scade din linia k. Deci akj=akj-akja1j pentru j=2,2n i k=2,n.
1 a12 a1n a1 n+1 a1 n+2 ... a1 2n
0 a22 a2n a2 n+1 a2 n+2 ... a2 2n
...
0 an2 ann an n+1 an n+2 ... an 2n
Cap.5 Calcul matricial
Inversa unei matrici

Dupa pasul i-1:

1 0 0 ...a1i ... a1n a1 n+1 a1 n+2 ... a1 2n


0 1 0 ...a2i ... a2n a2 n+1 a2 n+2 ... a2 2n
...
0 0 ...1 ...ai-1 i ... ai-1n ai-1 n+1 ai-1 n+2 ... ai-1 2n
0 0 ...0 ...ai i ... ai n ai n+1 ai n+2 ... ai 2n
... ...
0 0 0 ...ani ... ann an n+1 an n+2 ... an 2n
Cap.5 Calcul matricial
Inversa unei matrici

Pasul i:

Dac ai i=0 atunci cutm un aki<>0 pentru k=i+1,n.


Dac nu se gsete atunci se d mesaj Matrice neinversabil i se oprete algoritmul.
Dac se gsete, se schimb linia i cu linia k.
aij
Se mparte linia i cu aii deci aij pentru j=i,2n.
aii

Se nmulete linia k cu aki i se scade din linia k. Deci akj=akj-akiaij pentru j=i,2n i k=1,n-{i}.

Dup pasul n, partea stng (matricea de inversat) a ajuns, n urma operaiilor elementare, la matricea
unitate, iar partea dreapt (care a pornit de la matricea unitate) constituie inversa matricei.
Cap.6 Rez sist de ec algebrice liniare

Metode de rezolvare:
o metode exacte (directe) algoritmi finiti pt calculul unor solutii asa zis exacte
(metoda lui Gauss, metoda lui Gauss-Jordan).
o metode iterative solutia cu o anumita precizie se determina intr-un numar
finit de pasi, pe baza unui proces iterativ convergent infinit (metoda lui
Jacobi, metoda Gauss-Seidel)

Metoda lui Gauss -const n transformri elementare aplicate matricii sistemului


i irului termenilor liberi, pn la aducerea matricii sistemului la o form
superior trapezoidal, urmat apoi de substituirea succesiv, n sens invers,
a necunoscutelor, obinndu-se astfel vectorul soluiei.
Cap.6 Rez sist de ec algebrice liniare
a11x1 + a12x2 + + a1jxj + +a1nxn=b1

ai1x1 + ai2x2 + + aijxj + +ainxn=bi

an1x1 + an2x2 + + anjxj + +annxn=bn

Pasul 1:

Dac a11=0 cutm un ai1<>0, pentru i=2,n.


o Dac nu gsim, tiprim un mesaj Metoda lui Gauss nu se poate
utiliza i oprim execuia algoritmului
o Dac am gsit un ai1<>0, atunci schimbm linia 1 cu linia i ntre ele
(inclusiv termenii liberi corespunztori).
Cap.6 Rez sist de ec algebrice liniare
Pasul 1:

a1 j ai1
Pentru i=2,n, calculm aij aij - , pentru j=1,n. (deoarece prima linie este
a11
a i1 a 21
nmulit cu - i adunat la linia i). Astfel, se nmulete prima linie cu - i
a 11 a 11
a 31
se adun la linia 2. Se nmulete prima linie cu - i se adun la linia 3 .a.m.d.
a 11
pn la ultima linie.
Avnd n vedere c operaiile fcute asupra matricei sistemului trebuie efectuate i asupra
b1 ai1
b
vectorului termenilor liberi vom avea: i bi - , pentru i=2,n.
a11
Cap.6 Rez sist de ec algebrice liniare
Pasul i:
a11x1 + a12x2 + + a1ixi + +a1nxn=b1

aiixi + +ainxn=bi
ai+1ixi + +ai+1nxn=bi+1

anixi + +annxn=bn

Dac aii=0 cutm un aki<>0, pentru k=i+1,n.


Dac nu gsim, tiprim un mesaj Metoda lui Gauss nu se poate utiliza i
oprim execuia algoritmului
Dac am gsit un aki<>0, atunci schimbm linia k cu linia j ntre ele (inclusiv
termenii liberi corespunztori).
Cap.6 Rez sist de ec algebrice liniare
Pasul i:

aij a ki
Pentru k=i+1,n, calculm a kj a kj - , pentru j=i,n. (deoarece linia i este
aii
a ki a i +1i
nmulit cu - i adunat la linia k). Astfel, se nmulete linia i cu - i se
a ii a ii
a i + 2i
adun la linia i+1. Se nmulete linia i cu - i se adun la linia i+2 .a.m.d.
a ii
pn la ultima linie.
Avnd n vedere c operaiile fcute asupra matricei sistemului trebuie efectuate i asupra
bi a ki
b
vectorului termenilor liberi vom avea: k bk - , pentru k=i+1,n.
aii
Cap.6 Rez sist de ec algebrice liniare
Dupa pasul n:

a11x1 + a12x2 + + a1ixi + +a1nxn=b1

an-1n-1xn-1+an-1nxn=bn-1
annxn=bn

bn
x n =
a nn
bn-1 - a n-1n x n
x n-1 =
a n-1n-1
n
bi - aij x j
ji 1
xi , pentru i=n-1,1
aii
START Cauta_pivot(i,k) Aplica_transf(i)

CITESTE k=i+1 k=i+1


n,a,b

P=a(k,i)/a(i,i)
k=1 DA a(k,i)<>0

Return(k) j=i
i=1 NU NU
a(k,j)=a(k,j)-
DA a(i,j)*p
k=k+1
DA a(i,i)=0 DA j=j+1

Cauta_pivot(i,k) k<=n
j<=n

k<>0 Return(0)
DA NU b(k)=b(k)-b(i)*p

DA Schimba_linii(i,k) NU k=k+1
Schimba_linii(i,k)

j=i+1 k<=n
DA k<>0

a(i,j)? a(k,j) Return


Aplica_transf(i)
NU DA
1
j=j+1

i=i+1 s=0
j<=n
j=i+1
i<=n-1&&k
b(i)? b(k)
Nu DA s=s+a(i,j)*x(j)
DA
DA a(n,n)=0 Return j=j+1

k=0 j<=n
NU Determ_solutii()

x(i)=(b(i)-s)/a(i,i)
DA k=0 NU
X(n)=b(n)/a(n,n)
metoda lui i=i-1
Gauss nu se Determ_solutii()
poate folosi
i=n-1
i>=1
x(i),i=1,n
1
Return

STOP
Cap.6 Rez sist de ec algebrice liniare

Metoda lui Gauss:

Observaie: Erorile de rotunjire n calculul elementelor matricii sunt cu att mai


mici cu ct elementul pivot este mai mare n valoare absolut (deoarece
eroarea la mprire este cu att mai mic cu ct mpritorul este mai mare).
De aceea, algoritmul se poate modifica n sensul de a cuta ca element pivot
elementul maxim de pe coloana curent n loc de a ne opri la primul element
diferit de zero.

Metoda Gauss-Jordan

Este o form modificat a metodei lui Gauss. Deosebirea const n faptul c


matricea sistemului este transformat n matricea unitate. n acest caz
soluia este oferit de coloana termenilor liberi.
Cap.6 Rez sist de ec algebrice liniare

Metode iterative:

Metoda Jacobi: se rezolv prima ecuaie a sistemului dup x1, a doua dup x2
etc

x1=t1+s12x2+ +s1nxn
xi=si1x1+si2x2 +.+ti++sinxn

xn=sn1+sn2x2++tn

unde sii=0 pentru i=1,n


sij=-aij/aii pentru j=1,n, i=1,n, ji
ti=bi/aii

X=T+SX
Cap.6 Rez sist de ec algebrice liniare

Metoda Jacobi:

Vom rezolva acest sistem prin metoda aproximaiilor succesive. Pentru


aproximaia de ordinul zero vom lua coloana termenilor liberi X0=T.

Xk=T+SX(k-1), k=1,2,

Deci vom avea:

xi(0)=ti
n

s
(k) ( k 1)
xi =ti+ ij xj k=1,2,
j1, j i

Condiia de oprire: i max | xi | pentru i=1,n.


(k ) (k ) ( k 1)
- xi
Cap.6 Rez sist de ec algebrice liniare

Metoda Jacobi:

n cazul n care numrul de iteraii depsete un anumit numr maxim de iteraii fixat,
ira condiia de oprire nu este satisfcut, atunci nu exist convergen i n consecin
metoda lui Jacobi nu se poate folosi.

Condiia de convergen a metodei Jacobi este ca elementele de pe diagonala


principal s fie dominante n valoare absolut. De exemplu, pentru sistemul de 3
ecuaii cu 3 necunoscute:

4x1+x2+2x3=16
x1+2x2+5x3=12
x1+3x2+x3=10
-pentru prima linie 4>1+2 Adevrat
-pentru a doua linie 2>1+5 Fals se impune schimbarea liniei 2 cu linia 3. Dup
schimbare:
-pentru a doua linie 3>1+1 Adevrat
-pentru a treia linie 5>1+2 Adevrat
Cap.6 Rez sist de ec algebrice liniare

Metoda Gauss-Seidel:

Crete viteza de convergen a metodei Jacobi. n calculul


componentei xi(k) a aproximaiei soluiei sistemului de la pasul k se utilizeaz
componentele x1(k), x2(k), xi-1(k) deja calculate n locul componentelor x1(k-1),
x2(k-1), xi-1(k-1) de la iteraia anterioar aa cum se ntmpl n cazul metodei
Jacobi.

S-ar putea să vă placă și