• Se numeşte metoda trierii o metodă ce indentifică toate soluţiile unei
probleme în dependenţă de mulţimea soluţiilor posibile. Toate soluţiile se identifică prin valori, ce aparţin tipurilor de date studiate: integer, boolean, enumerare, char, subdomeniu, tablouri unidimensionale. EXEMPLU: • Se consideră numerele naturale din S
mulţimea {0, 1, 2, …, n}. Elaboraţi un Function
program care determină pentru cîte numere K din această mulţime suma cifrelor SolutiePosibila(i:Natural):Boolean; fiecărui număr este egală cu m. În Begin particular, pentru n=100 si m=2, în mulţimea{0, 1, 2, …, 100} există 3 numere If SumaCifrelor(i)=m then care satisfac condiţiile problemei: 2, 11 SolutiaPosibila:=true si 20.Prin urmare, K=3. Else SolutiePosibila:=false; • Rezolvare: • End; Procedure • Program Pex; PrelucrareaSolutiei(i:Natural); • Type Natural=0..MaxInt; Begin • Var I, k, m, n : Natural; Writeln(‘i=’, i); • Function SumaCifrelor(i:Natural): K:=k+1; Natural; End; • Var suma: Natural; Begin • Begin Write(‘Dati n=’); • Suma:=0; readln(n); • Repeat Write(‘Dati m=’); • Suma:=suma+(I mod 10); readln(m); K:=0; • i:=i div 10; For i:=0 to n do • until i=0; If SolutiePosibila(i) then • SumaCifrelor:=suma; PrelucrareaSolutiei(i); • End; Writeln(‘K=’, K); Readln; Program Triere; PROGRAM PS: • O statie de benzinarie trebuie sa satisfaca cerearea a n clienti. Se cunoaste timpul de servire necesar fiecarui client. Realizati un program care stabileste o Procedure afisare_clienti; Begin ordine de servire a clientilor astfel incat timpul total Var i:integer; de asteptare sa fie minim. Write (‘posibilii clienti, in Begin ordine: ‘); • Program p2; Write (‘ cand incepe sa fie ultim:=1; • Type benz=record servit si cand a terminat nr:=1; • ins, sfs:integer; alimentarea: ‘); Write (v[i].ord, ‘ ‘); • ord:integer; end; for i:=1 to n Do for i:=2 to n do • Var v:array [1..100] of benz; Write (‘(‘v[i].ins,’,’,v[i].sfs, if (v[i].ins>v[ultim].sfs) • n, ultim, nr:integer; ‘,’,v[i].ord’)’); then • Procedure citire_clienti; Writeln; end; begin Procedure sortare_clienti; Write (v[i].ord, ‘ ‘); • Var hh, mm, i:integer; Var i,j:integer; ultim:=i; • begin t:benz; nr:=nr+1; • Write (‘n= ‘); Readln (n); Begin end; • for i:=1 to n do begin for i:=1 to n-1 Do Writeln (‘in total se pot • Write (‘Clientul cu nr. ‘,i,’cand este servit? (ora si for j:=i+1 to n Do alege maxim’,nr, ‘clienti’); minutul)’); if (v[j].sfs begin • Readln (hh, mm); Begin citire_clienti; • v[i].ins:=hh*60+mm; t:=v[i]; v[i]:=v[j]; afisare_clienti; • Write (‘clientul cu nr ‘, i, ‘ cand a terminat v[j]:=t; end; end; sortare_clienti; alimentarea ? ‘); Procedure alg_greedy; afisare_clienti; • Readln (hh, mm); var i:integer; alg_greedy; • v[i].sfs:=hh*60+mm; END. • v[i].ord:=i; end; end; CONCLUZII:
• Beneficiul metodei trierii constă în faptul că programele care folosesc această
metodă sunt simple, iar la verificarea este necesar de introdus multe date. Viteza acestui algoritm depinde de cîte elemente k (cele căutate) sunt în mulțimea S (toate elementele posibile). • Tehnica Greedy nu are o structură standard pentru toate tipurile de algoritmi, de aceea nu se poate standardiza. • MetodaTrierii este aplicată pe larg în soluţionarea problemelor avînd scopuri didactice. Aceasta însa nu poate fi aplicată problemelor complexe ce necesită date de intrare a căror valori sunt foarte mari.