11. metode de elaborare a algoritmilor - cs.ubbcluj.roper/fp -_-/fp_11.pdf · care sunt manevrele...

17
1 1 /17 /17 11. 11. Metode Metode de de elaborare elaborare a a algoritmilor algoritmilor C C 11 11 / 14.12.2012 / 14.12.2012 1. 1. Metoda Metoda Greedy Greedy 2. 2. Metoda Metoda Divide et Divide et Impera Impera 3. 3. Metoda Metoda Back Tracking Back Tracking 4. 4. Metoda Metoda Programării Programării Dinamice Dinamice 5. 5. Metoda Metoda Branch and Bound Branch and Bound 6. 6. Metode Metode Euristice Euristice 7. 7. Algoritmi Algoritmi Genetici Genetici

Upload: others

Post on 07-Sep-2019

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

11/17/17

11.11. MetodeMetode de de elaborareelaborare a a algoritmiloralgoritmilor

CC1111 / 14.12.2012/ 14.12.2012

1.1. MetodaMetoda GreedyGreedy

2.2. MetodaMetoda Divide et Divide et ImperaImpera

3.3. MetodaMetoda Back TrackingBack Tracking

4.4. MetodaMetoda ProgramăriiProgramării DinamiceDinamice

5.5. MetodaMetoda Branch and Bound Branch and Bound

6.6. MetodeMetode EuristiceEuristice

7.7. AlgoritmiAlgoritmi GeneticiGenetici

Page 2: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

22/17/17

11.111.1 MetodaMetoda Greedy Greedy Metoda GreedyGreedy (lacom) este una din cele mai eficiente metode, rapiditatea

fiind obţinută prin faptul că nu se fac reveniri asupra deciziilor luate. Metoda estefolosită în probleme de optimizare în care se poate obţine optimul global (final) prin alegeri succesive ale optimului local (la un moment dat), evident acest lucrutrebuietrebuie demonstratdemonstrat teoreticteoretic (altfel metoda este euristică).

Problemele care se pot rezolva cu această metodă sunt de forma:

Se dă o mulţime A. Se cere o submulţime B A care:

să îndeplinească anumite condiţii interne (să fie acceptabilă) şi să fie optimală (să realizeze un maxim sau minim).

Algoritmul GreedyGreedy construieşte soluţia (submulţimea B) plecând de la mulţimea vidă şi adăugând câte un element ales din mulţimea A (considerat optimîn acel moment), dacă mulţimea B rămâne acceptabilă. De aceea trebuietrebuie verificatăverificatăurmătoarea proprietate :

dacă B este acceptabilă şi CB rezultă că şi C este acceptabilă.

Page 3: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

33/17/17

MetodaMetoda GreedyGreedy

Există doi algoritmi generali de tip Greedy prezentaţi în continuare, ambiipleacă de la mulţimea vidă (care este acceptabilă) şi construieşte o mulţimeoptimală acceptabilă în ficare moment:

Algoritmul GreedyGreedy este: {2}{2}Date A,n; { a1,a2,…,an }B := ;Ordonez(A,n)Pentru i:=1,n Execută

Dacă Acc(B{ai}) Atunci B:=B{an}SfPentru;Rezultate B;

SfAlgoritm.

Algoritmul GreedyGreedy este: {1}{1}Date A;B := ;Repetă

e := Aleg(A); A := A - {e};Dacă Acc(B{e}) Atunci B:=B{e}

PânăCând A=;Rezultate B;

SfAlgoritm.

Se observă că cel de al doilea algoritm, nu alege de fiecare dată optimul local ci ordonează vectorul A astfel încât elementele să fie tocmai în ordinea preferată. Dacă funcţia Aleg, respectiv procedura Ordonez urmăresc realizarea optimului, funcţia Acc verifică dacă mulţimea construită este corectă (acceptabilă).

Page 4: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

44/17/17

MetodaMetoda GreedyGreedy

Exemplu:

a) Problema rucsacului. Având un rucsac de o greutate maximă admisă T şi n obiecte caracterizate prinutilitate şi greutate: Oi(ui,gi), se cere să alegem acele obiecte care nu depăşescgreutatea admisă şi realizează utilitatea maximă (egală cu suma utilităţilor).

Se dă o mulţime A (A = A = multimeamultimea tuturortuturor obiectelorobiectelor). Se cere o submulţime B A (B = B = multimeamultimea obiectelorobiectelor din din rucsacrucsac) care:

să îndeplinească anumite condiţii interne (Accept.)Accept.) şi

să fie optimală (AlegAleg / Ordonez/ Ordonez).

Aleg : obiectul i pentru care raportul ui /gi este maxim, {1}{1} Ordonez: ui /gi ui+1 /gi+1 (i=1,2,…,n-1), {2}{2} Accept. : suma greutatilor obiectelor din rucsac ≤ TT. {1 {1 şi 2}2} Metoda asigură optimul numai în cazul umplerii rucsacului.

Page 5: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

55/17/17

MetodaMetoda GreedyGreedy

Exemplu:

b) Problema numerelor naturale prime şi neprime. Având un set de numere naturale, se cere să alegem dintre acestea cel mult k(dat) numere prime si oricate neprime, astfel încât suma celor prime sădepăşească suma celor neprime, iar numarul elementelor alese (prime sineprime) sa fie maxim.

Se dă o mulţime A (A = A = multimeamultimea tuturortuturor numerelornumerelor datedate). Se cere o submulţime B A (B = B = submultimeasubmultimea prime prime sisi neprimeneprime) care:

să îndeplinească anumite condiţii interne (Accept.)Accept.) şi

să fie optimală (AlegAleg / Ordonez/ Ordonez).

Aleg : cel mai mare numar prim, dacă există, altfel pe cel mai mic, {1}{1} Ordonez: numerele prime descrescător, apoi cele neprime crescător, {2}{2} Accept. : sunt cel mult k numere prime şi suma lor este mai mare. {1{1 şi 2}2}

Page 6: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

66/17/17

MetodaMetoda GreedyGreedyExemplu R:

Intr-un hotel cu mxn camere trebuie cazate q familii.Se stie cate persoane (maxim) pot fi cazate in fiecare camera (cij).Familia i are pi persoane si poate fi cazata intr-o camera doar daca pi≤cij.

Cum sunt cazate aceste familii astfel incat numarul de persoane cazate sa fie maxim?

Se dă o mulţime A (A = A = multimeamultimea tuturortuturor familiilorfamiliilor). Se cere o submulţime B A (B = B = submultimeasubmultimea familiilorfamiliilor cazatecazate) care:

să îndeplinească anumite condiţii interne (Accept.)Accept.) şi

să fie optimală (AlegAleg / Ordonez/ Ordonez).

Aleg : pentru fiecare camera aleg familia cea mai numeroasa, {1}{1} Ordonez: descrescător dupa numarul de membrii, {2}{2} Accept. : incape in camera (pi≤cij). {1{1 şi 2}2}

Page 7: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

77/17/17

MetodaMetoda GreedyGreedy

Program Program Gr_HotelGr_Hotel; ;

Type Type FamiliiFamilii = Array[1..100] Of Byte;= Array[1..100] Of Byte;

CamereCamere = Array[1..10,1..10] Of Byte;= Array[1..10,1..10] Of Byte;

Mult_fMult_f = Set Of Byte;= Set Of Byte;

VarVar A, { A, { FamiliiFamilii de de cazatcazat }}

B : B : Mult_fMult_f; { ; { FamiliiFamilii cazatecazate }}

C, { C, { CapacitatiCapacitati camerecamere }}

H : H : CamereCamere; { Nr. pers. ; { Nr. pers. cazatecazate }}

P : P : FamiliiFamilii; { Nr. pers./; { Nr. pers./familiifamilii }}

m,nm,n, { , { dimensiunidimensiuni hotel }hotel }

i,ji,j, { , { etajetaj, camera/et. }, camera/et. }

f, { nr. f, { nr. ordineordine pt.fampt.fam.}.}

q : Byte; { q : Byte; { numarulnumarul de de familiifamilii}}

Page 8: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

88/17/17

MetodaMetoda GreedyGreedy

Begin Begin ClrScrClrScr;;Date (Date (C,m,n,P,qC,m,n,P,q););Tip (C,m,n,P,q,[1..q]);Tip (C,m,n,P,q,[1..q]);A:=[1..q]; B:=[];A:=[1..q]; B:=[];For i:=1 To m DoFor i:=1 To m Do

For j:=1 To n Do BeginFor j:=1 To n Do Beginf:=f:=Aleg(AAleg(A); (* A:=A); (* A:=A--[f] {[f] {ExtragExtrag} *)} *)If If Accept(B,fAccept(B,f) Then B:=) Then B:=B+[fB+[f] End;] End;

Tip (Tip (H,m,n,P,q,BH,m,n,P,q,B); ); ReadlnReadlnEnd.End.3 4 { 3 4 { m,nm,n ... ... CijCij }}4 4 4 44 4 4 43 3 3 33 3 3 32 2 2 22 2 2 217 { q ... Pf }17 { q ... Pf }3 2 4 2 5 3 1 2 3 4 1 4 5 3 2 1 13 2 4 2 5 3 1 2 3 4 1 4 5 3 2 1 1

......13 { q ... Pf }13 { q ... Pf }3 2 4 2 5 3 1 2 3 4 1 4 53 2 4 2 5 3 1 2 3 4 1 4 5

Page 9: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

99/17/17

MetodaMetoda GreedyGreedy

Function Function Aleg(VarAleg(Var A:Mult_f):ByteA:Mult_f):Byte;;VarVar f,k:Bytef,k:Byte;;BeginBegin

f:=1; f:=1; While (f<=q) And While (f<=q) And

(Not (f In A) Or ((Not (f In A) Or (P[fP[f]>]>C[i,jC[i,j])) Do ])) Do Inc(fInc(f););If f>q Then If f>q Then AlegAleg:=0 Else Begin:=0 Else Begin

For k:=f+1 To q DoFor k:=f+1 To q DoIf (k In A) And If (k In A) And

((P[kP[k]<=]<=C[i,jC[i,j]) And ]) And ((P[kP[k]>]>P[fP[f]) Then f:=k;]) Then f:=k;

AlegAleg:=f; A:=A:=f; A:=A--[f][f]End; End;

End;End;

Function Function Accept(B:Mult_fAccept(B:Mult_f; ; f:Byte):Booleanf:Byte):Boolean;;Begin Begin

If f>0 Then If f>0 Then H[i,jH[i,j]:=]:=P[fP[f] ] Else Else H[i,jH[i,j]:=0;]:=0;

Accept:=f>0; Accept:=f>0; End;End;

Page 10: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

1010/17/17

MetodaMetoda GreedyGreedy

Procedure Date (Procedure Date (VarVar C:CamereC:Camere; ; VarVar m,n:Bytem,n:Byte;;VarVar P:FamiliiP:Familii; ; VarVar q :Byte);q :Byte);

VarVar t:Textt:Text; ; i,j,f:Bytei,j,f:Byte; ; Rand:StringRand:String;;BeginBegin

Assign(t,'Gr_Hotel.PasAssign(t,'Gr_Hotel.Pas'); '); Reset(tReset(t););Repeat Repeat Readln(t,RandReadln(t,Rand) Until Rand='End.';) Until Rand='End.';Readln(t,m,nReadln(t,m,n););For i:=1 To m DoFor i:=1 To m Do

For j:=1 To n Do For j:=1 To n Do Read(t,C[i,jRead(t,C[i,j]);]);Readln(t,qReadln(t,q););For f:=1 To q Do For f:=1 To q Do Read(t,P[fRead(t,P[f]);]);Close (t);Close (t);

End;End;Procedure Procedure Tip(C:CamereTip(C:Camere; ; m,n:Bytem,n:Byte; ; P:FamiliiP:Familii; ; q:Byteq:Byte; ; B:Mult_fB:Mult_f););VarVar i,j,f:Bytei,j,f:Byte; ; Tp:WordTp:Word;;Begin Begin TpTp:=0; :=0; WritelnWriteln;;

For i:=1 To m Do BeginFor i:=1 To m Do BeginFor j:=1 To n Do Write(C[i,j]:3); For j:=1 To n Do Write(C[i,j]:3); WritelnWriteln End; End; WritelnWriteln;;

For f:=1 To q DoFor f:=1 To q DoIf f In B Then Begin Write(P[f]:3);If f In B Then Begin Write(P[f]:3);

Inc(Tp,P[fInc(Tp,P[f])])End; End; WritelnWriteln;;

WritelnWriteln(' Total (' Total persoanepersoane : ',: ',TpTp); ); WritelnWriteln; ; WritelnWritelnEnd;End;

Page 11: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

1111/17/17

MetodaMetoda GreedyGreedy

Teme:

Baloanele sunt considerate cercuri în plan şise pot deplasa pe verticală în ambele sensuri.

a) Având n baloane care se deplasează pe verticală se cere să se aleagăun număr cât mai mare dintre acestea astfel încât să nu se lovească între ele.

Săgeţile sunt lansate vertical, ca în figuraalăturată, unde se poate vedea că numărul minim de săgeţi este 3.

b) Fiind date n baloane, se cere să se determine un număr minim de săgeţi necesare pentru a le sparge pe toate.

Page 12: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

1212/17/17

11.2.11.2. MetodaMetoda Divide et Divide et ImperaImperaMetoda Divide et Impera constă în descompunerea problemei (Split) în mai

multe subprobleme de acelaşi tip, rezolvarea acestora, apoi prin combinarea(Combin) rezultatelor obţinute se obţine soluţia problemei iniţiale. Dacă problemaeste banală (Elementară) se poate rezolva simplu (Direct) fără a mai fi necesarădescompunerea ei. Deci, dacă reuşim ca rezultatul unei probleme complexe să îldeducem din rezultatele unor subprobleme de acelaşi tip, atunci putem aplicaaceastă metodă.

Presupunem că dorim o prelucrare a unei mulţimi date A. Rezultatulprelucrării este furnizat de către funcţia D_I(A). Considerăm că soluţia se poateobţine combinând rezultatele a două subprobleme D_I(B) şi D_I(C), unde B şi C sunt obţinute prin divizarea mulţimii iniţiale A.

FuncFuncţţiaia D_ID_I (A) (A) esteeste::DacăDacă ElementarăElementară(A(A) ) AtunciAtunci D_ID_I :=:= DirectDirect (A)(A)

AltfelAltfel SplitSplit (A,B,C); (A,B,C); D_ID_I :=:= CombinCombin ((D_ID_I (B),(B), D_ID_I (C))(C))

Sf_DaSf_DacăcăSfSf D_ID_I..

Page 13: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

1313/17/17

MetodaMetoda Divide et Divide et ImperaImpera

Exemple:a) Problema turnurilor din Hanoi.

Având n discuri aşezate (descrescător după dimensiune) pe una din cele trei tije(numerotate cu 1,2,3), se cere să le mutăm pe altă tijă luând căte un singur disc (cel de deasupra) de pe o tijă şi mutându-l pe o alta respectând ordinea (nu se poate depune un disc mai greu peste unul mai uşor).Pentru a rezolva problema vom utiliza un subalgoritm care mută primele n-1 discuri de pe tija a pe tija b. Dacă mutăm primele n, înseamnă că le mutăm petoate şi problema este rezolvată.Primele n discuri se mută astfel: se mută primele n-1 discuri de pe tija a pe tijac=6-a-b, apoi se mută discul n (baza) pe tija destinaţie (b), iar în final se mutădin nou primele primele n-1 discuri de pe tija c=6-a-b pe tija b.

SubalgoritmulSubalgoritmul HanoiHanoi ((n,a,bn,a,b) ) esteeste::DacăDacă n>n>00 AtunciAtunci HanoiHanoi ((nn--11,a,6,a,6--aa--bb););

MutăMută ((a,ba,b););HanoiHanoi ((nn--11,6,6--aa--b,bb,b););

Sf_DaSf_DacăcăSfSf Hanoi.Hanoi. aa bb ccaa bb cc

Page 14: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

1414/17/17

MetodaMetoda Divide et Divide et ImperaImpera

b) Merge Sort (sortare prin interclasare) . Să se ordoneze un vector X cu n componente. Se va apela subalgoritmulMergeSort (X,1,n):

SubalgoritmulSubalgoritmul MergeSortMergeSort ((X,i,jX,i,j) ) esteeste:: { { OrdoneazăOrdonează subsubşşirulirul xxii,,……,,xxjj }}DacăDacă jj--ii>> AtunciAtunci mm:=(:=(i+ji+j)/2;)/2;

MergeSortMergeSort ((X,i,mX,i,m););MergeSortMergeSort ((X,m+1,jX,m+1,j););InterclasareInterclasare ((X,i,mX,i,m, X,m+1,j, , X,m+1,j, X,i,jX,i,j))

Sf_DaSf_DacăcăSfSf MergeSortMergeSort..

c) QuickSort (sortare rapidă). Să se ordoneze un vector X cu n componente. Se va apela subalgoritmulQuickSort (X,1,n) :

SubalgoritmulSubalgoritmul QuickSortQuickSort ((X,i,jX,i,j) ) esteeste:: { { OrdoneazăOrdonează subsubşşirulirul xxii,,……,,xxjj }} Dacă Dacă jj--i>i> Atunci Atunci mm:=:=SplitSplit ((X,i,jX,i,j););

QuickSortQuickSort ((X,i,mX,i,m););QuickSortQuickSort ((X,m+1,jX,m+1,j););

Sf_DaSf_DacăcăSfSf QuickSortQuickSort..

Page 15: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

1515/17/17

MetodaMetoda Divide et Divide et ImperaImperaTeme:

Problema se poate rezolva prin împărţire în şasesubprobleme de acelaşi tip.

a) Fiind dat un domeniu [x1,x2][y1,y2][z1,z2] şi o mulţime de puncteinterzise din R3, se cere să se determine subdomeniul de volum maxim care sănu conţină nici un punct interzis (în interior).

Prin manevra se întelege mutarea de pe o line pe alta, a primului vagon, aceasta fiind permisa doar daca pe linia destinatie vagoanele vor respecta ordinea precizati (vagonul 9 poate fi mutat pe orice linie, vagonul 8 doar pe linia b, iar vagonul 5 nu poate fi mutat).

b) Pe cele trei linii de manevra a, b si c se afla trei garnituri de vagoane etichetate cu distanta pâna la destinatie. Aceste vagoane sunt asezate în ordine crescatoare a distantei pe care o are de parcurs (ultimul vagon si poate fi dezlegat). Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine crescatoare a etichetelor, pe o singura linie (precizata) ?

a

b

c

20 70

90

60 89

33 55 Locom

Page 16: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

1616/17/17

MetodaMetoda GreedyGreedy

Program Program TrenTren; Uses ; Uses CrtCrt;;VarVar S:Array[1..3] Of String[9]; Const S:Array[1..3] Of String[9]; Const t:Wordt:Word=1234;=1234;Procedure Procedure TipVagTipVag; ; VarVar i:Bytei:Byte;;Begin Begin ClrScrClrScr; ; WritelnWriteln;;

For i:=1 To 3 Do Writeln(i:3,' : ',For i:=1 To 3 Do Writeln(i:3,' : ',S[iS[i]); ]); Delay(tDelay(t); If t>100 Then Dec(t,50);); If t>100 Then Dec(t,50);End;End;Procedure Procedure Mut(k:CharMut(k:Char; ; a,b:Bytea,b:Byte););Begin Dec(S[a][0]); Begin Dec(S[a][0]); S[bS[b]:=]:=S[b]+kS[b]+k; ; TipVagTipVagEnd;End;Function Function LiniaLinia ((k:Char):Bytek:Char):Byte; ; VarVar l:Bytel:Byte;;Begin For l:=1 To 3 Do If Begin For l:=1 To 3 Do If Pos(k,S[lPos(k,S[l])>0 Then ])>0 Then LiniaLinia:=l:=lEnd;End;Procedure Procedure Man(k:CharMan(k:Char; ; a:Bytea:Byte); ); VarVar b:Byteb:Byte;;Begin If k>'0' Then BeBegin If k>'0' Then Begingin

b:=b:=Linia(kLinia(k););If b<>a Then BeginIf b<>a Then Begin

Man(Pred(k),6Man(Pred(k),6--aa--b); b); Mut(k,b,aMut(k,b,a) End;) End;Man(Pred(k),aMan(Pred(k),a););

End; EnEnd; End;d;Begin Begin ClrScrClrScr;;

S[1]:='753';S[1]:='753';S[2]:='42';S[2]:='42';S[3]:='61'; S[3]:='61'; TipVagTipVag; Delay(1234);; Delay(1234);Man('7',2);Man('7',2);Write(' <<< Stop >>> '); Sound(300); Write(' <<< Stop >>> '); Sound(300); ReadlnReadln; ; NoSoundNoSound

End.End.

Page 17: 11. Metode de elaborare a algoritmilor - cs.ubbcluj.roper/Fp -_-/Fp_11.pdf · Care sunt manevrele pe care trebuie sa le execute locomotiva pentru a aranja toate vagoanele, în ordine

. . .. . . CC1111 / 14.12.2012/ 14.12.2012

SuccesSucces!!