Sei sulla pagina 1di 4

ALGORITMI COMBINATORIALI

In foarte multe aplicatii ale matematicii se cere determinarea numarului


de elemente ale unor multimi, numarul submultimilor unei multimi
satisfacand anumite proprietati sau numarul modalitatilor de dispunere a
elementelor multimii intr-o ordine specificata:
In cursul dezvoltrii matematicii s-a conturat o noua ramura a acesteia,
care se ocupa cu aspectele ridicate de operatia de numarare:combinatorica.

Permutarile unei multimi


Fie A={a1, a2, , an} o multime finita cu n elemente.Multimea A se
poate ordona in mai multe moduri.
Definitie
Se numeste permutare a multimii A oricare multime ordonata care se
formeaza cu cele n elemente ale acesteia.
Numarul permutarilor unei multimi cu n elemente se noteaza Pn.
Convenim ca multimea vida se poate ordona intr-un singur mod si
P0=1.
Calculul numerelor Pn
Stabilim relatia generala: Pn=nPn-1, n1 (1)
Folosind relatia (1) se obtine:
Pn=n*Pn-1=n*(n-1)*Pn-2==n(n-1)(n-2)3*3*1, deci:
Pn=1*2*3**(n-1)*n.
Se foloseste notatia: 1*2*3**(n-1)*n=n! care se citeste n factorial.
Sa se genereze permutarile unei multimi cu n elemente.
Program
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
int n,k,x[10],contor,m;
int gasit,pos;

int posibil(int k)
{
for(int i=1;i<=k-1;i++)
if(x[i]==x[k]) return(0);
1

return(1);

clrscr();
m=contor=0;
printf("dati n=");
scanf("%d",&n);
k=1;
x[k]=0;
while (k>0)
{
gasit=0;
while (x[k]<n) {

}
void afisare()
{ // m=coloane
contor++;
if (contor>24) {
contor=1;
m++;
if(m==3) {

x[k]=x[k]
m=0;

+1;

getch();

gasit=posibil(k);
if (gasit)

clrscr();

break;
}

}
if (gasit) if (k==n) afisare();
else {
k=k+1;
x[k]=0;
}
else k--;

}
gotoxy(10+20*m,contor);
for(int i=1;i<=k;i++)
printf("%d ",x[i]);
printf("\n");
}

}
getch();
}

void main ()
{

Aranjamente si combinari
Fie A={a1, a2, ,an} o multime finita cu n elemente si m {0, 1, 2,
,n} Se stie ca multimea A are in total 2 submultimi.

Combinari
Definitie
Submultimile multimii A avand fiecare cate m elemente se numesc
combinari de n elemente luate cate m.
Numarul combinarilor de n elemente luate cate m se noteaza Cn
2

Sa se genereze combinarile unei multimi cu n elemente luate cate m


Program
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
int n,m,k,x[10],gasit,pos;
int posibil(int k)
{ for(int i=1;i<=k-1;i++)
if(x[i]==x[k]) return(0);
return(1);
}
void afisare()
{ for(int i=1;i<=k;i++)
printf("%d ",x[i]);
printf("\n");
if (wherey()==23) {
getch();
clrscr();
}
}
void main()
{ clrscr();
printf("dati n=");
scanf("%d",&n);

printf("dati m=");
scanf("%d",&m);
if (n<m) printf("trebuie ca n sa
fie mai mare ca m");
k=1;
x[k]=0;
while (k>0)
{ gasit=0;
while (x[k]<n) {
x[k]=x[k]+1;
gasit=posibil(k);
if (gasit)
break;
}
if (gasit) if (k= =m)
afisare();
else {
k=k+1;
x[k]=x[k-1];}
else k--; }
getch();}

Aranjamente
Definitie
Submultimile ordonate cu m elemente ale multimii A se numesc
aranjamente de n elemente luate cate m.
Numarul aranjamentelor de n elemente luate cate m se noteaza An
Fiecare submultime cu m elemente poate fi ordonata in m! moduri.
Rezulta, asadar, ca vom avea de m! ori mai multe aranjamente de n elemente
luate cate m decat combinari de n elemente luate cate m.
Se obtin relatiile:An=m!Cn sau Cn=An/m!

(1)

Relatiile (1) permit aflarea unui numar cunoscand celalalt numar dintre
An si Cn.
Teorema
Fie A o multime finita cu n elemente si 0 m n un numar natural.
Atunci:
An=n!/(n-m)!
(2)
Teorema
Cn=n!/(n-m)!m!
Formula lui Pascal
Cn+Cn++Cn=2
Sa se genereze aranjamentele unei multimi cu n elemente luate cate m
Program
#include<stdlib.h>
scanf("%d",&m);
#include<conio.h>
if (n<m) printf("n trebuie sa fie
#include<stdio.h>
mai mare decat m");
int n,m,k,x[10],contor;
k=1;
int gasit,pos;
x[k]=0;
int posibil(int k)
while (k>0)
{
{ gasit=0;
for(int i=1;i<=k-1;i++)
while (x[k]<n)
if(x[i]==x[k]) return(0);
{
return(1);
x[k]=x[k]+1;
}
gasit=posibil(k);
void afisare()
if (gasit) break;
{
}
for(int i=1;i<=k;i++)
if (gasit) if (k==m)
printf("%d ",x[i]);
afisare();
printf("\n");
else {
}
k=k+1;
void main ()
x[k]=0;
{
}
clrscr();
else k--;
printf("dati n=");
}
scanf("%d",&n);
getch();
printf("dati m=");
}

Potrebbero piacerti anche