Analiza combinatorică este un domeniu al matematicii care studiază modalitățile de numărare ale elementelor mulțimilor finite, precum și de alegere și aranjare a lor. Numeroase concepte specifice acestui domeniu intervin și în probleme de algoritmică.
Produsul cartezian
Fie \( n \in \mathbb{N} \) și mulțimile \(A_1\), \(A_2\)., …, \(A_n\). Produsul cartezian \( A_1 \times A_2 \times … \times A_n \) este mulțimea \(n\)-uplurilor \(\left(x_1,x_2,…,x_n\right)\) cu proprietatea că \(x_1 \in A_1\), \(x_2 \in A_2\), …, \(x_n \in A_n\).
Regula produsului: Dacă mulțimile \(A_1\), \(A_2\)., …, \(A_n\) au respectiv \(k_1\), \(k_2\)., …, \(k_n\) atunci numărul de elemente al produsului cartezian \( A_1 \times A_2 \times … \times A_n \) este \(k_1 \cdot k_2 \cdot … \cdot k_n\).
Submulțimile unei multimi
Fie \(A\) o mulțimi cu n
elemente. Atunci ea are \(2^n\) submulțimi:
Exemplu: Mulțimea \(A={1,2,3}\) are \(2^3 = 8\) submulțimi:
- \( \emptyset \)
- \(\left\{1\right\}\), \(\left\{ 2 \right\}\), \(\left\{ 3 \right\}\)
- \(\left\{1,2\right\}\), \(\left\{1,3\right\}\), \(\left\{2,3\right\}\)
- \(\left\{1,2,3\right\}\)
Permutări
Se numește permutare o corespondență biunivocă (bijecție) între o mulțime finită și ea însăși.
Altfel spus, se numește permutare a unei mulțimi finite o aranjare a elementelor sale într-o anumită ordine.
Exemplu: permutările mulțimii {1,2,3}
sunt: (1,2,3)
, (1,3,2)
, (2,1,3)
, (2,3,1)
, (3,1,2)
și (3,2,1)
. Într-o altă reprezentare, acestea sunt:
\( \begin{pmatrix} 1 & 2 & 3 \\ 1 & 2 & 3 \end{pmatrix} \), \( \begin{pmatrix} 1 & 2 & 3 \\ 1 & 3 & 2 \end{pmatrix} \), \( \begin{pmatrix} 1 & 2 & 3 \\ 2 & 1 & 3 \end{pmatrix} \), \( \begin{pmatrix} 1 & 2 & 3 \\ 2 & 3 & 1 \end{pmatrix} \), \( \begin{pmatrix} 1 & 2 & 3 \\ 3 & 1 & 2 \end{pmatrix} \), \( \begin{pmatrix} 1 & 2 & 3 \\ 3 & 2 & 1 \end{pmatrix} \)
Dacă \( \sigma = \begin{pmatrix} 1 & 2 & 3 \\ 3 & 1 & 2 \end{pmatrix} \), atunci \( \sigma(1) = 3 \), \( \sigma(2) = 1 \) și \( \sigma(3) = 2 \).
Numărul de permutări al unei mulțimi cu \(n\) elemente este \( P_n = n! = 1 \cdot 2 \cdot \cdot … \cdot n\). Acest articol conține mai multe despre factorialul unui număr.
Numărul permutărilor unei mulțimi crește foarte repede. Pentru valori mici ale lui n
, numărul permutărilor depășește domeniul de valori al datelor întregi, fiind necesară implementarea operațiilor pe numere mari.
Permutări cu repetiție
Considerăm un set de \(n\) obiecte de \(k\) tipuri. Avem \(n_1\) obiecte de tipul 1
, \(n_2\) obiected e tipul 2
, …, \(n_k\) obiecte de tipul k
și \(n_1 + n_2 + … + n_k = n\). Numărul de permutări distincte ale celor n
obiecte este:
$$ P_R(n) = \frac{n ! }{n_1 ! \cdot n_2 ! \cdot … \cdot n_k !} $$
Exemplu: Numărul de anagrame distincte ale cuvântului ABABA
este:
$$ P_R(2+3) = \frac{(2+3) ! }{ 2 ! \cdot 3 ! } = \frac{1 \cdot 2 \cdot 3 \cdot 4 \cdot 5}{1 \cdot 2 \cdot 1 \cdot 2 \cdot 3} = 10 $$
Acestea sunt: AAABB
, AABAB
, AABBA
, ABAAB
, ABABA
, ABBAA
, BAAAB
, BAABA
, BABAA
, BBAAA
.
Aranjamente
Dacă A
este o mulțime cu n
elemente, submulțimile ordonate cu k
elemente ale lui A
, 0 ≤ k ≤ n
se numesc aranjamente a n
elemente luate câte k
.
Numărul de aranjamente de \(n\) luate câte \(k\) se notează \( A_{n}^{k} = n \cdot (n-1) \cdot (n-2) \cdot … \cdot (n-k+1) = \frac{ n! }{(n-k)!} \).
La fel ca în cazul permutărilor, pentru determinarea numărului de aranjamente poate fi necesară implementarea operațiilor pe numere mari.
Combinări
Pentru o mulțime dată o combinare reprezintă o modalitate de alegere a unor elemente, fără a ține cont de ordinea lor. Se numesc combinări de k
elemente submulțimile cu k
elemente ale mulțimii, presupuse cu n
elemente. Numărul de asemenea submulțimi se numește combinări de n
luate câte k
și se notează \(C_n^k\).
Formule:
- \(C_n^k = \frac{A_n^k}{P_k}\)
- \(C_n^k = \frac{n \cdot (n-1) \cdot … \cdot (n-k+1)}{1 \cdot 2 \cdot … \cdot k}\)
- \(C_n^k = \frac{n!}{k!\cdot {(n-k)!}} \)
- \(C_n^k= \begin{cases}
1& \text{dacă } k = 0,\\
\frac{n – k + 1}{k} \cdot { C_n^k } & \text{altfel}.
\end{cases} \) - \(C_n^k= \begin{cases}
1& \text{dacă } n = k \text{ sau } k = 0,\\
{ C_{n-1}^{k-1} } + { C_{n-1}^k } & \text{altfel}.
\end{cases} \); această formulă se regăsește în Triunghiul lui Pascal
Numerele lui Catalan
Termenul general al acestui șir este:
$$ C_n = C_{2n}^{n} – C_{2n}^{n+1} = \frac{1}{n+1}\cdot C_{2n}^{n} = \prod _{k=2}^{n} \frac{n+k}{k}, \text{pentru } n ≥ 0 $$
O formulă recursivă:
$$ C_{n+1} = \sum_{i=0}^{n}{C_i \cdot C_{n-i}} $$
Pentru \(n=0,1,2,3,…\) numere Catalan sunt: \( 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, … \).
Există numeroase probleme care au ca rezultat numerele lui Catalan. Amintim:
- \(C_n\) este egal cu numărul de șiruri de
n
paranteze deschise șin
paranteze închise care se închid corect. Pentrun=3
, avem \(C_3 = 5\) variante:((()))
,(())()
,()(())
,()()()
și(()())
. - numărul de cuvinte Dyck de lungime
2*n
: formate dinn
caractereX
șin
caractereY
și în orice prefix umărul deX
este mai mare sau egal cu numărul deY
. Pentrun=3
:XXXYYY
,XXYYXY
,XYXXYY
,XYXYXY
,XXYXYY
. - numărul de șiruri formate din
n
de1
șin
de-1
astfel încât toate sumele parțiale să fie nenegative. - \(C_n\) reprezintă numărul de modalități de a paranteza o expresie formată din
n+1
operanzi ai unei operatii asociative:((ab)c)d
,(a(bc))d
,(ab)(cd)
,a((bc)d)
,a(b(cd))
. - \(C_n\) reprezintă numărul de modalităti de a desena “șiruri de munți” cu
n
linii crescătoare șin
linii descrescătoare. Munții încep și se termină la același nuvel și nu coboară sub acel nivel:
/\ /\ /\ /\/\ / \ /\/\/\ / \/\ /\/ \ / \ / \
- numărul de drumuri laticiale de la punctul
(0,0)
la(2*n,0)
cu pași din{(1,1),(1,-1)
care nu coboară sub axaOx
. - \(C_n\) este numărul de modalități de a triangula un poligon cu
n+2
laturi:
- \(C_n\) este umărul de drumuri laticiale de la
(0,0)
la(n,n)
cu pași din{(0,1),(1,0)}
care nu depășesc prima diagonală \(y = x\). Următoarea imagine conține drumurile pentrun=4
:
- numărul de siruri \( 1 \leqslant a_1 \leqslant a_2 \leqslant … \leqslant a_n \) cu proprietatea că \(a_k \leqslant k \) este \(C_n\).
- \(C_n\) numărul de modalități de a acoperi o scară cu
n
trepte folosindn
dreptunghiuri. Pentrun=4
:
- pe un cerc sunt
2*n
puncte. Numărul posibilități de a desenan
coarde care nu se intersectează este \(C_n\).
Alte probleme care au care rezultat numărul lui Catalan sunt pe Wikipedia sau în documentul Exercises on Catalan and Related Numbers, Cambridge University Press, Richard P_ Stanley, June 1998.
Partițiile unei mulțimi
Fie \(A={a_1, a_2, …, a_n}\) o mulțime (finită). Se numește partiție a mulțimii \(A\) o familie de submulțimi \(A_1, A_2, …, A_k\) ale lui \(A\) cu proprietățile:
- \( A_i \subseteq A \), \( \forall i = \overline{1,k} \)
- \( A_1 \cup A_2 \cup … \cup A_k = A \)
- \( A_i\cap A_j = \emptyset \), \( \forall i\neq j \)
De exemplu, \(A={1,2,3}\) are următoarele partiții:
- \({1,2,3}\)
- \({1,2},{3}\), \({1,3},{2}\), \({1}, {2,3}\)
- \({1},{2},{3}\)
Numărul de partiții cu \(k\) submulțimi ale unei mulțimi cu \(n\) elemente se numește numărul lui Stirling de speța a doua, notat \(S(n,k)\). El respectă următoarea relație de recurență:
$$ \begin{cases} S(0,0) = 1\\
S(0,n) = S(n,0) = 0\\
S(n+1,k) = k \cdot S(n,k) + S(n,k-1) & \text{pentru } k > 0 \end{cases}
$$
Numerele Strirling de speța a doua pe Wikipedia
Numărul total de partiții ale unei mulțimi cu \(n\) elemente este numărul lui Bell: $$B_n = \sum_{k=0}^n S(n,k)$$
Începând cu \(B_0 = B_1 = 1\), primele numere Bell sunt: \(1, 1, 2, 5, 15, 52, 203, 877, 4140, … \).
Numerele Bell pot fi construite cu ajutorul așa-numitului triunghi Bell. Vom construi (parțial) un tablou A[][]
:
A[0][1] = 1
- primul element de pe liniile următoare este egal cu ultimul de pe linia precedentă:
A[i][1] = A[i-1][i]
- celelalte elemente ale fiecărei linii sunt egale cu suma celor după elemnte din stânga (linia curentă și linia precedentă):
A[i][j] = A[i][j-1] + A[i-1][j-1]
, pentruj=2,..., i+1
- primul elelemt de pe fiecare linie este numărul Bell corespunzător:
B
n
=A[n][1]
.
Citește mai departe