Varianta 19
Raport
Chisinău 2018
Cuprin
2
s
3
1. Scopul și obiectivele lucrării
4
2. Sarcina
5
3. Schema bloc
6
4. Realizarea
Realizarea programului este descrisa in laboratoru Nr.6 ,aici eu doar am analizat programul
dupa criteriile de calcul a complaxitatii algoritmelor:
1. Se stabileşte dimensiunea problemei.
2. Se identifică operaţia de bază.
3. Se verifică dacă numărul de execuţii ale operaţiei de bază depinde doar de
dimensiunea problemei. Dacă da, se determină acest număr. Dacă nu, se analizează
cazul cel mai favorabil, cazul cel mai defavorabil şi (dacă este posibil) cazul mediu.
4. Se stabileşte clasa de complexitate căruia îi aparţine algoritmul.
Deci mergind dupa aceste criterii in rezultam am primit urmatoarea formula a complexitatiii :
complexitatea fata de timpul de executie „ T(n)=O(n∗n!)=O(n!) ” iar din punct de
vedere al spatiului S(n)=O(n) ,deci pot afirma ca pentru rezolvare acestei probleme
backtrackingul este destul de optim deoarece complexitatea algoritmului este una
factoriala .
7
Concluzii
Analiza complexitatii unui algoritm are ca scop estimarea volumului de resurse de calcul
necesare pentru executia algoritmului. Prin resurse se ıntelege:
Aceasta analiza este utila pentru a stabili daca un algoritm utilizeaza un volum acceptabil
de resurse pentru rezolvarea unei probleme. In caz contrar algoritmul, chiar daca este corect, nu
este considerat eficient si nu poate fi aplicat ın practica. Analiza complexitatii, numita si analiza
eficientei algoritmilor, este utilizata si ın compararea algoritmilor cu scopul de a-l alege pe cel
mai eficient (cel care foloseste cele mai putine resurse de calcul).
8
Bibliografie
Anexa A
9
Anexa B
#include <stdio.h>
#include <conio.h>
//Sa se genereze toate matricile nxn ce contin elemente distincte din multimea 1,...,n2
astfel incat pe fiecare linie elementele sa fie in ordine crescatoare.
int n,a[20][20],Nr=1;
//Funtia verifica daca noua matrice corespunde conditiei necesare
int posibil(int i,int j)
{ int l,k;
for(k=1;k<=i-1;k++)
for(l=1;l<=n;l++)
if (a[i][j]==a[k][l])
return 0;
if ((j) && (a[i][j]<=a[i][j-1]))
return 0;
return 1;
}
//Funtia afiseaza matricele generate pe ecran
void tiparire(void)
{ printf("\n");
printf("Matricea Nr.%d",Nr++);
int i , j;
for( i=1;i<=n;i++) {
printf("\n ");
for( j=1;j<=n;j++)
printf(" %d",a[i][j]);}
printf("\nTastati o tasta!\n");
getch();
}
//Funtia folosind metoda backtracking,creaza noile matrice si apoi cu ajutorul functiilor
anterioare verifica daca ea corespunde conditie si daca da o afiseaza pe ecran
void back(int i,int j)
{ int k;
for(k=1;k<=n*n;k++) {
a[i][j]=k;
if (posibil(i,j))
if ((i==n) && (j==n))
tiparire();
else
if (j==n)
back(i+1,1);
else
back(i,j+1);}
}
//Funtia principala ce lucreza cu funtiile anterioare
void main(void)
{ n=2;
clrscr();
back(1,1);
getch();
}
10