Sunteți pe pagina 1din 5

Metoda trierii: Metoda trierii presupune c soluia unei probleme poate fi gsit analiznd consecutiv elementele i ale unei

mulimi finite: S = { S1, S ! , Si, ! , S" #, $enumit mulimea soluiilor posibile% &n cele mai simple cazuri elementele Si, Si S, pot fi reprezentate prin valori aparinind unor tipuri ordinale de date: integer, 'oolean, c(ar, enumerare sau subdomeniu% &n problemele mai complicate sntem nevoii s reprezentm aceste elemente prin tablouri, articole sau mulimi% Menionm c n ma)oritatea problemelor soluiile posibile S1, S , !, S" nu sunt indicate e*plicit n enunul problemei i elaborarea algoritmilor pentru calcularea lor cade n sarcina programatorului% Schema general a unui algoritm bazat pe metoda trierii poate fi redat cu a)utorul unui ciclu:
For i:=1 to k do If SolutiePosibila(Si) then PrelucrareaSolutiei(Si)

+nde SoluiaPosibil este o funcie boolean care returneaz valoarea true dac elementul Si satisface condiiile problemei i false n caz contrar, iar ,relucrareaSolutiei este o procedura care efectueaz prelucrarea elementului selectat% $e obicei, aceast procedura soluia Si este afiat pe ecran% &n continuare vom analiza doua e*emple care pun n eviden avanta)ele i dezavanta)ele algoritmilor bazai pe metoda trierii% Exemplul 1. Se consider numerele naturale din mulimea {-, 1, , !, n#% .laborai un program care determin pentru cte numere / din aceast mulime suma cifrelor fiecrui numr este egal cu m. &n particular, pentru n=1-- si m= , n mulimea {-, 1, , !, 1--# e*ist 0 numere care satisfac condiiile problemei: , 11 si -% ,rin urmare, /=0% Rezolvare. .vident, mulimea soluiilor posibile S = {-, 1, , !, n#% &n programul ce urmeaz suma cifrelor oricrui numr natural i, i S, se calculeaz cu a)utorul funciei Suma1ifrelor% Separarea cifrelor zecimale din scrierea numrului natural 2i3 se efectueaz de la dreapta la stinga prin mprirea numrului 2i3 si a cturilor respective la baza 1-%
Program P151; T !e "atural=#$$%a∬ 'ar I( k( m( n : "atural; Function Suma)ifrelor(i:"atural): "atural; 1

'ar suma: "atural; *egin Suma:=#; +e!eat Suma:=suma,(I mod 1#); i:=i di- 1#; until i=#; Suma)ifrelor:=suma; .nd; Function SolutiePosibila(i:"atural):*oolean; *egin If Suma)ifrelor(i)=m then SolutiaPosibila:=true .lse SolutiePosibila:=false; .nd; Procedure PrelucrareaSolutiei(i:"atural); *egin /riteln(0i=1( i); 2:=k,1; .nd; *egin /rite(03ati n=1); readln(n); /rite(03ati m=1); readln(m); 2:=#; For i:=# to n do If SolutiePosibila(i) then PrelucrareaSolutiei(i); /riteln(02=1( 2); +eadln; .nd$

Exemplul 2. Se consider mulimea ,={ ,1, , , !, ,n# format din n puncte 4 5 n 5 0-6 pe un plan .uclidian% 7iecare punct ,) este definit prin coordonatele sale 8), 9)% .laborai un program care afieaz la ecran coordonatele punctelor ,a, ,b distana dintre care este ma*im% Rezolvare. Mulimea soluiilor posibile S=,:,% .lementele 4,), ,m6 ale produsului cartezian ,:, pot fi generate cu a)utorul a doua cicluri imbricate:
For 4:=1 to n do For m:=1 to n do If SolutiePosibila(P4( Pm) then PrelucrareaSolutiei( P4( Pm)

$istana dintre punctele ,), ,m se calculeaz cu a)utorul formulei:


$)m = ;48)<8m6 = 49)< 9m6 % Program P155; )onst nma&=6#; T !e Punct = record

7(

: real;

.nd; Indice = 1$$nma&; 'ar P:arra 8Indice9 of Punct; :( m( n:Indice; 3ma&:real; P;( P;: Punct; Function 3istanta(;( *: Punct): real; *egin 3itanta:=s<rt(s<r(;$&=*$&),s<r(;$ =*$ )); .nd; Function SolutiePosibila(4( m:Indice):*oolean; *egin If 4>?m then SolutiePosibila:=true .lse SolutiePosibila:=false; .nd; Procedure PrelucrareaSolutiei(;( *: Punct); *egin If 3istanta(;(*)?dma& then *egin P;:=;; P*:=*; 3ma&:=3istanta(;(*); .nd; .nd; *egin /rite(03ati n=1); readln(n); /riteln(03ati coordonatele &( ale !unctelor1); For 4:=1 to n do *egin /rite(0P80( 4(19: 0); readln(P849$&( P849$ ); .nd; 3ma&:=#; For 4:=1 to n do For m:=1 to n do If SolutiePosibila(4( m) then PrelucrareaSolutiei(P849( P8m9); /riteln(0Solutia: P;=(0( P;$&:5:5( 0(1( P;$ :5:5( 0)1); /tieln(0Solutia: P*=(0( P*$&:5:5( 0(1( P*$ :5:5( 1)1); +eadln; .nd$

START

x s1

x satisface
condiia problemei d Includem x n soluie

n S exist elemente necercetate d x un element necercetat din S

STOP

>vanta)ul principal al algortmilor bazai pe metoda trierii const n faptul c programele respective snt relative simple, iar depanarea lor nu necesita teste sop(isticate% 1omple*itatea temporal a acestor algoritmi este determinat de numrul de elemente " din mulimea soluiilor posibile S% &n ma)oritatea problemelor de o reala importan practica metoda trierii conduce la algoritmii e*poneniali% &ntrucit algoritmii e*poneniali snt inacceptabili in cazul datelor de intrare foarte mari, metoda trierii este aplicat numai n scopuri didactice sau pentru elaborarea unor programe al cror timp de e*ecuie nu este critic% ,roblema ?%
Program P1; const nma&=6#; t !e Punct= record &( :real; end; Indice=1$$nma&; -ar P:arra 8Indice9 of Punct; 4(m(k(n:Indice; ma&:real; P;( P*( P) : Punct; function 3is(;( * :Punct):real; begin @

3is:=s<rt(s<r(;$&=*$&),s<r(;$ =*$ )); end; function ;ria(@1(@5(@6:real):real; -ar s!:real; begin s!:=(@1,@5,@6)A5; ;ria:=s<rt(s!B(s!=@1)B(s!=@5)B(s!=@6)); end; function SolutiePosibila(4(m(k:Indice):boolean; begin if (4>?m) and (m>?k) then SolutiePosibila:=true else SolutiePosibila:=false; end; !rocedure PrelucrareaSolutiei(;(*():Punct); begin if ;ria(3is(;(*)(3is(*())(3is(;()))?ma& then begin ma&:=;ria(3is(;(*)(3is(*())(3is(;())); P;:=;; P*:=*; P):=); end; end; begin Crite(D3ati n= D); readln(n); Criteln(D3ati coordonatele &( ale !unctelorD); for 4:=1 to n do begin Crite(DP8D(4(D9: D); readln(P849$&( P849$ ); end; ma&:=#; for 4:=1 to n do for m:=1 to n do for k:=1 to n do if SolutiePosibila(4(m(k) then PrelucrareaSolutiei(P849(P8m9(P8k9); Criteln(D;ria ma&: D(ma&:#:5); Criteln(D1: D(P;$&:5:5(D D(P;$ :5:5); Criteln(D1: D(P*$&:5:5(D D(P*$ :5:5); Criteln(D1: D(P)$&:5:5(D D(P)$ :5:5); readln; end$

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