22
11. 11. Metode Metode de de elaborare elaborare a a algoritmilor algoritmilor C_ C_ 12 12 / / 21 21 . . 12.2 12.2 0 0 12 12 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

11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

11.11. MetodeMetode de de elaborareelaborare a a algoritmiloralgoritmilor

C_C_1212 / / 2121..12.212.2001212

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 algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

11.311.3 MetodaMetoda BackTrackingBackTracking

Metoda backtracking (căutare cu revenire) se utilizează dacă soluţia problemei se poate reprezenta sub forma unui vector X=(x1,x2,…,xn) S=S1S2…Sn, unde S este spaspaţţiuliul tuturortuturor valorilorvalorilor posibileposibile, iar Si sunt mulţimifinitefinite (1in).

Mulţimea rezultatelor este R = XS X îndeplineşte condicondiţţiile interneiile interne. Deci, condicondiţţiile interneiile interne sunt relaţii între componentele x1,x2,…,xn ale unui vector X pe care acestea trebuie să le îndeplinească pentru ca vectorul X să fie soluţie. Într-o problemă se pot cere toate soluţiile sau o singură soluţie care optimizează o funcţie obiectiv dată.

Prin metoda backtrackingbacktracking nu se generează toate valorile posibile din spaţiul stărilor (S). Vectorul X se completează secvenţial, atribuind componentei xk o valoare numai după ce au fost atribuite deja valori componentelor x1,x2,…,xk-1. Nu se va trece la componenta xk+1, decât dacă sunt verificate condicondiţţiile de iile de continuarecontinuare pentru x1,x2,…,xk.

Page 3: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda BackTrackingBackTracking

Condiţiile de continuare sunt necesare pentru a ajunge la rezultat cu primele k alegeri făcute. Altfel spus, dacă condiţiile de continuare nu sunt îndeplinite, atunci indiferent cum am alege valori pentru următoarele componente xk+1,xk+2,…,xn, nu vom ajunge la rezultat, deci nu are sens să continuăm completarea vectorului X. Se poate observa că cu cât aceste condiţii de continuaresunt mai restrictive cu atât algoritmul va fi mai eficient, deci o bună alegere a condiţiilor de continuare va duce la reducerea numărului de căutări.

Condiţiile de continuare sunt o generalizare a condiţiilor interne pentru orice subşir x1,x2,…,xk (1 k n). Aceasta înseamnă că pentru k=n condiţiile de continuare coincid cu condiţiile interne (lucru care trebuie demonstrat teoretic). Dacă k=n şi sunt îndeplinite condiţiile de continuare se poate da ca rezultat vectorul X, pentru că au fost îndeplinite condiţiile interne (deci X este soluţie).

Dacă nu sunt îndeplinite condiţiile de continuare se alege altă valoare din mulţimea Sk, pentru componenta xk, iar dacă în mulţimea Sk nu mai sunt alte valori (pentru că mulţimile sunt finite), atunci se revine la componenta anterioară xk-1, încercând o nouă alegere (din mulţimea Sk-1 pentru componenta xk-1). Dacă s-a ajuns la x1 şi nu se mai poate executa o revenire (k=0), atunci algoritmul se termină.

Page 4: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda BackTrackingBackTracking

Dacă dorim să completăm vectorul X începând cu prima componentă, apelul subalgoritmului Bt(X,k,n) (care completează vectorul X din poziţia k până în poziţia n) este Bt(X,1,n).

Subalgoritmul backtracking este următorul:

Subalgoritmul Subalgoritmul Bt Bt (X,(X,k,nk,n) ) esteeste::

Pentru Pentru e e Sk Execută Sk ExecutăXXkk:=e;:=e;Dacă Dacă Cond_ContCond_Cont (X,(X,kk) )

AtunciAtunciDacă Dacă k=nk=n Atunci Atunci RezultateRezultate (X,(X,nn))

{{ k<nk<n } } AltfelAltfel Bt Bt (X,(X,kk+1+1,n,n))Sf_DaSf_Dacă că

Sf_DaSf_DacăcăSf_PentruSf_Pentru

Sf Sf BtBt..

Page 5: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda BackTrackingBackTracking

Exemple:

a) Problema Submulţimilor de sumă dată .

Fiind date numerele pozitive a1,a2,…,an se cere să se determine subşirul de sumă

dată T.

Fie xi {0, 1} astfel: 0 reprezintă faptul că ai nu intră în sumă, iar 1 în sens

contrar. Se observă că S={0,1}n este finită.

Condiţiile interne: x1*a1+x2*a2+…+xn*an = T .

Condiţiile de continuare: x1*a1+x2*a2+…+xk*ak T , şi

x1*a1+x2*a2+…+xk*ak + ak+1+ak+2+…+an T .

deci: T – (ak+1+ak+2+…+an) x1*a1+x2*a2+…+xk*ak T .

Se observă că pentru k=n Condiţiile de continuare devin Condiţii interne.

Page 6: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda BackTrackingBackTracking

Programul Pascal este următorul:Program Bt_Subm_Suma_Data;Program Bt_Subm_Suma_Data;Const n=10; Type Const n=10; Type RezRez=Array[1..n] Of Byte;=Array[1..n] Of Byte;Const A : Array[1..n] Of Word=(10,20,30,40,50,100,150,1000,50Const A : Array[1..n] Of Word=(10,20,30,40,50,100,150,1000,5000,10000);00,10000);

T : Integer=11150;T : Integer=11150;Function Function Cc(X:Rez;k:Byte):BooleanCc(X:Rez;k:Byte):Boolean;;

Function Function SumSum ((k:Byte):Wordk:Byte):Word;;Begin If k>n Then Sum :=0 Else Sum :=Sum(k+1)+a[kBegin If k>n Then Sum :=0 Else Sum :=Sum(k+1)+a[k] End;] End;Function Function SumaSuma ((k:Byte):Wordk:Byte):Word;;Begin If k=0 Then Suma:=0 Else Suma:=Suma(kBegin If k=0 Then Suma:=0 Else Suma:=Suma(k--1)+X[k]*1)+X[k]*a[ka[k] End;] End;

BeginBeginCc:=(TCc:=(T--Sum(k+1)<=Sum(k+1)<=Suma(kSuma(k)) And ()) And (Suma(kSuma(k)<=T))<=T)

End;End;Procedure Tip(X:Rez; n:Byte);Begin If n>0 Then Begin If X[n]=1 Then Write(a[n],'+'); Tip(X,n-1) End Else Writeln(#8+' = ',T)End;Procedure Bt(X:Rez; k,n:Byte); Var v:Byte;Procedure Bt(X:Rez; k,n:Byte); Var v:Byte;BeginBegin

For v:=0 To 1 Do Begin For v:=0 To 1 Do Begin X[kX[k]:=v;]:=v;If If Cc(X,kCc(X,k) Then If k=n Then ) Then If k=n Then Tip(X,kTip(X,k) Else Bt(X,k+1,n) End) Else Bt(X,k+1,n) End

End;End;VarVar X:RezX:Rez;;BeginBegin

WritelnWriteln('*Start*'); ('*Start*'); Bt(X,1,n);Bt(X,1,n); Write('*Stop*'); Write('*Stop*'); ReadlnReadlnEnd.End.

Page 7: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda BackTrackingBackTracking

b) Problema Repartizării Cetăţenilor într-o Sală

Aranjaţi într-o sală dreptunghiulară (mxn) k<=m*n cetăţeni din diverse ţări astfel încâttoţi vecinii ( |V|8 ) fiecăruia să provina din ţări prietene (sau concetăţeni)!

Se dau dimensiunile sălii (m,n), numărul de ţări (t), numărul de cetăţeni din fiecare ţară (f) precum şi relaţiile de prietenie dintre ţări (A).

Condiţiile interne: numărul de cetăţeni din sală pentru fiecare ţară este corect şi nici unuldintre aceştia nu se ceartă cu vecinii lui.

Condiţiile de continuare: numărul de cetăţeni din fiecare ţară precum şi numărul de locurilibere din sală este corect (fi) la fiecare aşezare şi nu se ceartă cu vecinii lui.

Programul Pascal este următorul:Program Program Bt_salaBt_sala;;Const Const L=10;L=10; Type Sir=array[0..L] Of Byte;Type Sir=array[0..L] Of Byte;

RezRez=array[0..L,0..L] Of Byte;=array[0..L,0..L] Of Byte;RelRel=array[0..L,0..L] Of Boolean;=array[0..L,0..L] Of Boolean;

Var Var M,n,t:byte; M,n,t:byte; F,s:sir; F,s:sir; A:rel; X:rez;A:rel; X:rez;

Page 8: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda BackTrackingBackTracking

Procedure date(var m,n,t:byte; var f:sir; var a:rel);Procedure date(var m,n,t:byte; var f:sir; var a:rel);Var i,j,r:byte; pas:text; rand:string;Var i,j,r:byte; pas:text; rand:string;BeginBegin assign(pas,assign(pas,'bt'bt--sala.Passala.Pas''); ); reset(pasreset(pas););

Repeat Repeat readln(pas,randreadln(pas,rand) until rand='end.';) until rand='end.';Readln(pas,m,nReadln(pas,m,n); ); readln(pas,treadln(pas,t););For i:=1 to t do begin For i:=1 to t do begin read(pas,f[iread(pas,f[i]); inc(f[0],f[i]) end; ]); inc(f[0],f[i]) end; readln(pas,randreadln(pas,rand););

F[0]:=m*nF[0]:=m*n--f[0];f[0];For i:=0 to t+1 do begin a[i,0]:=true; a[0,i]:=true For i:=0 to t+1 do begin a[i,0]:=true; a[0,i]:=true end;end;For i:=0 to t+1 do begin x[i,0]:=0; x[0,i]:=0; x[i,t+1]:=0For i:=0 to t+1 do begin x[i,0]:=0; x[0,i]:=0; x[i,t+1]:=0 end;end;For i:=1 to t doFor i:=1 to t do

For j:=1 to i do begin For j:=1 to i do begin read(pas,rread(pas,r); ); a[i,ja[i,j]:=r=1; ]:=r=1; a[j,ia[j,i]:=r=1 end;]:=r=1 end;Close(pasClose(pas))

End;End;

Procedure Procedure rezultaterezultate; ; varvar i,j:bytei,j:byte; rasp:string[3]; const ; rasp:string[3]; const sol:bytesol:byte=0;=0;Begin inc (sol); Begin inc (sol); writelnwriteln(' (' sol.:',Solsol.:',Sol););

For i:=1 to m do beginFor i:=1 to m do beginFor j:=1 to n do write(x[i,j]:3); For j:=1 to n do write(x[i,j]:3); writelnwriteln end;end;

Readln(raspReadln(rasp); if rasp<>'' then halt); if rasp<>'' then haltEnd;End;

Page 9: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda BackTrackingBackTracking

Function Function cccc(i,j:byte):boolean(i,j:byte):boolean; ; Var l,c,k:byte;Var l,c,k:byte;BeginBegin

For k:=0 to t do For k:=0 to t do s[ks[k]:=0;]:=0;For l:=1 to iFor l:=1 to i--1 do for c:=1 to n do 1 do for c:=1 to n do inc(s[x[l,cinc(s[x[l,c]]);]]);

For c:=1 to j do For c:=1 to j do inc(s[x[i,cinc(s[x[i,c]]);]]);K:=0;K:=0;While (k<=t) and (While (k<=t) and (s[ks[k]<=]<=f[kf[k]) do ]) do inc(kinc(k););Cc:=(k>t) and a[x[i,j],x[iCc:=(k>t) and a[x[i,j],x[i--1,j]] and a[x[i,j],x[i,j1,j]] and a[x[i,j],x[i,j--1]]1]]

And a[x[i,j],x[iAnd a[x[i,j],x[i--1,j1,j--1]] and a[x[i,j],x[i1]] and a[x[i,j],x[i--1,j+1]]1,j+1]]End;End;Procedure bt(i,j:byte);Procedure bt(i,j:byte); var v:byte;var v:byte;BeginBegin

For v:=0 to t do begin For v:=0 to t do begin x[i,jx[i,j]:=v;]:=v;If If cc(i,jcc(i,j) then if (i=m) and (j=n) then ) then if (i=m) and (j=n) then rezultaterezultate elseelse

If (j=n) then bt(i+1,1) elseIf (j=n) then bt(i+1,1) elseBt(i,j+1) endBt(i,j+1) end

End;End;BeginBegin

Date (Date (m,n,t,f,am,n,t,f,a);); writelnwriteln('*start*');('*start*');Bt (1,1);Bt (1,1); write ('*stop* '); write ('*stop* '); readlnreadln

End.End. Se observă că de fapt este o singură solu Se observă că de fapt este o singură soluţţie, restul fiind simetrice.ie, restul fiind simetrice.

3 4 m n4 t4 3 3 1 f11 10 1 10 0 1 1

Date

Rezultate

Sol.:44 3 2 13 0 2 13 2 1 1

Sol.:21 2 3 41 2 0 31 1 2 3

Sol.:33 2 1 13 0 2 14 3 2 1

Sol.:11 1 2 31 2 0 31 2 3 4

Page 10: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda BackTrackingBackTracking

Teme:

a)a) Cum se pot aranja Cum se pot aranja kk nebuninebuni pe tabla de pe tabla de şşah astfel ah astfel îîncât să nu se atace ncât să nu se atace reciproc ?reciproc ?

c)c) Cum Cum veveţţii coloracolora nn ţţăriări cu cu mm culoriculori pentrupentru a se a se puteaputea deosebideosebi ţţărileările vecinevecine ??

b)b) AranjaAranjaţţi corect i corect nn piese de domino! piese de domino!

Page 11: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

11.411.4 MetodaMetoda ProgramăriiProgramării_Dinamice_DinamiceAceastă metodă generală de elaborare a algoritmilor se aplică în

rezolvarea problemelor de optim pentru care soluţia este rezultatul unui şir de decizii d1,d2,...,dn. Pentru aplicarea acestei metode este necesar să fie îndeplinit principiul optimaliţii enunţat în cele ce urmează

Considerăm stările s0,s1,...,sn-1,sn, unde s0 este starea iniţială, iar sn este starea finală obţinută aplicând succesiv şirul de decizii d1,d2,...,dn (prin decizia di se trece din starea si-1 în starea si, pentru i=1,n, astfel :

dd11 dd22 ddnn--11 ddnnss00 ss11 ... ... ssnn--11 ssnn

Dacă di,di+1,...,dj (1i<jn) este un şir optim de decizii care transformăstarea si-1 în starea sj, trecând prin stările intermediare si,si+1,...,sj-1 şi dacă pentru k{i,i+1,...j-1} rezultă că di,di+1,...,dk şi dk+1,dk+2,...,dj sunt ambele şiruri optime de decizii de trecere din starea si-1 în starea sk respectiv din starea sk+1 în starea sj, atunci este satisfăcut principiulprincipiul optimalităoptimalităţţiiii.

Pentru a utiliza metoda programării dinamice, va trebui mai întâi săverificăm dacă este îndeplinit principiul optimalităţii apoi să scriem relaţiile de recurenţă după care o vom rezolva.

Page 12: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda ProgramăriiProgramării_Dinamice_Dinamice

Fiecare decizie depinde de deciziile deja luate şi nu este unic determinată(în metoda Greedy de exemplu, era unic determinată). Dacă în relaţiile de recurenţă o decizie di depinde de deciziile d1,d2,...,di-1 atunci metoda se aplică înainte, iar dacă di depinde de deciziile di+1,di+2,...,dn atunci metoda se aplică înapoi.

Pentru că în general dintr-o stare si se poate trece în mai multe stări prin decizii optime, atunci vom reţine toate stările ce pot conduce la optim. Prin metoda înainte se vor calcula secvenţial pe niveluri toate stările ce ne pot conduce la optim plecând de la primul nivel {s0} până la ultimul nivel {sn}. Dacă aplicăm metoda înapoi, se vor calcula succesiv stările de pe nivelurile {sn},…, {s0}.

Prin metoda programării dinamice se evită repetarea calculului pentru aceleaşi date dacă formula recursivă/recurentă solicită acest lucru (metoda tabelării de evitare a recursivităţii) prin memorarea rezultatelor intermediare obţinute la fiecare nivel.

Dacă se doreşte şi şirul deciziilor luate pentru a obţine optimul, vom memora pentru fiecare stare şi decizia prin care s-a ajuns la aceasta pentru a putea reconstitui drumul invers.

Page 13: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda ProgramăriiProgramării_Dinamice_Dinamice

Exemple:a) Produs optim de matrice.

Fiind date n matrice A1,A2,…,An de dimensiuni d1,d2,…,dn,dn+1 se cere să se calculeze produsul lor prin cât mai puţine operaţii de înmulţire.

Notăm cu ci,j (i<j) numărul minim de operaţii de înmulţire pentru AiAi+1…Aj;Se cunoaşte ci,i = 0 ;Se cere c1,n (desigur ne interesează şi asocierile necesare realizării minimului);Relaţiile de recurenţă: ci,j = min (ci,k+ck+1,j+di*dk+1*dj+1) //// (A(Aii…… AAkk))(A(Ak+1k+1……AAjj))

ik<j

Programul Pascal este următorul:Program produs_optim_de_matrici___programare_dinamica;Program produs_optim_de_matrici___programare_dinamica;VarVar d : array [1..10] of word;d : array [1..10] of word;

C : array [1..10,1..10] of word; C : array [1..10,1..10] of word; i,j,l,ni,j,l,n : word;: word;Function f (Function f (k:wordk:word) : word;) : word;BeginBegin

F:=c[i,k]+c[k+1,j]+d[i]*d[k+1]*d[j+1];F:=c[i,k]+c[k+1,j]+d[i]*d[k+1]*d[j+1];End;End;

Page 14: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda ProgramăriiProgramării_Dinamice_Dinamice

Function min (var km:word):word; var k:integer;Function min (var km:word):word; var k:integer;Begin km:=i;Begin km:=i;

For k:=km+1 to jFor k:=km+1 to j--1 do1 doIf If f(kf(k) < ) < f(kmf(km) then km:=k; min:=) then km:=k; min:=f(kmf(km))

End;End;Procedure Procedure asoc(i,jasoc(i,j : word ); : word ); varvar k:wordk:word;;BeginBegin

If i<j then begin k:=If i<j then begin k:=c[j,ic[j,i];];Asoc(i,k); asoc(k+1,j); write (i,',',j,'; ') endAsoc(i,k); asoc(k+1,j); write (i,',',j,'; ') end

End;End;BeginBegin

Write(' nr. De Write(' nr. De matricematrice : '); : '); readlnreadln (n);(n);Write(' Write(' dimensiuniledimensiunile : '); for i:=1 to n+1 do : '); for i:=1 to n+1 do read(d[iread(d[i]); ]); readlnreadln;;For i:=1 to n do c[i,i]:=0;For i:=1 to n do c[i,i]:=0;For l:=1 to nFor l:=1 to n--1 do1 do

For i:=1 to For i:=1 to nn--ll do begin j:=do begin j:=i+li+l;;C[i,j]:=min(c[j,i]);C[i,j]:=min(c[j,i]);

End;End;WritelnWriteln (' (' nr.Min.Inmnr.Min.Inm.= ',C[1,n]);.= ',C[1,n]);Write (' Write (' asocieriasocieri : '); asoc(1,n); : '); asoc(1,n); readlnreadln

End.End.

Page 15: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda ProgramăriiProgramării_Dinamice_Dinamice

b) Drum de lungime minimă. Fiind conoscute distanţele directe dij dintre n localităţi să se calculeze distanţeleminime dintre acestea Dij.

Notăm cu Dkij ( i,j{1,2,…,n} ) lungimea drumului minim de la i la j trecând

eventual prin localităţile intermediare (se permite tranzitul prin localităţile) 1,2,…,k ;

Se cunoaşte D0ij = dij ;

Se cere Dnij;

Relaţiile de recurenţă: Dkij = min {Dk

i-1j , Dki-1k + Dk

k-1j }. // // (Li(Li Lj) , ( LiLj) , ( Li LkLk Lj) Lj)

Programul Pascal este următorul:

Program drum_minim___programare_dinamica;Program drum_minim___programare_dinamica;

Type dist = array [1..10,1..10] of word;Type dist = array [1..10,1..10] of word;

Page 16: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

Procedure date(var n:byte; var d:dist);Procedure date(var n:byte; var d:dist);VarVar i,j:bytei,j:byte; ; pas:textpas:text; ; rand:stringrand:string; ; v:wordv:word; const ; const inf:wordinf:word=56789;=56789;BeginBegin

Assign(pas,'pd_drmin.PasAssign(pas,'pd_drmin.Pas'); '); reset(pasreset(pas););Repeat Repeat readln(pas,randreadln(pas,rand) until rand='end.';) until rand='end.';Readln(pas,nReadln(pas,n););For i:=1 to n doFor i:=1 to n do

For j:=1 to i do begin For j:=1 to i do begin read(pas,vread(pas,v););If (v=0) and (i>j) then v:=If (v=0) and (i>j) then v:=infinf;;D[i,j]:=v; d[j,i]:=v end;D[i,j]:=v; d[j,i]:=v end;

Close(pas)Close(pas)End;End;Var d : dist; n, i,j,k : byte;Var d : dist; n, i,j,k : byte;BeginBegin

Date (Date (n,dn,d););For k:=1 to n doFor k:=1 to n do

For i:=1 to n doFor i:=1 to n doFor j:=1 to n doFor j:=1 to n do

If If d[i,k]+d[k,jd[i,k]+d[k,j]<]<d[i,jd[i,j] then ] then d[i,jd[i,j]:=]:=d[i,k]+d[k,jd[i,k]+d[k,j];];WritelnWriteln(' (' distanteledistantele minimeminime suntsunt : '); : '); writelnwriteln;;For i:=1 to n do beginFor i:=1 to n do begin

For j:=1 to i do write(d[i,j]:3); For j:=1 to i do write(d[i,j]:3); writelnwritelnEnd; End; readlnreadln

End.End.D a t eD a t eD a t e

5 n01 02 5 03 1 4 00 3 3 1 0

Date

Distanteleminime sunt :01 02 3 02 1 4 03 2 3 1 0

Rezultate

MetodaMetoda ProgramăriiProgramării_Dinamice_Dinamice

Page 17: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

MetodaMetoda ProgramăriiProgramării_Dinamice_DinamiceTeme:

a) Care este ordinea optimă de grupare (de cost minim) a n piese de domino aşezate corect (Dri=Sti+1)? Prin gruparea a două piese vecine rezultă o singură piesă astfel: [a,b]&[b,c] [a,c] iar costul este (a,b,c). Evident sunt necesare n-1 grupări, iar costul final depinde de ordinea de grupare.

b) Care este traseul cel mai rapid de la o poartă la alta, ştiind că nu se poate pasadecât la linia următoare (de jucători) într-un timp cunoscut (dat) ?

Cum se va întinde acest cablu (de lungime minimă) plecând din camera stânga-sus până în camera dreapta-jos astfel încât numărul de clienţi care au cablu în cameră să fie maxim? Evident, se cunoaşte (se dă) numărul de clienţidin fiecare cameră.

c) Într-un hotel cu m etaje şi n camere pe fiecare etaj, se va trage (mergând orizontal sau vertical) un cablu prin camere succesive învecinate.

3 4 5 1 0 1 2 1 1 2 4 1 1 2 1 0 2 1 3 0 1 2 1 1 1 0 4 3 4 2 3 3 0 1 1 0 1 2 1 2

Page 18: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

TemeTeme::

1. Cum pot fi aranjate 52 de piese (26 albe şi 26 negre) pe punctele aflate pe celeopt cercuri din figura alăturată astfel încât penici un cerc mare să nu fie mai mult de opt piese de aceeaşi culoare şi pe nici un cercmic să nu fie mai mult de şapte piese de aceeaşi culoare?

2. Fiind precizate două perechi de puncte (P1,Q1) si (P2,Q2), din cele 52 aflatepe cele opt cercuri din figura alăturată, să se determine două trasee care pleacă de la P1 la Q1, respectiv de la P2 la Q2, mergând doarpe arce, astfel încât acestea să nu se intersecteze.

Page 19: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

TemeTeme::

Obs. : Obs. : MetodaMetoda de de rezolvarerezolvare esteeste la la alegerealegere ((Greedy, Greedy, Back_TrackingBack_Tracking, , ProgramareProgramareDinamicDinamicaa, etc, etc).).

3. O ploaie de meteoriţi de formă dreptunghiulară (cu laturile paralele cu axele, ca în figura 3.1) cad spre pământ (axa Ox). O parte dintre aceştia trebuie distruşi pentru a nu se suprapune în momentul atingerii solului. Care meteoriţi trebuiedistruşi astfel încât să ramâna pe sol (vezi figura 3.2) cât mai mulţi ?

Poziţia meteoriţilor este precizată prin coordonatele (pozitive) a douăpuncte diagonal opuse de forma (u1,v1); (u2,v2).

Figura 3.1 Figura 3.2

Page 20: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

Obs.: Metoda de rezolvare este la alegere.

Exemplu :

4. Două coloane de (m respectiv n ) maşini se întâlnesc pe un drum în lucru îngustat la o distanţă egală cu lungimea unei maşini. O maşină poate înainta doar dacă are un loc liber în faţa ei, sau poate depăşi la un moment dat o singură maşinădin coloana opusă dacă există loc liber în spatele maşinii din faţă. Cum cooperează şoferii pentru a-şi putea continua drumul fară a merge su spatele.

TemeTeme::

-1--11-2--22-4--44 -3--33 333222 444111000

-1--11 111-2--22-4--44 -3--33 333222 444000

Page 21: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

Obs. : Piesele nu pot fi scoase afară şi nici nu se pot suprapune, deci nu pot fi mutate decat în spaţiile libere ale interiorului camerei date.

Soluţia problemei va fi prezentată prin executarea fiecarei mutări.

Exemplu :

a) b) c) d)Figura 13

13. Fiind date zece piese aşezate ca în figura 13 a) se cere ca prin translaţiiorizontale sau verticale (aşa cum sunt prezentate în figura 13 b) si c) ) sa se obţinăo configuraţie de tipul celei din figura 13 d), adică cu pătratul mare langă uşă(pentru a putea fi scos afară).

TemeTeme::

Page 22: 11. Metode de elaborare a algoritmilorper/Fp -_-/Fp_12.pdf · 2014-11-27 · Metoda BackTracking Exemple: a) Problema Submulţimilor de sumă dată. Fiind date numerele pozitive a

. . .. . . C_C_1212 / / 2121..1212..22001212