Sei sulla pagina 1di 16

Informatic clasa a XI-a

Teorie

Cap.6 Metoda Greedy


6.1 Mecanism general
Este o metod general de elaborare a algoritmilor. n esen ea se aplic problemelor n care se d o mulime A coninnd n date de intrare cerndu-se s se determine o submulime B a sa care s ndeplineasc anumite condiii pentru a fi acceptat. Cum n general exist mai multe astfel de mulimi, se d i un criteriu conform cruia, dintre submulimile acceptabile (numite soluii posibile , se alege una singur (numit soluie optim ca re!ultat final. "oluiile posibile au urmtoarea proprietate# dac submulimea B A este o soluie posibil i C B, atunci i C este o soluie posibil. $om presupune c mulimea %id este ntotdeauna o soluie posibil. &etoda 'reed( tratea! acest tip de probleme n dou moduri care urmea! aceeai metod dar difer doar prin ordinea de efectuare a unor operaii# a) "e pleac de la soluia %id. "e alege pe rnd, ntr-un anumit fel, un element din A neales la paii precedeni. )ac adugarea lui la soluia parial anterior construit conduce la o soluie posibil, construim noua soluie prin adugarea elementului ales. "ec%ena de algoritm care descrie aceast %ariant este#

algoritm Greedy1(A,n,B) B pentru i 1.n executa Alege(A,i,x) Posibil(B,x,v) daca v 1 atunci Adauga(B,x) s!"daca s!"pentru s!"algoritm *uncia Alege furni!ea! n mod dinamic elementul x a# $ai,.......an%i efectuea! intersc+imbarea elementelor ai i a#. *uncia Posibil furni!ea! v 1 dac B $x% este o soluie posibil i v & n ca! contrar. *uncia Adauga nlocuiete pe B cu B $x%.

b) ,ucrurile decurg ca mai sus cu excepia faptului c se stabilete de la nceput (i nu n mod dinamic ordinea n care trebuie considerate elementele mulimii A. -lgoritmul corespun!tor este# algoritm Greedy'(A,n,B) B Prel)A) pentru i 1.n executa Posibil(B,ai,v) daca v 1 atunci Adauga(B,ai) s!"daca s!"pentru s!"algoritm *uncia Prel efectuea! o prelucrare a elementelor mulimii A conform unui anumit criteriu. &etoda 'reed( nu caut s determine toate soluiile posibile i s aleag pe cea optim conform criteriului de optimi!are dat, ci const n a alege pe rnd cte un element urmnd s-l introduc e%entual n soluia optim. de aici pro%ine numele 'reed( (lacom . /n exemplu tipic l constituie problemele de optimi!are. -stfel, dac trebuie determinat maximul unei funcii de cost depin!nd de parametrii a1,.....,an ideea general a metodei este de a alege la fiecare pas acel element care s fac s creasc ct mai mult %aloarea acestei funcii. Exemplu# "e d o mulime ( $x1,x',.....,xn% cu elemente reale. " se determine submulimea cu suma elementelor maxim. "e obser% uor c dac o submulime ) conine un element y&*&, atunci suma submulimii )+$y&% , dect suma elementelor din submulimea ). )eci soluia optim %a a%ea toate elemetele po!iti%e. *uncia Alege furni!ea! x ai, funcia Posibil returnea! v 1 dac ai-& i v & n ca! contrar. -lgoritmul este#

Informatic clasa a XI-a

Teorie

algoritm ./B0((,),n,1) !loat (2n3,)2n3 1 & pentru i 1,n executa daca xi-& atunci 1 1415 y1 xi s!"daca s!"pentru 0bser%aie# &etoda 'reed( nu furni!ea! soluia optim pentru orice problem. n acest ca! trebuie s cunoatem mcar n ce msur suntem apropiai de soluia optim.

6. Exemple demonstrati!e
1. "ro#lema continu a rucsacului
Enun$# 0 persoan are un rucsac cu care poate transporta o greutate maxim G. 1ersoana are la dispo!iie n obiecte i cunoate pentru fiecare obiect greutatea i ctigul care se obine n urma transportrii lui la destinaie. 0biectele pot fi tiate n buci. " se preci!e!e ce obiecte i n ce proporie trebuie transportate astfel nct ctigul total obinut s fie maxim. %e&ol!are# -lgoritmul ba!at pe metoda 'reed( este urmtorul# se calculea! pentru fiecare obiect n parte eficiena de transport (ctigul obinut prin transportul unei uniti de greutate din obiectul respecti% . obiectele se sortea! n ordinea descresctoare a eficienei de transport i se preiau n calcul n aceast ordine ctigul iniial %a fi 2, iar greutatea rmas de ncrcat %a fi greutatea ' a rucsacului att timp ct nu a fost completat greutatea maxim a rucsacului i nu au fost luate n considerare toate obiectele se procedea! astfel# dintre obiectele nencrcate se selectea! acele cu cea mai mare eficien de transport i a%em dou posibiliti# a acesta ncape n totalitate n rucsac, deci se scade din greutatea de ncrcat greutatea obiectului, la ctig se accumulea!ctigul obinut prin transportarea acelui obiect i se tiprete 3, n sensul c ntregul obiect a fost ncrcat b obiectul nu ncape n totalitate n rucsac, ca! n care se calculea! ce parte din el se poate transporta, se accumulea! ctigul obinut, se tiprete procentul care s-a ncrcat din obiect, greutatea rmas de ncrcat de%ine 2 i algoritmul se nc+eie Exemplu# greutatea rucsacului este '45 i a%em la dispo!iie 5 obiecte# C67tig Greutate ;!icien<=(c67tig>greutate) ' ' 1 8 1 8 9 : '

"e sortea! obiectele descresctor dup eficien i se obine ordinea ' ' 1. 0biectul 6 se ncarc n ntregime# G :+1 ', castig &48 8 )in obiectul 5 se ncarc 675# G '+('>:)?: & (i algoritmul se %a nc+eia , castig 84('>:)?9 @ Ctigul total este @. 0bser%m c metoda 'reed( se remarc n alegerea obiectului care %a fi transportat (n ordinea descresctoare a eficienei de transport , alegere asupra creia nu se re%ine.

. 'r#orele par$ial de cost minim


(efini$ie# "e numete ar#ore un graf neorientat, conex i fr cicluri. n figura alturat este desenat un arbore. "e obser% c oricum am elimina o muc+ie, graful i pierde proprietatea de conexitate, i oriunde am aduga o muc+ie, apare un ciclu. -cest lucru este %alabil n orice arbore.

Informatic clasa a XI-a

Teorie

Teorem# *ie un graf neorientat G ((,/). /rmtoarele afirmaii sunt ec+i%alente# 1) G este un arbore 2) G este un graf conex, minimal cu aceast proprietate (eliminnd o muc+ie oarecare se obine un graf neconex 3) G este un graf fr cicluri, maximal cu aceast proprietate (dac se adaug o muc+ie se obine un graf care are mcar un ciclu (efini$ie# *ie graful G ((,/) cu n ' noduri, m muc+ii i p componente conexe. 8umrul (G) m+n4p se numete num=rul ciclomatic al grafului G. )#ser!a$ii# - se poate arta c (G* furni!ea! numrul de cicluri elementare din graf - numrul (G) repre!int numrul de muc+ii ce trebuie nlturate din graf astfel nct acesta s nu conin cicluri (efini$ie# *ie G un graf neorientat. /n graf parial A al lui G, cu proprietatea c A este arbore, se numete arbore par<ial al lui G. Corolar# /n graf neorientat G conine un arbore parial dac i numai dac G este conex. "ropo&i$ii# 1) /n arbore cu n ' %rfuri conine cel puin dou %rfuri terminale. 2) 0rice arbore cu n %rfuri are n+1 muc+ii. 3) /n graf G cu n %rfuri i m muc+ii este arbore dac este aciclic i m n+1. 4) /n graf G cu n %rfuri i m muc+ii este arbore dac este conex i m n+1. 5) /n graf cu n %rfuri i cel puin n muc+ii conine cel puin un ciclu. 6) 8umerele d1 d' d: ....... dn 1 sunt gradele nodurilor unui arbore cu n ' noduri dac i numai dac d14d'4....4dn '(n+1). (efini$ie# /n graf neorientat care nu conine cicluri se numete pdure. n practic se ntlnesc foarte des probleme de tipul urmtor# se dorete conectarea unor consumatori la o surs de energie electric astfel nct costul branrii s fie minim. 9ranspunnd problema n termenii teoriei grafurilor, se cere de fapt determinarea unui arbore parial de cost minim, adic un arbore care are proprietatea c suma costurilor muc+iilor sale s fie minim. (efini$ie# "uma costurilor muc+iilor unui graf se numete costul grafului. )ac se definete funcia cB/ C4 care asocia! fiecrei muc+ii un numr real numit cost, costul grafului este

c(G ) = c (u )
u U

*uncia c se numete func$ia cost. *ie G ((,/) un graf conex, repre!entat prin matricea costurilor. "e tie c prin eliminarea uneia sau a mai multor muc+ii se obine un graf parial. )ac graful parial al unui graf G conex este arbore, acesta se numete arbore par<ial al lui G. )ac dintr-un graf conex G ((,/) se elimin muc+ii astfel nct s se obin un arbore parial al crui cost s fie minim, acesta se numete arbore par<ial de cost minim(AP0). "roprietate+ 1entru graful G conex, cu funcia de cost c, exist un graf parial A conex i de cost minim, care este i arbore. 1entru determinarea AP0 sunt cunoscui mai muli algoritmi, cei mai utili!ai fiind algoritmul lui Drus1al (3:;< i algoritmul lui Prim, ambii ba!ai pe o strategie 'reed(.

Informatic clasa a XI-a

Teorie 'lgoritmul lui -rus.al

"e pleac iniial de la n arbori dis=unci, fiecare fiind format dintr-un nod al grafului : A1, A',EE.,An. ,a fiecare pas %om ncerca s unificm doi dintre arborii existeni, alegerea celor doi arbori ce %or fi unificai fcndu-se astfel# dintre toate muc+iile nealese nc, se selectea! muc+ia de cost minim care are o extremitate ntr-un arbore i cealalt extremitate n alt arbore. 1rin adugarea acestei muc+ii la arborele care se construiete, se %or unifica cei doi arbori dis=unci ntr-unul singur. )up n+1 pai se obine AP0 care conine n+ 1 muc+ii. -lgoritmul pseudocod corespun!ator este# algoritm Drus1al(G,/) A pentru fiecare varf v X(G) executa FormeaGa"0ultime(v) s!arsit pentru sorteaza muchiile din u in ordinea crescatoare a costului c pentru fiecare muchie (u,v)U(G),in ordinea crescatoare a costului executa daca Gaseste_Multime(u) Gaseste_Multime(v) atunci AA {(u,v)} /neste(u,v) s!arsit daca s!arsit pentru returneaGa A -lgoritmul folosete o structur de date pentru mulimi dis=uncte pentru repre!entarea mai multor mulimi de elemente dis=uncte. *iecare mulime conine %rfurile unui arbore din pdurea curent. *uncia Gaseste"0ultime(u) returnea! un element repre!entati% din mulimea care l conine pe u. -stfel, putem determina dac dou %rfuri u i v aparin aceluiai arbore testnd dac Gaseste"0ultime(u) este egal cu Gaseste"0ultime(v). Combinarea arborilor este reali!at de funcia /neste(u,v). 1entru a implementa algoritmul lui >rus?al %om repre!enta graful prin %ectorul muc+iilor, fiecare muc+ie a%nd ataat i costul. 1entru a specifica la fiecare pas din ce arbore face parte un nod i, %om folosi %ectorul H. @niial, pornim cu n arbori dis=unci, deci H2i3 i , pentru i $1,',E.n%. 1entru a eficienti!a alegerea muc+iilor, %ectorul muc+iilor u se %a ordona cresctor dup costul muc+iilor. 1entru a alege cele n+1 muc+ii ale APM se parcurg elementele %ectorului u astfel# *ie v 2u2i3.x,u2i3.y3 muc+ia ce urmea! a fi anali!at (plecm cu i 1 . )ac n %ectorul H extremitile muc+iilor au %alori egale, adic H2u2i3.x3 H2u2i3.y3, atunci cele dou extremiti aparin aceluiai subarbore, deci alegerea acestei muc+ii ar duce la formarea unui ciclu. n ca! contrar, nseamn c extremitile muc+iei fac parte din subarbori diferii, fie aceatia Ax i Ay, care pot fi unificai, operaie care presupune c pentru toate %rfurile celor doi arbori trebuie s apar n %ectorul H aceeai %aloare (pro%enit din primul sau din al doilea arbore . -cest pas se repet pn am reuit s alegem cele n+1 muc+ii ale AP0. Exemplu# *ie graful din figura urmtoare#

Informatic clasa a XI-a

Teorie

1asii algoritmului sunt# Configuratia initiala+ )up ordonarea cresctoare a muc+iilor dup costul c ataat, a%em# u (2I,83,2:,83,2:,I3,21,'3, 2',I3,2',:3,29,I3,2',93,2',J3, 21,J3,2J,93) c (1,1,',',',:,:,:,:,8,I) H (1,',:,8,I,9,J) , fiecare nod fcnd parte dintr-un arbore.

"asul 1+ "e alege muc+ia de cost minim 2I,83 i H de%ine# (1,',:,I,I,9,J) deoarece am unificat arborii A8 i AI i am obinut subarborele AI (8,I). Ceilali subarbori rmn nemodificai.

"asul

+ "e alege muc+ia 2:,83 de cost minim, unificm A: i AI i obinem H (1,',:,:,:,9,J) i A: (:,8,I).

Informatic clasa a XI-a

Teorie

"asul ,+ "e %erific muc+ia 2:,I3 care nu poate fi aleas deoarece H2:3 H2I3 (%rfurile 5 i ; aparin de=a aceluiai subarbore A: i alegerea ei ar pro%oca apariia unui ciclu. "e alege muc+ia 21,'3, se unific A1 i A' i obinem# H (1,1,:,:,:,9,J) i A1 (1,').

"asul /+ "e alege muc+ia 2',I31 se unific A1 i A: i obinem# H (1,1,1,1,1,9,J) i A1 (1,',:,8,I).

"asul 0+ &uc+ia 2',:3 nu poate fi aleas pentru c ar crea un ciclu. "e alege muc+ia 29,I3 i se obine subarborele A1 (1,',:,8,I,9).

Informatic clasa a XI-a

Teorie

"asul 6+ "e alege muc+ia (',',',',',','), ceea arbore parial de cost minim 2:,83, 2I,83, 29,I3, fiind 36. 2',J3 si H de%ine ce corespunde unui A (21,'3, 2',I3, 2',J3), costul total

8u are importan care subarbore se alege pentru a transfera %rfurile celuilalt subarbore. )#ser!a$ie# )ac exist mai multe muc+ii cu acelai cost, pentru un graf conex G pot exista mai multe posibiliti de alegere a unei muc+ii de cost minim, deci pot exista mai muli '"M. -ceti arbori se %or deosebi prin muc+iile ce %or fi luate n consideraie, i nu prin costul asociat, deoarece aceast cost %a fi acelai pentru toi arborii, i anume ei %or a%ea cost minim. @mplementarea algoritmului lui >rus?al este# KincludeLstdio.MKde!ine N :& Kde!ine 0 9& typede! struct $ int x,y5 !loat cost5 %0/CAO;5 void citire"mucMii(0/CAO; u203,int Pn,int Pm) $ int 15 FOH; ?! !open(Qgra!.inR,RrR)5 !scan!(!STd TdS,Pn,Pm)5 !or(1 151L m5144) !scan!(!,STd Td T!S,Pu213.x,Pu213.y,Pu213.cost)5 !close(!)5 % void sortare(0/CAO; u203,int m) $ 0/CAO; aux5 int i,#5

Informatic clasa a XI-a

Teorie

% void creare"apm(0/CAO; u203,int n,int m) $ int H2N3,1,i,v,U,#5 !loat ct &5 //cost total apm !or(i 15iL n5i44) H2i3 i5 //n subarbori disjuncti i 15 1 &5 print!(SVnVnAP0B S)5 UMile(1Ln+1) $ i!(H2u2i3.x3W H2u2i3.y3) //extremitatile muchiei sunt in subarbori diferiti $ 1445 ct4 u2i3.cost5 //adaugam costul muchiei i print!(S2Td,Td3 S,u2i3.x,u2i3.y)5 v H2u2i3.y35 U H2u2i3.x35 !or(# 15#L n5#44) i!(H2#3 v) H2#3 U5 //reunim cei doi arbori % i445 //trecem la urmatoarea muchie % print!(SVnVncostul total este T.'!VnS,ct)5 % void main() $ 0/CAO; u2035 int n,m5 citire"mucMii(u,n,m)5 sortare(u,m)5 creare"apm(u,n,m)5 %

!or(i 15iL m+15i44) !or(# i415#L m5#44) i!(u2i3.cost-u2#3.cost) $ aux u2i35 u2i3 u2#35 u2#3 aux5 %

'lgoritmul lui "rim


'raful conex este dat prin matricea costurilor, forma 3. ,a fiecare pas 1-& obinem un arbore A1 cu 141 %rfuri i n+(141) arbori cu cte un singur %rf. ,a fiecare pas se alege muc+ia de cost minim care are o extremitate n arborele A1 de=a creat i cealalt extremitate liber. ,ucrm cu %ectorul X n care %om a%ea, pentru fiecare %rf neales nc, %rful din A1 de care acesta se leag printr-o muc+ie de cost minim (legtur de tip tat . n componenta corespun!toare din %ectorul Y %om a%ea costul muc+iei adugate. Cum la nceput a%em n A1 doar %rful 3, n toate componentele lui X a%em 3, cu excepia lui X213, iar n Y, %alorile corespun!toare din linia 3 a matricei costurilor c. ,a pasul 1, dup alegerea unui nou %rf U care se adaug la A1, se %or actuali!a componentele din X i Y pentru %rfurile nealese nc deoarece adugarea %rfului U poate modifica aceste %alori. -lgoritmul are ordinul de complexitate (n'). -lgoritmul pseudocod corespun!tor este# algoritm Prim(G,c,rad) QX(G) pentru fiecare uQ executa D[u] s!arsit pentru D[rad]0 [rad]0 cat timp Q0 executa u;xtrage"0inim(Y) pentru fiecare vcinilor lui u executa daca vQ i c(u,v)<D v! atunci

Informatic clasa a XI-a

Teorie

[!]u D[!]c"u,!# s!arsit daca s!arsit pentru s!arsit cat timp "e iniiali!ea! %ectorul Y astfel nct acesta s conin toate %rfurile grafului i se iniiali!ea! cmpul Z al fiecrui %rf cu 41 excepie fcnd rdcina rad, al crei cmp Z este iniiali!at cu 2. 9atl rdcinii se iniiali!ea! cu 2, deoarece rad nu are nici un printe. 1e parcursul algoritmului, mulimea (+Y conine %rfurile arborelui curent. "e identific un %rf u Y incident unei muc+ii de cost minim care tra%ersea! tietura ((+ Y,() (cu excepia primei iteraii n care u rad deoarece are c+eia Z2rad3 & . Eliminarea lui u din mulimea Y l adaug pe acesta mulimii /+Y a %rfurilor din arbore. n liniile urmtoare se actuali!ea! cmpurile Z i X ale fiecrui %rf v adiacent lui u, dar care nu se afl n arbore. -ctuali!area respect condiiile Z2v3 c(v,X2v3) i (v,X2v3) s fie o muc+ie de cost minim care l unete pe v cu un %rf din arbore. *ie graful urmtoare# din figura

Configura$ia ini$ial+

"asul 1+

"asul +

Informatic clasa a XI-a

Teorie

16

"asul ,+

"asul /+

"asul 0+

Informatic clasa a XI-a

Teorie

11

"asul 6+

@mplementarea algoritmului lui 1rim este# KincludeLstdio.MKde!ine N :& Kde!ine 0 9& Kde!ine ONF 1LL18 void citire"gra!(int c2N32N3,int Pn) $ int m,i,#,x,y,G5 FOH; ?! !open(Qgra!.inR,RrR)5 !scan!(!,STd TdS,Pn,Pm)5 !or(i 15iL n5i44) !or(# 15#L n5#44) c2i32#3 ONF5 !or(i 15iL n5i44) c2i32i3 &5 !or(i 15iL m5i44) $ !scan!(!,STd Td TdS,Px,Py,PG)5 c2x32y3 c2y32x3 G5 % !close(!)5 % void creare"apm(int c2N32N3,int n) $ int [2N3,X2N3,Y2N3,i,#,min,U,ct &5 //costul total al arborelui

Informatic clasa a XI-a

Teorie

% void main() $ int c2N32N3,n5 citire"gra!(c,n)5 creare"apm(c,n)5 %

!or(i 15iL n5i44) [2i3 i5 //!arfurile neincluse in arbore [213 &5 !or(# '5#L n5#44) $ X2#3 15 Y2#3 c2132#35 % print!(SVnVnAP0B S)5 UMile(1) $ min ONF5 //determinam muchia de cost minim !or(i '5iL n5i44) i!([2i3 PP Y2i3Lmin) $ min Y2i35 U i5 % i!(min ONF) brea15 [2U3 &5 //!arful $ a fost inclus in arbore print!(S2Td,Td3 S,X2U3,U)5 //muchia adaugata ct4 c2X2U332U35 //actuali%am costul arborelui !or(# '5#L n5#44) i!([2#3 PP Y2#3-c2U32#3) $ X2#3 U5 Y2#3 c2U32#35 % % print!(SVncostul total este TdVnS,ct)5

,. (rumuri minime 7n grafuri orientate. 'lgoritmul lui (i8.stra

*ie G ((,/) i lB/ C4. "e pune problema determinrii unor drumuri de lungime minim n acest graf. Ae!ol%area ei are multiple aplicaii practice. Considernd drept noduri diferite puncte dintr-un ora, dac ponderea l(u), unde u (xi,x#), repre!int durata de trecere de la xi la x#, problema re%ine la determinarea drumurilor de durat minim. dac l(u) repre!int costul transportului de la xi la x#, problema re%ine la determinarea drumurilor a%nd costul de transport minim etc. 1entru tratarea problemelor de minim %om asocia grafului G matricea costurilor n forma a , adic C (ci#)nxn definit astfel# l(xi,x#) dac= (xi,x#) / ci# & 4 dac= dac= i # (xi,x#) / "ro#lem+ Fiind dat un graf orientat G=(X,U), o funcie l:U R+ i un nod x0, s se determine pentru toate vrfurile xi pentru care exist drum de la x0 la xi, lungimea celui mai scurt drum i unul dintre drumurile minime de la x0 la xi. -lgoritmul utili!rea! metoda 'reed( genernd drumurile minime n ordinea cresctoare a lungimilor.
4

2 1 1 3 1

7 2 5

3 1

Exemplu# 1entru graful din figura alturat, considernd nodul de plecare 3, se %or obine n ordine# )34(3,6 de lungime 3

1 6

Informatic clasa a XI-a

Teorie

1,

)64(3,6,; de lungime 6 )54(3,6,;,5 de lungime B )B4(3,6,;,5,B de lungime ; )e la 3 la < nu exist drum.

"e pornete din x&. E%ident cel mai scurt drum de la x& la unul din celelalte %rfuri ale grafului este dat de arcul (x&,x#) de lungime minim. /rmtorul drum n ordinea lungimilor %a fi dat fie de un alt arc cu extremitatea iniial x&, fie de un drum (x&,x#,xp). -legem n continuare drumuri n ordinea cresctoare a lungimilor, pn cnd am determinat drumuri minime de la x& ctre toate %rfurile pentru care exist drum pornind din x&. 1entru aceasta se consider . mulimea %rfurilor x# ( pentru care am gsit drum minim de la x& la x#. @niial . $x&%. ,a fiecare pas, adgm n . acel nod x1 (+. cu proprietatea c drumul minim de la x& la x1 are cel mai mic cost dintre toate drumurile de la x& la xp, cu xp (+.. 1entru exemplul considerat . %a a%ea pe rnd urmtorul coninut# . $1% . $1,'% . $1,',I% . $1,',I,:% . $1,',I,:,8% "e obser% c drumul de la x& la x1 (nodul ce urmea! s-l adugm n . la un moment dat trece numai prin %rfuri din . (cu excepia lui x1 . 1entru a alege nodul x1 (+. ce urmea! a fi adgat n . %om folosi un %ector Z (d1,d',...,dn) astfel nct# di lungimea drumului minim de la x& la xi, dac= xi . lungimea drumului minim de la x& la xi ce !olose7te numai v6r!uri din ., dac= xi . @niial di C(x&,i), ( )i 1..n, adic este linia x& din matricea costurilor. ,a un moment dat, adgm n . nodul x1 cu proprietatea c d1 min$d# \ x# (+.%. )up adgarea lui x1 n . trebuie actuali!ate %alorile lui d pentru elementele care nu sunt n ., deoarece este posibil ca drumul minim de la x& la unul dintre aceste noduri (folosind noduri din . s foloseasc nodul x1 pe care tocmai l-am adgat. )rumul minim de la x& la x# ce folosete noduri din . (inclusi% x1 %a fi de forma (x&,E,x1,x#). )eci pentru x# (+., d# se modific dup adugarea lui x1 la . numai dac d14C(1,#)Ld#, ca! n care d# d14C(1,#). n final, %ectorul d %a conine costurile (lungimile drumurilor minime de la x& la celelalte noduri. dac pentru un nod x# nu exist drum de la x& la x#, atunci d# . 1entru a reine i drumurile minime (nu numai lungimile lor %om considera un %ector num it X (tat care reine indicele precedentului fiecrui nod n drumul minim de la x& la acel nod. @niial# & dac= i x& sau C(x&,i) Xi x& dac= C(x&,i) 7i i x& ,a fiecare actuali!are de forma d# d14C(1,#) %om a%ea i o actuali!are a %ectorului X de forma X# 1. -lgoritmul se nc+eie cnd . conine toate nodurile x# pentru care exist drum de la x& la x#, deci fie cnd . ( (dac exist drumuri de la x& la toate celelalte noduri , fie cnd mulimea (+. cuprinde numai noduri pentru care nu exist drumuri pornind din x& la ele (ca! n care min$d# \ x# (+.% #. 1entru repre!entarea mulimii . se poate folosi %ectorul caracteristic . cu n componente definit astfel# & .i 1 dac= xi . dac= xi .

Exemplu# Considerm graful anterior i punctul x0=1. Cei trei %ectori au %alorile iniiale# Z (&, 1, , , :, ) X (&, 1, &, &, 1, &) . (1, &, &, &, &, &) 3 determinm min(Z2i3 \ .2i3 &) - min 1,1 ' - .2'3 1

Informatic clasa a XI-a

Teorie

1/

-ctuali!m distanele la nodurile neselectate nc. .2:3 &5 Z2:3 - Z2'34C2',:3 14J @ - Z2:3 @, X2:3 ' .283 &5 Z283 Z2'34C2',83 14 , nu se poate actuali!a .2I3 &5 Z2I3 : - Z2'34C2',I3 141 ' - Z2I3 ', X2I3 ' .293 5 Z293 Z2'34C2',93 14 , nu se poate actuali!a )up primul pas configuraia celor trei %ectori este# Z (&, 1, @, , ', ) X (&, 1, ', &, ', &) . (1, 1, &, &, &, &) 6 determinm min(Z2i3 \ .2i3 &) - min ', 1 I - .2I3 1 -ctuali!m distanele la nodurile neselectate nc. .2:3 &5 Z2:3 @ - Z2I34C2I,:3 '4' 8 - Z2:3 8, X2:3 I .283 &5 Z283 Z2I34C2I,83 '4 , nu se poate actuali!a .293 &5 Z293 Z2I34C2I,93 '4 , nu se poate actuali!a )up al doilea pas configuraia celor trei %ectori este# Z (&, 1, 8, , ', ) X (&, 1, I, &, ', &) . (1, 1, &, &, 1, &) determinm min(Z2i3 \ .2i3 &) - min 8, 1 : - .2:3 1 -ctuali!m distanele la nodurile neselectate nc. .283 &5 Z283 - Z2:34C2:,83 841 I - Z283 I, X283 : .293 &5 Z293 Z2:34C2:,93 84 , nu se poate actuali!a )up al treilea pas configuraia celor trei %ectori este# Z (&, 1, 8, I, ', ) X (&, 1, I, :, ', &) . (1, 1, 1, &, 1, &) determinm min(Z2i3 \ .2i3 &) - min I, 1 8 - .283 1 -ctuali!m distanele la nodurile neselectate nc. .293 &5 Z293 Z2834C28,93 I4 , nu se poate actuali!a )up al patrulea pas configuraia celor trei %ectori este# Z (&, 1, 8, I, ', ) X (&, 1, I, :, ', &) . (1, 1, 1, 1, 1, &) determinm min(Z2i3 \ .2i3 &) drum de la nodul 3 la nodul < - min i algoritmul se nc+eie pentru c nu exist nici-un

1rogramul care implementea! algoritmul lui )i=?stra este urmtorul# KincludeLstdio.MKde!ine N '& Kde!ine ONF 1LL18 void citire(int c2N32N3,int Pn,int Pxp) $ int i,#,x,y,G5 FOH; ?! !open(Qgra!.txtR,Rr)5 !scan!(!,STd TdS,Pn,Pxp)5 //numarul de noduri si nodul de plecare !or(i 15iL n5i44) !or(# 15#L n5#44) c2i32#3 ONF5 !or(i 15iL n5i44) c2i32i3 &5 UMile(W!eo!(!)) $ !scan!(STd Td TdS,Px,Py,PG)5 //arcul si costul sau c2x32y3 G5 % !close(!)5 % void minim(int .2N3,int Z2N3,int n,int P]) $

Informatic clasa a XI-a

Teorie

10

int i5 long m5 m '?ONF5 !or(i 15iL n5i44) i!(W.2i3PPZ2i3Lm) $ m Z2i35 ] i5 % % void determinare"drumuri(int c2N32N3,int Z2N3,int X2N3,int n) $ int .2N3,i,x,#,1,o15 //initiali%ari !or(i 15iL n5i44) $ Z2i3 c2xp32i35 .2i3 &5 i!(c2xp32i3LONF) X2i3 xp5 else X2i3 &5 % .2xp3 15 X2xp3 &5 o1 15 x &5 do$ minim(.,X,n,1)5 //determina nodul & aflat la distanta minima x445 i!(Z213 ONF\\x n) o1 &5 //nu mai pot fi construite drumuri minime else $ //actuali%am !ectorii ', si D .213 15 !or(# 15#L n5#44) i!(W.2#3PPZ2#3-Z2134c2132#3) $ Z2#3 Z2134c2132#35 X2#3 15 % % %UMile(o1)5 % void drum(int Z2N3,int X2N3,int i) $ i!(i) $ drum(Z,X,X2i3)5 print!(STd S,i)5 % % void a!isare"drumuri(int Z2N3,int X2N3,int n) $ int i5 !or(i 15iL n5i44) i!(iW xp) i!(Z2i3 ONF) print!(SVnNu exista drum de la Td la TdVnS,xp,i)5 else $ print!(SVnZrumul minim de la Td la TdB S,xp,i)5 drum(Z,X,i)5 print!(SVnS)5 print!(SVtHungimea drumului este TdVnS,Z2i3)5 % % void main() $ int c2N32N3,Z2N3,X2N3,n,xp5 citire(c,n,xp)5 determinare"drumuri(c,Z,X,n)5 a!isare"drumuri(Z,X,n)5 %

Informatic clasa a XI-a

Teorie

16

)atorit selectrii minimelor, complexitatea algoritmului este ^(n').

/. Ciclul 9amiltonian de cost minim :pro#lema comis-!oia8orului*

*ie G ((,/) un graf neorientat complet ponderat. " se determine un ciclu +amiltonian care s aib costul total minim. 1entru aceast problem se cunosc algoritmi care necesit un timp exponenial (exemplu metoda bac?trac?ing . )in acest moti% se renun la condiia de optimalitate i se caut un ciclu care s treac prin toate oraele cu un cost pe ct posibil mai mic. 1aii algoritmului# 1. "e citete matricea costurilor A i nodul de pornire v1 2. )ac v1,v',........,v1 este un lan de=a ales, dup ca! se procedea! astfel# a) dac 1 n se alege muc+ia (v1,v1) b) dac 1_n, se alege muc+ia de cost minim care are o extremitate n v1 iar cealalt extremitate n mulimea nodurilor neselectate nc 0dat cu selectarea unei muc+ii se selectea! un nou nod i nu se re%ine asupra acestei alegeri. )in acest moti% algoritmul se ncadrea! n strategia 'reed(. Exemplu# *ie graful de mai =os i nodul de plecare v 1.

Conform algoritmului descris anterior se %or alege pe rnd urmtoarele muc+ii# (1,'), (',:), (:,I), (I,8), (8,1) i se obine un ciclu +amiltonian de cost total 3C. "e obser% c acesta nu este ciclul de cost minim

Conclu&ie# &etoda 'reed( nu furni!ea! soluia optim pentru orice tip de problem. )ac se renun la criteriul de optimalitate se obine o soluie apropiat de soluia optim. n funcie de problem se decide dac aceasta este acceptabil sau se folosete un algoritm exponenial.

Potrebbero piacerti anche