consecutiv elementele s[i], ale unei multimi finite S={s1,s2,,si,sk} denumita MULTIMEA SOLUTIILOR POSIBILE
Unde SolutiePosibila = functie booleana ce returneaza valoare T/F daca elementul satisface conditiile problemei. PrelucrareaSolutiei = procedura ce efectueaza prelucrarea elementului selectat. For i:=1 to k do If SolutiePosibila(si), then PrelucrareaSolutiei(si) Se considera multimea P= {P1,P2,Pn}, formata din n puncte (2<=n<=30) pe un plan euclidian. Fiecare punct P este definit prin coordonatele sale x,y. Elaborati un program care afiseaza la ecran coordonatele punctele P(a),P(b) dinstanta dintre care este maxima. REZOLVARE: Multimea solutiilor posibile S=PxP. For j:=1 to n do For m:=1 to n do If SolutiePosibila(Pj,Pm) then PrelucrareaSolutiei(Pj,Pm)
Distanta dintre punctele P(j), P(m) se calculeaza cu ajutorul:
d(jm) = (x[j]-x[m])^2 + (y[j]-y[m])^2
Program P152; Const nmax=30; Type Punct=record X,y:real; End; Indice=1..nmax; Var P:array[Indice] of Punct; J,m,n:Indice; Dmax:real; PA,PB:Punct; Function Distanta (A,B:Punct):real; Begin Distanta :=sqrt(sqr(A.x-B.x)+sqr(A.y-B.y)); End; Function Solutie Posibila(j,m:Indice):boolean; Begin If j<>M then Solutie Posibila:= true else SolutiePosibila:=false; End; Procedure Prelucrarea Solutiei(A,B:Punct); Begin If Distanta(A,B)>dmax then Begin PA:=A; PB:=B; end; end;
Begin Write(Dati n); readln(n); Writeln(Dati Coordonatele x,y ale punctelor); For j:=1 to n do Begin Write(P[,j,]:); readln(P[j].x, P[j].y); End; Dmax:=0;
For j:=1 to n do For m:=1 to n do If Solutie Posibila(j,m) then Prelucrarea solutiei(P[j], P[m]); Writeln(Solutia: PA=Pa.x:5:2,,, PA.y:5:2,)); Writeln(Solutia: PB=Pa.x:5:2,,, PB.y:5:2,)); Readln; end.
Elementele din multimea solutiilor posibile pot fi enumerate direct. Generarea solutiilor posibile necesita elaborarea unor algoritmi speciali: - reuniunea/Intersectia/Diferenta; -Generarea tuturor submultimilor/elementelor unui produs cartezian/permutarilor,aranjamentelor, combinarilor de obiecte. Avantajul principal al algoritmilor bazati pe metoda trierii consta in faptul ca programele respective sunt relativ simple, iar depanarea lor nu necesita teste sofisticate. Complexitatea temporala e determinata de nr de elemente. Metoda trierii conduce la algoritmi exponentiali. Metoda trierii este aplicata numai in scopuri didactice/pentru elaborarea unor programe al caror timp de executie nu este critic.