Documente Academic
Documente Profesional
Documente Cultură
Proiect cofinanat din Fondul Social European n cadrul POS DRU 2007-2013
Beneficiar Centrul Naional de Dezvoltare a nvmntului Profesional i Tehnic
str. Spiru Haret nr. 10-12, sector 1, Bucureti-010176, tel. 021-3111162, fax. 021-3125498, vet@tvet.ro
Domeniul: Informatic
Calificarea: Analist programator
Nivel 3 avansat
2009
AUTOR:
SILVIA VARZOPOV profesor grad didactic II
COORDONATOR:
MARIANA VIOLETA CIOBANU profesor grad didactic II
CONSULTAN:
IOANA CRSTEA expert CNDIPT
ZOICA VLDU expert CNDIPT
ANGELA POPESCU expert CNDIPT
DANA STROIE expert CNDIPT
Cuprins
I. Introducere...................................................................................................................................5
II. Documente necesare pentru activitatea de predare.....................................................................7
III. Resurse.......................................................................................................................................8
Tema 7. Algoritmi de sortare.......................................................................................................8
Fia suport 7.1. Sortarea prin selecie......................................................................................8
Tema 7. Algoritmi de sortare.....................................................................................................10
Fia suport 7.2. Sortarea prin inserare...................................................................................10
Tema 7. Algoritmi de sortare.....................................................................................................12
Fia suport 7.3. Sortarea prin numrare.................................................................................12
Tema 7. Algoritmi de sortare.....................................................................................................14
Fia suport 7.4. Sortarea prin interschimbare(BubbleSort)...................................................14
Tema 7. Algoritmi de sortare.....................................................................................................16
Fia suport 7.5. Sortarea rapid (quicksort)...........................................................................16
Fia suport 7.6. Sortarea prin inserie cu pas variabil............................................................18
Tema 7. Algoritmi de sortare.....................................................................................................20
Fia suport 7.7. Sortarea prin interclasare - MergeSort.........................................................20
Tema 7. Algoritmi de sortare.....................................................................................................22
Fia suport 7.8. Sortarea prin asamblare (heapsort)..............................................................22
Tema 8. Algoritmi generali de cutare.......................................................................................24
Fia suport 8.1. Cutarea secvenial.....................................................................................24
Tema 8. Algoritmi generali de cutare.......................................................................................26
Fia suport 8.2. Cutarea binar............................................................................................26
Tema 8. Algoritmi generali de cutare.......................................................................................28
Fia suport 8.3. Cutarea prin interpolare..............................................................................28
Tema 9. Criterii de performan.................................................................................................30
Fia suport 9.1. Complexitatea metodei................................................................................30
Tema 9. Criterii de performan.................................................................................................32
Fia suport 9.2. Utilizarea spaiului de memorie...................................................................32
Tema 10. Complexitatea algoritmilor........................................................................................34
Fia suport 10.1. Numrul de operaii. Viteza de execuie....................................................34
Masurarea timpului de execuie a unei pri de program n C++..............................................39
Masurarea timpului de execuie a unei pri de program n Pascal:..........................................39
Tema 10. Complexitatea algoritmilor........................................................................................41
Fia suport 10.2. Mrimea datelor. Utilizarea memoriei.......................................................41
Tema 10. Complexitatea algoritmilor........................................................................................44
Fia suport 10.3. Algoritmi polinomiali i exponeniali........................................................44
Tema 11. Programare dinamic.................................................................................................46
Fia suport 11.1. ir de decizii. Principiul de optim. Relaii de recuren............................46
Tema 11. Programare dinamic.................................................................................................48
Fia suport 11.2. Metoda nainte............................................................................................48
Tema 11. Programare dinamic.................................................................................................50
Fia suport 11.3. Metoda napoi.............................................................................................50
Tema 11. Programare dinamic.................................................................................................52
Fia suport 11.4. Metoda mixt.............................................................................................52
Tema 11. Programare dinamic.................................................................................................56
Fia suport 11.5. Metoda simplex..........................................................................................56
Tema 12. Tehnici de programare care conduc la soluii optime................................................60
Fia suport 12 Greedy. Metode euristice...............................................................................60
V. Bibliografie................................................................................................................................66
I. Introducere
Materialele de predare reprezint o resurs suport pentru activitatea de predare,
instrumente auxiliare care includ un mesaj sau o informaie didactic.
Prezentul material de predare, se adreseaz cadrelor didactice care predau n cadrul
colilor postliceale, domeniul Informatic, calificarea Analist programator.
El a fost elaborat pentru modulul Tehnici clasice de programare
ce se desfoar n 120 ore, n urmtoarea structur:
Laborator tehnologic 60 ore
Competene
(rezultate ale
invrii)
3.Implementeaz
algoritmii de
sortare i
cutare
Teme
Fie suport
binar
Competene
(rezultate ale
invrii)
Teme
Tema 9 - Criterii de
performan
Fie suport
4.Utilizeaz
metode de
optimizare
Tema 10 - Complexitatea
algoritmilor
Tema 11 - Programare
dinamic
Crile de specialitate;
Reviste de specialitate;
Surse web
III. Resurse
Tema 7. Algoritmi de sortare
Fia suport 7.1 Sortarea prin selecie
Descriere
Ideea algoritmului este urmatoarea: tabloul unidimensional este imprit in dou
pri imaginare o parte sortat i o parte nesortat. La nceput, partea sortat este
goal, n timp ce partea nesortat conine ntreg tabloul. La fiecare pas, algoritmul
gsete elementul minim din partea nesortat i l adaug la finalul prii sortate. Cnd
partea nesortat rmne goal, algoritmul se oprete.
Cnd algoritmul sorteaz un tablou unidimensional, interschimb primul element
al prii nesortate cu elementul minim i dup aceea el este inclus n partea sortat.
Aceast implementare a sortrii prin selecie nu este stabil. n cazul cnd sortm o
list, i, n loc de interschimbri, elementul minim este legat de partea nesortat,
sortarea prin selecie este stabil.
Exemplu
Dorim s sortm irul {5, 1, 9, -2, 14, 2, 9,} utiliznd sortarea prin selecie.
Legend:
Partea nesortat;
Partea sortat;
Elementele care vor fi interschimbate.
5, 1, 9, -2, 14, 2, 9;
5, 1, 9, -2, 14, 2, 9;
-2, 1, 9, 5, 14, 2, 9;
-2, 1, 9, 5, 14, 2, 9;
-2, 1, 2, 5, 14, 9, 9;
-2, 1, 2, 5, 14, 9, 9;
-2, 1, 2, 5, 9, 9 14;
nesortat
interschimbm 5 cu -2
1 rmne pe poziie
interschimbm 2 cu 9
5 ramne pe poziie
interschimbm 14 cu 9
vector sortat
Implementare Pascal
Type vector=array[1..1000] of integer;
procedure sortareSelecie(var v:vector; n:integer);
var i,j,min,aux:integer;
begin
for i:=1 to n do
begin
min:=i;
for j;=i+1 to n do
if v[j]<v[min] then
min:=j;
If min<>i then
begin
aux:=v[i];
v[i]:=v[min];
v[min]:=aux;
end;
end;
end;
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM?
Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Demonstraia prin descrierea pas cu pas a algoritmului;
nvarea prin descoperire propunnd elevilor nc un exemplu pe care s-l rezolve ei
pas cu pas;
Conversaia euristic n etapa de fixare a cunotinelor;
Exerciiul propunnd elevilor s modifice algoritmul, astfel nct s realizeze sortarea
descrescatoare a elementelor vectorului sau ordonarea prin selecia maximului.
Ca materiale suport se pot folosi:
- Lecia interactiv AEL;
- Prezentarea PowerPoint ataat materialului.
Implementare C++
void sortareInserie(int v[ ], int n)
{
int i,j,aux;
for ( i=1;i<n;i++)
{
j=i;
while (j>0 && v[j-1]>v[j])
{
aux=v[j];
v[j]=v[j-1];
v[j-1]=aux;
j--;
}
}}
Implementare Pascal
Type vector=array[1..1000] of integer;
procedure
sortareInserie(var
v:vector;
n:integer);
var i,j,aux:integer;
begin
for i:=2 to n do
begin
j:=i;
while (j>1)and(v[j-1]>v[j]) do
begin
aux:=v[j];v[j]:=v[j-1];v[j-1]:=aux;
end;
end;
end;
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM?
Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Demonstraia prin descrierea pas cu pas a algoritmului;
nvarea prin descoperire propunnd elevilor nc un exemplu pe care s-l rezolve ei
pas cu pas;
Conversaia euristic n etapa de fixare a cunostinelor;
Exerciiul propunnd elevilor s modifice algoritmul, astfel nct s realizeze sortarea
descrescatoare a elementelor vectorului.
Ca materiale suport se pot folosi:
- Lecia interactiv AEL;
- Prezentarea PowerPoint ataat materialului.
Metoda sortrii prin numrare const n gsirea pentru fiecare element A[i], a
numrului de elemente din vector, mai mici ca el. Numerele obinute sunt memorate
ntr-un vector C; elementele vectorului de sortat A, sunt iniial atribuite vectorului B. Pe
baza vectorului C, elementele lui B vor fi aranjate n vectorul A.
Exemplu
Vrem s sortm urmatorul ir:
A= (9, -5, 2, 12, 4)
Elementele lui A le atribuim lui B:
B= (9, -5, 2, 12, 4)
Pentru fiecare element A[j] numrm cte elemente sunt mai mici ca el, aceste
numere reinndu-le n vectorul C:
C=(3, 0, 1, 4, 2) se reconstitue vect A astfel: A[c[1]+1]=B[1];A[c[2]+1]=B[2]...
obinndu-se vectorul A sortat (-5, 2, 4, 9, 12)
Algoritm descris n pseudocod
Pentru i 1,n execut
b[i] a[i];
sfpentru
pentru j 2,n execut
pentru i 1,j-1 execut
dac a[i]<a[j] atunci
c[j] c[j]+1
altfel c[i] c[i]+1;
sfdac
sfpentru
sfpentru
pentru i 1,n execut
a[c[i]+1] b[i]
sfpentru
Implementare Pascal
Type vector=array[1..10] of integer;
Procedure sortNumait pe poziia 6.
a:vector;n:integer);
var i,j:integer;b,c:vector;
begin
for i:=1 to n do
begin
c[i]:=0;b[i]:=a[i];
end;
for j:=2 to n do
for i:=1 to j-1 do
if a[i]<a[j] then c[j]:=c[j]+1
else c[i]:=c[i]+1;
for i:=1 to n do
a[c[i]]:=b[i];
end;
Impl
void
UUUUUUUUUUUUUUUUUUU
{
int i
int b
for(
{
c
b
}
for(
fo
if
e
for(
a[
}
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Implementare Pascal
procedure bubbleSort(var v:vector; n:integer);
var ok:Boolean;i,j,aux:integer;
begin
ok:=true;
j:=0;
while ok do begin
ok:=false;
j:=j+1;
for i:=1 to n-j do
if v[i]>v[i+1] then begin
aux = v[i];
v[i] = v[i + 1];
v[i + 1] = aux;
ok =true;
end;
end;
end;
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM?
Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Demonstraia prin descrierea pas cu pas a algoritmului;
Conversaia euristic n etapa de fixare a cunostinelor;
Exerciiul propunnd elevilor un set de aplicaii (exemplu: sortarea descrescatoare a
unui vector, sortarea elementelor de poziii impare,sortarea elementelor nenule)
Ca materiale suport se pot folosi:
- Lecia interactiv AEL;
- Prezentarea PowerPoint ataat materialului.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Se vor reactualiza cunostinele metodei Divide et Impera;
Ca metode de predare se vor folosi:explicaia n etapa de comunicare a cunotintelor;
demonstraia prin descrierea pas cu pas a algoritmului;conversaia euristic n etapa de
fixare a cunostinelor;
Exerciiul propunnd elevilor un set de aplicaii (exemplu: sortarea descrescatoare a
unui vector, s se localizeze elementul maxim i toate elementele dinaintea lui se
sorteaz descresctor iar cele dup el cresctor)
Ca materiale suport se pot folosi:
- Lecia interactiv AEL;
- Prezentarea PowerPoint ataat materialului.
10
12
Indici:
10
13
15
13
11
12
13
11
14 15
i se obine:
Tabloul: 3
10
12
15
Indici:
10
11
12
14
11
13 14
15
Etapa 2: pentru h=4 se aplic algoritmul sortrii prin inserie succesiv subirurilor: x[1],
x[5], x[9], x[13], x[2],x[6],x[10],x[14],x[3],x[7],x[11],x[15],x[4],x[8],x[12].
Dup prima subetap (prelucrarea primului subir) prin care se ordoneaz subirul constituit
din elementele marcate:
Tabloul: 3 8 10 7 9 12 5 15 2 13 6
1
4 14 11
se obine:
Tabloul: 2 8 10 7 3 12 5 15
4 13 6
1 9 14 11
La a doua subetap se aplic sortarea prin inserie asupra subirului constituit din
elementele marcate
Tabloul: 2 8
10
3 12
15
4 13
14
11
obinndu-se aceeai configuraie (subirul este deja ordonat cresctor) din care se
prelucreaz acum subirul constituit din elementele marcate:
Tabloul: 2 8 10 7 3 12 5 15 4 13 6
1 9 14 11
Obtinandu-se:
Tabloul: 2 8 5 7 3 12 6 15 4 13 10 1 9 14 11
Se aplic acum sortarea prin inserie asupra subirului constituit din elementele
marcate:
Tabloul: 2 8 5 7 3 12 6 15 4 13 10 1 9 14 11
obinndu-se:
Tabloul: 2 8 5 1
3 12 6 7 4
13 10 15 9 14 11
Se aplic acum sortarea prin inserie asupra ntregului ir.
Implementare n Pascal
Procedure shellSort(var v:vector;n:integer);
var i,j,h,x:integer;
begin
h:=1;
while h<n do
h:=h*3+1;
while h>=1 do
begin
h:=h div 3;
for i:=h to n do
begin
x:=v[i];j:=i;
while v[j-h]>x do
begin
v[j]:=v[j-h];
j:=j-h;
if j<h then break;
end;
v[j]:=aux;
end;
end;
end;
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Se vor reactualiza cunostinele din fia suport 1.2
Ca metode de predare se vor folosi: Demonstraia prin descrierea pas cu pas a
algoritmului; explicaia n etapa de comunicare a cunotinelor.
38
38
27
27
27
43
43
82
43
10
82
82
Implementare n C++
void sort (int p,int q, int a[100] )
{ int27m; 38
3
43
if (a[p]>a[q])
{m=a[p];a[p]=a[q];a[q]=m;}
}
void interc
q, int43m, int a[100])
3 (int27p,int 38
{
int b[100],i,j,k;
i=p; j=m+1; k=0;
while ((i<=m) && (j<=q))
27
3
9
10
38
if (a[i]<=a[j]) b[++k]=a[i++];
else b[++k]=a[j++];
while(i<=m)
Algoritm
descris n pseudocod:
b[++k]=a[i++];
Sort(p,q,A);
while(j<=q)
dac A[p]>A[q] atunci
b[++k]=a[j++];
interschimba A[p]A[q]
for(i=p;i<=q;i++)
sfSort
a[i]=b[i];
Interc(p,q,m,A)
}
ip;jm+1;k0;
void divimp
(int p, int q, int a[100])
ct
timp
i<=m si j<=q execut
{
int m;dac A[i]<A[j] atunci
kk+1;B[k]
A[i];ii+1
if ((q-p)<=1)
sort (p,q,a);
altfel
else
kk+1;B[k]
{
m=(p+q)/2; A[j];jj+1;
sfdac
divimp(p,m,a);
sfct
timp
divimp(m+1,q,a);
interc(p,q,m,a);
}
}
43
Divizare
10
10
Implementare n Pascal
Proceduresort(p,q:integer;var
a:vector);
Sortare
82
10
var m:integer;
begin
if a[p]>a[q] then begin
m:=a[p];a[p]:=a[q];a[q]:=m;end;
9
10
82
end;
Interclasare
procedure interc(p,q,m:integer;var
a:vector);
var b:vector;i,j,k:integer;
82
begin
i:=p;j:=m+1;k:=0;
while(i<=m)and(j<=q) do
if a[i]<=a[j] then begin
ct timp i<=m execut
inc(k);b[k]:=a[i];inc(i); end
kk+1 B[k] A[i] ii+1
else begin
sfct timp
inc(k);b[k]:=a[j];inc(j); end;
ct timp j<=q execut
while i<=m do begin
kk+1 B[k] A[j];jj+1
inc(k);b[k]:=a[i];inc(i); end;
sfct timp
while j<=q do begin
pentru ip,q execut
inc(k);b[k]:=a[j];inc(j);end;
A[i] B[i]
for i:=p to q do a[i]:=b[i];
Sfpentru
end;
Divimp(p,q,A)
procedure divimp(p,q:integer;var
dac q-p<=1 atunci Sort(p,q,A)
a:vector);
altfel Divimp(p,m,A) Divimp(m+1,q,A)
var m:integer;
Interc(p,q,m,A)
begin
sfdac
if q-p<=1 then sort(p,q,a)
sfDivimp
else begin m:=(p+q) div 2;
divimp(p,m,a);divimp(m+1,q,a);
interc(p,q,m,a);end;
end;
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Se vor reactualiza cunotinele despre interclasarea a 2 vectori sortai i a metodei
Divide et Impera. Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Demonstraia prin descrierea pas cu pas a algoritmului;
Exerciiul propunnd elevilor un set de aplicaii (exemplu: sortarea descresctoare a
primei jumati din vector i cresctoare a celei de-a doua,sortarea elementelor pare)
Ca materiale suport se pot folosi:
- Lecia interactiv AEL, prezentarea PowerPoint ataat materialului.
a[1]
a[1] a[d]
dac x< a[j] atunci
while(s>1)
{ i j j 2*i
while s >a[d]
1 dobegin
x d d-1
a[i] a[j]
s-=1;
s:=s-1;
Apel
Deplasare(s,n)
altfel ok 1
Deplasare(s,n);}
Deplasare(s,N);
Sfrit ct timp
sfrit dac
while(d>1)
end;
Sfrit subalgoritm
sfrit ct timp
{
x=a[1];a[1]=a[d];
a[d]=x;d-=1;
{sortare}
a[i] x
Deplasare(1,d);
while d > 1 do begin
Sfrit
subalgoritm
}
x:=a[1]; a[1]:=a[d]; a[d]:=x;
}
d:=d-1;
Deplasare(1,d); end
end; {HeapSort}
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Demonstraia prin descrierea pas cu pas a algoritmului;
Conversaia euristic n etapa de fixare a cunostinelor;
Implementare Pascal
FunctionCautSecv
(x:integer;v:vector;n:integer):boolean;
var gsit:boolean;
begin
gsit:=false;
for i:=1 to n do
if x=v[i] then
gsit:=true;
CautSecv:=gsit;
end;
n cazul cel mai favorabil cnd elementul se gsete pe prima poziie se efectueaz
dou comparaii. n cazul cel mai nefavorabil, cnd elementul nu se gsete deloc n
vector, se efectueaz 2n+1 comparaii. n continuare este prezentat o implementare
ceva mai rapid:
Implementare C++
int CautSecv(int x,int v[],int n)
{int i=0;
while ((v[i]!=x)&&(i<n))
i++;
if(i<n)
return 1;
else
return 0;
}
Implementare Pascal
Function CautSecv
(x:integer;v:vector;n:integer):boolean;
var i:integer;gasit:boolean;
begin
i:=1; gasit:=false;
while (v[i]<>x)and(i<=n)then
i:=i+1;
if i<=n then
gasit:=true;
CautSecv:=gasit;
end;
Cu aceast implementare, n cazul cel mai favorabil avem dou comparaii, iar n cazul
cel mai nefavorabil avem n+2 comparaii.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM?
Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Conversaia euristic n etapa de fixare a cunostinelor;
Exerciiul propunnd elevilor o aplicaie (dac maximul dintr-un ir se gsete n al
doilea ir).
Studiu de caz: S exemplifice modul n care se aplic algoritmul pentru cutarea unui
element ntr-un vector pentru aflarea poziiei pe care se afl acesta.
st=m=5
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Demonstraia prin descrierea pas cu pas a algoritmului;
Conversaia euristic n etapa de fixare a cunostinelor;
Problematizarea: Cum se modific algoritmul pentru cutarea unui element ntr-un
vector ordonat descresctor?
function CutareInterpolare(v:vector;n,x:integer):Boolean;
var st,dr,m:integer;
begin
st:=1;dr:=n;gsit:=false;
if (x<=v[dr]) and (x>=v[st]) then begin
repeat
m:=st+(x-v[st]*(dr-st) div (v[dr)-v[st]);
if x>v[m] then st:=m+1
else
dr:=m-1;
until ((v[m]<>x) and (st<dr) and (v[st]=v[dr]) and (x>=v[st]) and (x<=v[dr]));
if v[m]=x then gsit:=true;end.
CutareInterpolare:= gsit;
End;
Aceast metod este eficient n cazul n care n este foarte mare i valorile elementelor
tabloului au o distribuie uniform n intervalul v[1],...,v[n]. Numrul de cutri n acest
caz este de ordinul lg(lgn).
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM?
Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Conversaia euristic n etapa de fixare a cunostinelor;
Problematizarea: Cum se modific algoritmul pentru cutarea unui element ntr-un
vector ordonat descresctor?
Implementrile recursive ale algoritmului de sortare prin interclasare efectueaz printrun numr de 2n-1 treceri n cazul cnd acesta se comport ineficient, care n
comparaie cu sortarea rapid care efectueaz un numr de n treceri, aceasta
nsemnnd c sortarea prin interclasare este mult mai recursiv dect sortarea rapid.
Implementrile acestei sortri ocolesc metoda de efectuare a mai multor treceri dect
este necesar, astfel fiind uor de implementat.
Cele mai multe implementri ale sortrii prin interclasare nu efectueaz sortri "pe loc",
astfel, capacitatea memoriei alocat la nceputul procedeului de sortare are aceeai
dimensiune ca i capacitatea memoriei folosit pentru a stoca datele i dup terminarea
procesului de sortare.Deasemeni este permis utilizarea conceptului de sortare pe loc
n cadrul algoritmului de sortare prin interclasare, ns va rezulta un algoritm foarte
complicat care va avea o performan foarte scazut din puncrt de vedere practic, astfel
c algoritmul nu va mai rula ntr-un timp de O(n logn).n acest caz metoda de sortare
prin ansamble (heapsort) are o comportare mult mai eficient, deoarece prezint un
algoritm mai uor de implemetat.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Conversaia euristic n etapa de fixare a cunostinelor;
Studiu de caz: -S se demonstreze c timpul de execuie al algoritmului quicksort, n
cazul unui vector A cu toate elementele egale ntre ele, este O(n log n).
- S se demonstreze c pentru a interclasa doi vectori ordonai ce conin fiecare
cte n elemente, sunt necesare 2n-1 comparaii n cazul cel mai defavorabil.
Pentru a aloca un spaiu de memorie sortarea rapid utilizeaz o metod care are o
complexitate de O(log n), care este valabil i n situaia n care algoritmul folosit se
comport ineficient.ns pentru a ocoli o comportare ineficient trebuie s se aib n
vedere urmatoarele aspecte:
- Se utilizeaz metoda partiionrii pe loc.Aceasta neceist O(1) timp de sortare.
- Dup partiionarea listei iniiale va rezulta c partiia care deine cele mai puine
elemente este sortat (prin procedee recursive) prima, necesitnd un spaiu de
memorie de O(log n) locaii.Astfel dac se ncepe sortarea unei alte partiii atunci se va
utliza metoda iteraiilor.
Versiunea sortrii rapide care utilizeaz procedura de partiionare pe loc utilizeaz un
spaiu de memorie de dimensiune constant chiar i naintea metodei de
recursivitate.Oricum, se execut un numr de O(log n) de nlocuiri prin operaii
recursive, astfel rezultnd c sortarea rapid trebuie s memoreze indicii de dimensiuni
fixe pentru a furniza informaii referitoare la fiecare termen din list.Cnd algoritmul se
comport eficient vor fi necesare un numar de O(log n) de nlocuiri care vor utiliza un
spaiu de memorie de O(log n) locaii.Cnd algoritmul se comport ineficient atunci
nlocuirea elementelor de sortare se va executa ntr-un timp de O(n), necesitnd astfel
i un spaiu de memorie O(n) locaii.
Dac se presupune c se sorteaz arbitrar liste de dimensiuni mari atunci utilizarea
unui concept de sortare care s foloseasc variabile cum ar fi stnga sau dreapta este
indicat spre a fi utlizat, deoarece aceste variabile au dimensiuni reduse i nu vor depi
limita constant a spaiului de memorie alocat la nceputul sortrii; astfel fiind necesare
un numr de O(log n) bii pentru a localiza poziia celor n termeni din list.Dac se
utliziteaz acest concept bazat pe variabilele de stnga i dreapta n fiecare partiie
(sub-lista) a listei iniiale atunci vor fi necesari un numr de O(log 2 n) de bii pentru a
memora locaiile poziiilor elementelor din list n cazul n care algoritmul de sortare se
comport eficient, i n caz contrar vor fi necesari un numr de O(n logn).
Dac se folosete un algoritm de sortare diferit de algoritmul de sortare "pe loc", atunci
sortarea rapid va executa un numar de O(n) locaii de memorie nainte de a se ncepe
nlocuirea termenilor.Un astfel de algoritm execut sortarea complet a listei ntr-un timp
definit prin metoda O(n), deoarece fiecare nivel la care se aplic operaia de
recursivitate utilizeaz mai mult spaiu de memorie.Dac elementele listei au dimensiuni
diferite atunci rezolvarea devine mai complex, cci de exemplu dac cele mai multe
elemente ale unei liste ce trebuie sortat sunt distincte, atunci pentru a stoca informaii
despre acestea este necesar un numar de O(log n) bii, iar numarul de bii necesari
pentru a memeora informaii despre aceste elemente va fi necesar un spaiu de
memorie de O(n log n) locaii, iar n cazul n care algoritmul care trebuie s sorteze
aceste elemente este ineficient atunci va fi necesar un spaiu de memorie de O(n2 log n)
locaii.
Comportarea algoritmilor de sortare din punct de vedere al eficienei i al utilizrii
memoriei este exprimat n urmtorul tabel:
Numele sortrii
Comportare
eficient
Comportare
medie
Comportare
ineficient
Sortare
interschimbare
Sortare selecie
O(n)
--
O(n2)
Nr.
Stabilitate
accese la
memorie
O(1)
Da
O(n2)
O(n2)
O(n2)
O(1)
Nu
Sortare inserie
O(n)
O(n + d)
O(n2)
O(1)
Da
Sortare inserie
cu pas variabil
Sortare
interclasare
HeapSort
QuickSort
--
--
O(n1.5)
O(1)
Nu
O(n log n)
O(n log n)
O(n log n)
O(n)
Da
O(n log n)
O(n log n)
O(n log n)
O(n log n)
O(n log n)
O(n2)
O(1)
O(log n)
Nu
Nu
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM?
Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Conversaia euristic n etapa de fixare a cunostinelor;
Studiu de caz: S se descrie algoritmul de sortare prin inserare, la care s se modifice
cutarea liniar cu o cutare binar.S se calculeze pentru acest nou algoritm numrul
de comparaii i mutri ale elementelor din list pentru exemplul: 5 9 1 7 4 3 2 0. Devine
acest algoritm mai performant?
Acest coninut poate fi evaluat oral sau prin lucrare scris.
indiferent de valoarea
suma(n)
1: S 0
2: i 1
3:ct timp i<=n execut
4: s s+i
5: i i+1
Sfritcttimp
Unde operaiile ce sunt contorizate sunt numerotate. Timpul de execuie al algoritmului
poate fi determinat folosind tabelul de costuri:
Operaie
1
2
3
4
5
Cost
C1
C2
C3
C4
C5
Nr. repetri
1
1
n+1
n
n
Cost
2(m+1)
2(p+1)
1
2(n+1)
2
Nr. repetri
1
m
m*p
m*p
m*p*n
Cost
1
2n
1
1
Nr. repetri
1
1
n-1
r(n)
Operaie
Cost
Nr. repetri
1
1
1
2
1
1
3
3
r1(n) + 1
4
1
r1(n)
5
1
r2(n)
6
1
r3(n)
n cazul n care valoarea v se afl n ir notm cu k prima poziie pe care se afl.
Se obine:
r1(n)=
k valoarea se afl n ir
n valoarea nu se afl n ir
r2(n)=
1 valoarea se afl n ir
0 valoarea nu se afl n ir
r3(n)=
deci 1 r1(n) n
deci 0 r3(n) n
Cazul cel mai favorabil este cel n care valoarea se afl pe prima poziie n tablou,
caz n care T(n) = 3(n(n) + 1) + n(n) + r2{n) + n(n) + 2 = 6 + 1 + 1 + 0 + 2 = 10.
Cazul cel mai defavorabil este cel n care valoarea nu se afl n tablou:
T(n)=3(n+1)+n+0+2=5(n+1)
Importana celui mai defavorabil caz. n aprecierea i compararea algoritmilor
intereseaz n special cel mai defavorabil caz deoarece furnizeaz cel mai mare timp
de execuie relativ la orice date de intrare de dimensiune fix. Pe de alt parte pentru
anumii algoritmi cazul cel mai defavorabil este relativ frecvent.
n ceea ce privete analiza celui mai favorabil caz, aceasta furnizeaz o margine
inferioar a timpului de execuie i poate fi util pentru a identifica algoritmi ineficieni
(dac un algoritm are un cost mare n cel mai favorabil caz, atunci el nu poate fi
considerat o soluie acceptabil).
Timp mediu de execuie. Uneori, cazurile extreme (cel mai defavorabil i cel mai
favorabil) se ntlnesc rar, astfel c analiza acestor cazuri nu furnizeaz suficient
informaie despre algoritm.
n aceste situaii este util o alt msur a complexitii algoritmilor i anume timpul
mediu de execuie. Acesta reprezint o valoare medie a timpilor de execuie calculat n
raport cu distribuia de probabilitate corespunztoare spaiului datelor de intrare. Dac
v(n) reprezint numrul variantelor posibile, Pk este probabilitatea de apariie a cazului
k iar Tk(n) este timpul de execuie corespunztor cazului k atunci timpul mediu este dat
de relaia:
Tm ( n)
v(n)
T
k 1
( n) Pk .
Exemplu.Considerm din nou problema cutrii unei valori v ntr-un tablou x [1..n]
(exemplul 4).
Pentru a simplifica analiza vom considera c elementele tabloului sunt distincte. Pentru
a calcula timpul mediu de execuie trebuie s facem ipoteze asupra distribuiei datelor
de intrare.
S considerm c valoarea v se poate afla pe oricare dintre poziiile din tablou sau n
afara acestuia cu aceeai probabilitate. Cum numrul cazurilor posibile este v(n) n 1
(n cazuri n care valoarea se afl n cadrul tabloului i unul n care v nu se afl n
tablou) rezult c probabilitatea fiecrui caz este de 1 /( n 1) . Cum timpul
0
,
lim
0
,
lim
0
,
n n!
n a n
n n n
n
nk
Clase de complexitate
Ordin
(cazul cel mai defavorabil)
Exemplu
logaritmic
O(lgn)
cutare binar
liniar
O(n)
O(nlgn)
cutare secvenial
sortare prin interclasare
ptratic
O(n2)
cubic
O(n3)
exponenial
O(2n)
factorial
O(n!)
Majoritatea limbajelor de programare ofer funcii care calculeaz timpul scurs ntre
dou momente. Este important ca n sistem s nu fie mai multe taskuri active sau s fie
contorizat numai timpul afectat execuiei programului analizat. Se recomand s fie
executat programul de mai multe ori i s se fac media timpului de execuie.
La generarea seturilor de date de intrare scopul urmrit este acela de a se obine
date tipice rulrilor uzuale (s nu fie cazuri extreme sau excepii). n acest scop datele
se genereaz n manier aleatoare
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic.
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Dim_bii
Semnificaie
Domeniu de valori
Int
16
ntreg
[-32768..32767]
Short
16
ntreg
[-32768..32767]
Long
32
ntreg
[-2147483648..2147483647]
Unsigned
16
ntreg fr semn
[0..65535]
Unsigned
32
ntreg fr semn
[0..4294967295]
Unsigned
[0..255]
char
Signed char
[-128,127]
Float
32
Flotant
[3.4x10^(-38)..3.4x10^38]
Double
64
simpl precizie
Flotant dubl precizie [1.7x10^(-308).. 1.7x10^308]
Long double
80
long
4932)..3.4x10^4932]
Observaii:
Pentru tipul char, implicit se consider "signed char". Variabilele de tip ntreg folosesc
pentru memorarea datelor codul complementar fa de 2 (dac se rein date cu semn)
sau baza 2 (pentru date fr semn). Caracterele se memoreaz prin codul ASCII, care
este tot un numr ntreg. Pentru tipurile flotante (reale) se folosete reprezentarea n
virgul mobil.
Dac exist un algoritm care rezolv problema P nu nseamn c el este unic.
De exemplu, exist algoritmi ca: QuickSort (sortare rapid), MergeSort (sortare prin
interclasare), sortarea prin selecie i inserie etc. care sunt utilizai n acelai scop.
Prin urmare, apare necesitatea alegerii unui algoritm din clasa de algoritmi care
rezolv problema P care s corespund unor cerine. Algoritmul depinde de aplicaie,
implementare, mediu, frecvena utilizrii etc. Compararea algoritmilor este un proces
subtil care are n vedere mai multe aspecte. n continuare, vom cuta s analizm
cteva din aceste aspecte care joac un rol important n elaborarea unui algoritm.
Un program necesit un spaiu de memorie constant, independent de datele de
intrare, pentru memorarea codului su, a constantelor, a variabilelor simple i a
structurilor de date de dimensiune constant alocate static i un spaiu de memorie
variabil, a crui dimensiune depinde adesea de datele de intrare, constnd din spaiul
necesar pentru structurile de date alocate dinamic, a cror dimensiune depinde de
instana problemei de rezolvat i din spaiul de memorie necesar apelurilor de proceduri
i funcii.
De exemplu, s considerm urmtoarea problem:
Fie A o mulime cu n elemente i x o valoare de tipul elementelor mulimii A. S se
decid dac x aparine sau nu mulimii.
Vom scrie o funcie iterativ care va cuta secvenial valoarea x n vectorul folosit
pentru memorarea mulimii A, funcie care ntoarce valoarea true dac x se gsete n
vector i false n caz contrar.
function Caut : boolean;
var i: integer; gasit: boolean;
begin
i := 1; gasit := false;
while (i < n) and not gasit do
if a[i] = x then gasit := true
else i := i+1;
Caut := gasit;
end;
Funcia Caut va fi apelat o singur dat. Neavnd parametri, va necesita spaiu de
memorie doar pentru variabilele locale i pentru adresa de revenire. Deci nu este
necesar spaiu de memorie variabil. Aceeai problem o putem rezolva cu ajutorul unei
funcii recursive Rcaut.
Funcia are un parametru ntreg care indic poziia de la care ncepe cutarea n
vectorul a. Evident, iniial apelm rcauta(1).
function Rcaut (poz: integer): boolean;
begin
if poz > n then rcauta := false
else if a[poz] = x then Rcaut := true
else Rcaut := Rcaut(poz+1);
end;
Spaiul de memorie utilizat pentru un apel al funciei este cel necesar pentru
memorarea parametrului (2 octei) i pentru adresa de revenire (2 octei). Dac x nu se
gsete n vector se fac n apeluri recursive, deci spaiul de memorie variabil este de 4n
octei. Dac x se gsete n vector, dimensiunea spaiului de memorie variabil depinde
de poziia pe care x se gsete n vectorul a. Deci, varianta recursiv necesit un spaiu
de memorie mult mai mare dect varianta iterativ.
Progresele tehnologice fac ca importana criteriului spaiu de memorie utilizat s
scad, prioritar devenind criteriul timp.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode i procedee de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Conversaia euristic n etapa de fixare a cunostinelor;
Studiu de caz: Se poate propune elevilor s explice pentru tipurile int i unsigned char
cum se calculeaz domeniile de valori.
Acest coninut poate fi evaluat oral sau prin lucrare scris.
10
0,0001
0,0001
0,001
0,1
0,001
0,059
20
0,0002
0,0004
0,008
3,2
1
38
30
0,0003
0,0009
0,027
24,3
17,9
6,5 ani
40
0,0004
0,0016
0,064
1,7
12,7 yile
38,5 secol
50
0,0005
0,0025
0,125
5,2
38,7 ani
2*108 secol
(+)
(*)
Nr operaii
N=1
N=10
N=100
N=200
N=500
n*10000
10.000
10.000
1.000.000
2.000.000
5.000.000
N3
1
1.000
1.000.000
8.000.000
125.000.000
lim
Rezult deci c, mai ales pentru valori mari ale intrrilor n algoritm, adic ale lui n, este
mai important numrul de calcule, de operaii efectuate, i nu diferenierea lor pe tipuri,
chiar dac timpii de execuie pentru diferite operaii difer.
Observaia 2: Nu exist o metod general de deteminare a numrului de operaii,
asfel nct problema complexitii trebuie rezolvat pentru fiecare program n parte. De
exemplu, fie produsul a patru matrice A1, A2, A3 si A4, care au respectiv dimensiunile:
(10,20), (20,50), (50,1), (1,100). nmulirea matricelor se poate efectua n mai multe
moduri:
- Fie ordinea (A1* (A2*( A3* A4))) care necesit 125000 operaii, deoarece:
50*1*100+20*50*100+10*20*100=125000.
- Fie ordinea ((A1* (A2* A3)) *A4) care necesit 2200 operaii, deoarece:
20*50*1+10*20*1+10*1*100=2200.
Rezult deci c timpul de execuie n cel de-al doilea caz este de aproximativ 60 de ori
mai mic dect primul caz.
Majoritatea algoritmilor exponeniali constituie variante ale unei enumerri totale a
cilor de identificare a soluiilor unei probleme, pe cnd cei polinomiali reprezint
rezultatul unei cunoateri detaliate a problemei studiate (de exemplu, metoda
backtracking conduce la algoritmi exponeniali n cazul n care sunt enumerate toate
cile de identificare a soluiei unei probleme).
Din acest motiv se spune c o problema este uor rezolvabil sau uoar numai
dac s-a elaborat un algoritm polinomial pentru rezolvarea ei. O problem pentru care
nu exist un algoritm polinomial se numete dificil.
Calitatea algoritmului depinde de polinomialitatea sa i de gradul ct mai mic al
polinomului.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Conversaia euristic n etapa de fixare a cunostinelor;
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Conversaia euristic n etapa de fixare a cunostinelor;
sfpentru
pentru in-1,1 -1 execut
pentru j1,i-1 execut
dac s[i+1][j] s[i+1][j+1] atunci
s[i][j]x[i][j]+s[i+1][j]
u[i][j]j
altfel
s[i][j]x[i][j]+s[i+1][j+1]
u[i][j]j+1
sfdac
sfpentru
sfpentru
n final s[1][1] d suma maxim posibil pentru iruri de n numere ca n enun iar un
ir de sum maxim se obine astfel :
j1
pentru i 1,n
scrie x[i][j]
j u[i][j]
sfpentru
Complexitatea algoritmului de mai sus este O(n2),deci polinomial.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode i procedee de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Conversaia euristic n etapa de fixare a cunostinelor;
Studiu de caz: Se poate propune elevilor urmtoarea problem: Se consider un vector
cu n elemente ntregi. S se afle cel mai lung subir al acestuia. Un subir cresctor al
lui A se poate descie astfel: Ai1 Ai2 . . .Aik i 1 i1<i2. . . <ik n. Exemplu: pentru n=5 i
vectorul A= (4, 1, 7, 6, 7) subirul obinut va fi: 4, 7, 7.
Acest coninut poate fi eva luat oral sau prin lucrare scris.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode i procedee de predare se vor folosi:Explicaia n etapa de comunicare a
cunotintelor; Conversaia euristic n etapa de fixare a cunostinelor; Problematizarea:
Se poate rezolva problema prin metoda nainte? Studiu de caz: Se d un ir A cresctor
i o valoare x. S se determine un subir de lungime maxim, n care diferena dintre
oricare doua elemente alturate este cu x (Aik+1 Aik ) x, 1 ik <n. Exemplu: pentru
n=6, x=4 i irul 5 7 9 10 14 15 se va afia 5 9 14, 5 10 15 sau 5 10 14.
Acest coninut poate fi evaluat oral sau prin lucrare scris.
i j n.
Se observ c:
a) Ci,i = 0;
b) Ci,i+1 = di-1 . di . di+1;
c) C1,n este valoarea minim cutat;
d) Este verificat principiul optimalitii:
Ci,j = min {Ci,k+Ck+1,j + di-1.dk.dj i k < j }
pentru c asocierile sunt de forma (AiAi+1...Ak)(Ak+1Ak+2...Aj). (Relaia este adevrat
deoarece parantezarea (AiAi+1...Ak) trebuie s fie optim pentru ca (AiAi+1...Aj) s fie la
rndu-i optim). Deci pentru rezolvare se aplic principiul (3) metoda mixt.
Costul optimal C1,n poate fi calculat apelnd funcia recursiv:
Funcia C(i, j) este:
Dac i = j atunci C 0
altfel
Dac i = j-1 atunci C di-1 . di . di+1
altfel
min C(i, i) + C(i+1, j) + di-1 . di . dj
Pentru k i+1, j-1 execut
val C(i, k) + C(k+1, j) + di-1 . dk . dj
Dac val < min atunci
min val
sfdac
sfpentru
C min
sfdac
sfdac
sf-C
funcie care interpreteaz relaia Ci,j = min {Ci,k+Ck+1,j + di-1.dk.dj i k < j }.
S observm n primul rnd c n urma acestui calcul nu obinem dect costul minim
pentru nmulire. Dac notm cu Sij valoarea k pentru care se obine minimul (Cij =
Ci,k+Ck+1,j + di-1.dk.dj) n calculul de mai sus, atunci vom ti c pentru produsul AiAi+1...Aj este
optim s efectum (AiAi+1...Ak)(Ak+1Ak+2...Aj).
n al doilea rnd s remarcm c funcia recursiv efectueaz calcule redundante. De
exemplu, pentru calcularea lui C(1, 4) se efectueaz calcule dup cum indic figura
urmtoare:
C(1,4)
C(1,1)
C(2,4)
C(2,2)
C(3,4)
C(1,2)
C(2,3)
C(4,4)
C(3,4)
C(1,1)
C(1,3)
C(2,3)
C(1,2)
C(4,4)
C(3,3)
Pentru evitarea calculrii de mai multe ori a acestor valori ale funciei C, putem proceda
dup cum urmeaz:
Subalgoritmul InmulireOptim(n, d, C, S) este:
{Dimensiunile matricelor sunt: di-1x di, i = 1, ..., n}
{Rezultatele sunt matricele C i S descrise mai sus.}
Pentru i 1, n execut
Cij 0
sfpentru
Pentru l 2, n execut
{diagonala superioar l din matrice}
Pentru i 1, n-l+1 execut {linia de pe acea diagonala}
Fie j i + l -1
{Elementul Cij, i =1,...,n-l+1}
Cij Infinit
{Ci,j = min {Ci,k+Ck+1,j + di-1.dk.dj i k < j }
Pentru k i, j-1 execut
cost Cik + Ck+1,j + di-1.dk.dj
Dac cost < Cij atunci
Cij cost
{Valoarea pentru costul minim}
Sij k
{Indic poziia parantezrii}
sfdac
sfpentru
sfpentru
sfpentru
Matricele C i S se calculeaz n ordinea diagonalelor, dup cum indic figura
urmtoare:
l=2
1
2
l=3
l=4
(ea duce sistemul din starea de completare pan la poziia i-1 n starea de completare
pan la pozitia i). Dac pentru o astfel de problem se reuete demonstrarea unui
principiu de optimalitate(i determinarea relaiilor de recuren aferente), problema se
va rezolva prin metoda de programare dinamic corespunzatoare(nainte, napoi sau
mixt) folosind relaiile de recuren evideniate, n timp polinomial. Dac nu se reueste
acest lucru, problema se va rezolva prin backtraking (care este o metod universal),
oinnd un algoritm ce poate ajunge (n cazul cel mai nefavorabil) exponenial.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode i procedee de predare se vor folosi:
Explicaia n etapa de comunicare a cunotintelor;
Conversaia euristic n etapa de fixare a cunostinelor;
Studiu de caz: Se poate propune elevilor urmtoarea problem: Se consider o matrice
n care se afl numai litere mici distincte ale alfabetului englezesc i un cuvnt format
din litere distincte ale alfabetului englezesc. S se gseasc numrul total de apariii ale
acestui cuvnt n cadrul matricei, tiind c acesta poate s apar sub orice form ( de la
stnga la dreapta, de jos n sus, n form de spiral etc.
min C T X
Fie problema PPL standard:
AX D
X 0
este soluia
d iB daca.i B
0.daca.i B
Vi =
Vi A B B 1 A
D
V1
V2 Vk.Vn
E1
E2 Ek.En
E1
E2
d1
d2
.
.
Eh
.
.
dh
.
.
ah1 ah2 ahk.ahn
Em
dm
1
0
0
0
0
1.......0...............0
.
.
.
0
.
.
.
0
Apar astfel calculate coordonatele lui D n bazele succesive obinute prin nlocuirea n
baz a cte unui vector din A. n final se obine soluia de baz a sistemului restriciilor
PPL, X=B-1D=DB.
Dac vectorul Vk intr n baz i vectorul Eh iese, se obine o nou baz B1 i, cu
transformrile de coordonate la schimbarea bazei datorate aplicrii regulei pivotului
d hB
B ,i h
B1 ahk
ahk 0 se obin relaiile: d i
B B B B
d i ahk d h aik
aB ,i h
hk
Se pune problema determinrii pentru sistemul compatibil AX=D, A aij mxn ,n>m rang
A=m, a acelor soluii de baz pentru care X B 0 .
B
i
B
Cum xi =
atunci X B 0 D B 0
d daca.i B
0.daca.i B
, i B
B
aikB 0 a B
a hk
ik
B, S
B
B
1
B
V jB X j sau, scris
Dac notm B S V j atunci soluia sistemului devine: X D
jS
pe componente,
z Ct X
ci xi c j x j
iB
jS
c j ci aijB x j
jS
iB
ci d iB
iB
B
Notm: z ci d i valoarea funciei obiectiv corespunztoare programului de baz
iB
z Bj ci aijB i avem: z z
B
iB
T
T
1
B
- valoarea funciei obiectiv z C B x C B B D ci d i
z Bj
iB
iB
ci aijB
B
T
B
B
- diferenele c j z j = c j C B V j , j 1, n ; c j z j 0, j B
Datele se introduc ntr-un tabel SIMPLEX:
CB
DB
c1
c2 ......... cn
V1
V2......... Vn
V1e
Vme
V1e
ci1
x i1
ai1 ,1
ai1 , 2
.................
ai1 ,n
V2e
ci
x i2
ai2 ,1
ai2 , 2
.................
ai2 ,n
.
.
.
.
.
.
Vme cim
.
.
.
x im
.
.
.
a im ,1
.
.
.
aim , 2
z1B
z 2B ............. z nB
c1 z1B
c 2 z 2B ... c n z nB
c j z Bj
.
.
.
...............
aim ,n
V2e ...
B
B
criteriul de intrare n baz: intr n baz vectorul V k pentru care c k z k inf c j z j
inf
Vh pentru care B
, i B .
a hk aikB 0 aikB
B
ik
Se obine o nou baz B1 i se reia algoritmul de la punctul b), iar ieirea din el are loc
fie la punctul b) (testul de optimalitate), fie la punctul c) (testul de optim infinit).
Deci: algoritmul SIMPLEX va testa condiia de optim pentru programul de baz gsit i,
n caz c aceasta nu este satisfcut, va determina un alt program de baz care va
apropia funcia obiectiv de valoarea optim, iar n final va determina valoarea optim a
sa.
Observaie:
a)Pentru o problem de maxim se schimb semnul inegalitii n criteriul de optim i inf
devine sup la criteriul de intrare n baz.
B
b)Dac criteriile decid c a hk este pivot, atunci tabelul SIMPLEX se transform dup
regulile:
i) linia pivotului se mparte cu pivotul.
ii) coloana pivotului se completeaz cu 0 pn se obine vectorul unitar al bazei
canonice.
iii) orice alt element din tabel se transform dup regula dreptunghiului (pivotului)
introdus la metoda eliminrii complete.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Ca metode i procedee de predare se vor folosi:Explicaia n etapa de comunicare a
cunotintelor; Conversaia euristic n etapa de fixare a cunostinelor;Studiu de caz:
Se poate propune elevilor s rezolve cu algoritmul simplex urmtoarea problem
min f 3x1 6 x 2
3x1 2 x 2 36
x1 , x 2 0
4 x1 5 x 2 90
Acest coninut poate fi evaluat oral sau prin lucrare scris.
Greedy euristic
Exemple:
1. Fie n=5 si G=10.
1
Greutate 2
Valoare 4
2
4
20
3 4 5
5 2 6
1 3 3
Valoare/greutate 2
fie colorate cu aceiai culoare. Se tie c sunt suficiente patru culori pentru a colora
orice hart, dar nu se cunoate nici un algoritm n timp polinomial care s produc o
soluie folosind doar patru culori. Algoritmul greedy prezentat n continuare rezolv
problema dar nu cu un numr minim de culori.
Funcia Hari(n, A) este:
S[1] 1
pentru i 2,n execut
culoare1
gsittrue
ct timp gsit execut
gsitfalse
pentru j1,i-1 execut
dac A[i][j] = 1 and S[j] = culoare atunci
gsittrue
dac gsit= fals atunci S[i]culoare
altfel culoare culoare + 1
sfct timp
sfpentru
Hari S
Sf- Hari
Algoritmul pleac de la o ar i o coloreaz cu culoarea 1. Pentru a colora ara i
(presupunnd c sunt colorate trile pn la i-1), se ncearc colorarea cu cea mai mic
culoare dac nu exist un vecin deja colorat cu culoarea respectiv. Dac nu este
ndeplinit aceast condiie se trece la culoarea urmtore i se verific din nou toi
vecinii.
Sugestii metodologice
UNDE PREDM? Coninutul poate fi predat n laboratorul de informatic .
CUM PREDM? Clasa poate fi organizat frontal sau pe grupe.
Se vor reactualiza cunostinele despre tehnica de programare Greedy.
Ca metode i procedee de predare se vor folosi: Explicaia n etapa de comunicare a
cunotintelor; Conversaia euristic n etapa de fixare a cunostinelor;
Problematizarea: Cum se modific problema rucsacului n cazul continuu(cnd
obiectele pot fi tiate n buci)?
Studiu de caz: Se poate propune elevilor s rezolve problema plata sumei cu numr
minim de bancnote prin metoda backtracking i cu ajutorul programelor de calculare a
timpului de execuie din fia suport 10.1 se va calcula timpul pentru aceleai date de
intrare n cazul:
Greedy euristic vs Backtracking
Fia rezumat
Clasa ________________
Nr.
Crt.
1
2
3
4
...
Y
Nume i
prenume
elev
Profesor______________________
Competena 1
A1
A2
Competena 2
AX
A1
A2
Competena 3
A3
A1
A2
A3
zz.ll.aaaa1
zz.ll.aaaa reprezint data la care elevul a demonstrat c a dobndit cunotinele, abilitile i atitudinile vizate prin activitatea respectiv
Observaii
Resurse necesare
Aici se pot nscrie orice fel de resurse speciale solicitate:manuale tehnice, reete,
seturi de instruciuni i orice fel de fie de lucru care ar putea reprezenta o surs de
informare suplimentar pentru un elev care nu a dobndit competenele cerute.
V. Bibliografie
1. Cormen, Thomas.Leiserson, Charkes.Rivest, Ronald (1990). Introducere in
algoritmi Bucureti: Editura Agora
2. Cerchez, Emanuela. erban, Marinel (2005). Programarea n limbajul C/C++
pentru liceu vol. II, Iai: Editura Polirom
3. Sorin, Tudor (2006). Manual de informatica intensiv clasa a XI a Bucureti:
Editura L&S Info-mat
4. Blan, Gabriela. Ionescu, Clara. Giurgea, Mihaela. Soroiu,Claudiu (2004).
Informatic pentru grupele de performan, Cluj-Napoca Editura Dacia
Educaional
5. Lic, Dana. Paoi Mircea (2005). Fundamentele programrii, Bucureti : Editura
L&S Info-mat
6. Odgescu, I. Furtun, F.(1998). Metode i tehnici de programare, Bucureti:
Editura Computer Libris Agora
7. Sorin, Tudor (1996).Tehnici de programare, Bucureti : Editura L&S Info-mat
8. Neculai Andrei (1999). Programarea matematic avansat, Bucureti Editura
Tehnic