online: 2; azi: 462; total: 52468 Manual clasa a xi a - Tehnici de programare - Metoda greedy

Manual clasa a Xi a

Tehnici de programare

Metoda greedy

Fiind date mulțimea de numere reale A = (a1,a2, ..., am) şi n, gradul unui polinom, cu n<m, să se selecteze, din mulțimea A, o submulțime de n+1 numere pentru coeficienţii polinomului, astfel încât valoarea polinomului P(x) într-un punct x precizat să fie maximă.
Pentru a maximiza valoarea polinomului P(x) într-un punct x dat, vom utiliza metoda greedy pentru a alege coeficienții. Dacă x este pozitiv, vom selecta cele mai mari n + 1 numere pozitive din A. Dacă x este negativ, vom selecta cele mai mari n + 1 numere în funcție de valorile absolute și vom alterna semnele acestora în funcție de puterile lor în polinom. Dacă x este zero, suma maximă va fi coeficientul termenului liber, care este cel mai mare număr din mulțimea A.
# include < iostream >
void selectionSort ( double arr [], int n) {
for ( int i = 0 ; i < n - 1 ; i++) {
int max_index = i;
for ( int j = i + 1 ; j < n; j++) {
if ( arr [j] > arr [ max_index ]) {
max_index = j;
}
}
if ( max_index != i) {
double temp = arr [i];
arr [i] = arr [ max_index ];
arr [ max_index ] = temp ;
}
}
}
int main () {
int m, n;
double x;
std :: cout << " Introduceti numarul de elemente din multime (m): " ;
std ::cin >> m;
std :: cout << " Introduceti gradul polinomului (n): " ;
std ::cin >> n;
std :: cout << " Introduceti valoarea punctului x: " ;
std ::cin >> x;
double A[m];
std :: cout << " Introduceti elementele multimii A: " ;
for ( int i = 0 ; i < m; i++) {
std ::cin >> A[i];
}
selectionSort (A, m);
double coeficienti [n + 1 ];
if (x > 0 ) {
for ( int i = 0 ; i <= n; i++) {
coeficienti [i] = A[i];
}
} else if (x < 0 ) {
for ( int i = 0 ; i <= n; i++) {
coeficienti [i] = A[i];
if (i % 2 == 1 ) {
coeficienti [i] = - coeficienti [i];
}
}
} else {
coeficienti [ 0 ] = A[ 0 ];
for ( int i = 1 ; i <= n; i++) {
coeficienti [i] = 0 ;
}
}
std :: cout << " Coeficientii selectati sunt: " ;
for ( int i = 0 ; i <= n; i++) {
std :: cout << coeficienti [i] << " " ;
}
std :: cout << std :: endl ;
return 0 ;
}

Acest program citeste m, n, x și elementele multimii A. Folosim funcția selectionSort () pentru a sorta mulțimea A în ordine descrescătoare. Apoi, în funcție de semnul lui x, selectăm coeficienții polinomului și îi afișăm.