Diretório de artigos
Parte I conceito
Não há muitas fontes e usos de permutações e combinações, e os conceitos e fórmulas serão apresentados logo abaixo.
Capítulo I Disposição
de nnEntre n elementos diferentes, escolhammm (m ≤ nm≤nm≤n ,mmm ennn é um número natural, o mesmo abaixo) diferentes elementos são organizados em uma linha em uma determinada ordem, chamada dennRetire mm de n elementos diferentesuma permutação de m elementos; dennRetire mm de n elementos diferentesm (m ≤ nm≤nm≤n ) O número de todas as permutações de elementos é chamado dennRetire mm de n elementos diferentesO número de permutações de m elementos, com o símboloA ( n , m ) A(n,m)A ( n ,m )或A nm A_n^mAnmexpressar. Sua fórmula de cálculo é a seguinte:
A nm = n ( n − 1 ) ( n − 2 ) ( n − m + 1 ) = n ! ( n − m ) ! A_n^m=n(n-1)(n-2)(n-m+1)=\frac{n!}{(nm)!}Anm=n ( n−1 ) ( n−2 ) ( n−m+1 )=( n − m )!n !
Combinação do Cap.II
de nnEntre n elementos diferentes, escolhammm (m ≤ nm≤nm≤n ) elementos são combinados em um grupo, chamado dennRetire mm de n elementos diferentesUma combinação de m elementos; dennRetire mm de n elementos diferentesm (m ≤ nm≤nm≤n ) O número de todas as combinações de elementos é chamado dennRetire mm de n elementos diferentesO número de combinações de m elementos. Com a notaçãoC ( n , m ) C(n, m)C ( n ,m ) ouC nm C^m_nCnmexpressar. Sua fórmula de cálculo é a seguinte:
C nm = A nmm ! = n! m ! ( n − m ) ! C^m_n=\frac{A^m_n}{m!}=\frac{n!}{m!(nm)!}Cnm=m !Anm=m ! ( n − m )!n !;C nm = C n ( n − m ) C^m_n=C^{(nm)}_nCnm=Cn( n - m )
Implementação do código Parte II
Cap. I Cálculo de Permutações e Combinações
C++ 求A nm A^m_nAnm
int An_k(int n, int k) {
int ans=1;
for(int i=n-k+1;i<n+1;i++) ans*=i;
return ans;
}
Python 求A nm A^m_nAnm
def An_k(n, k):
ans=1
for i in range(n-k+1,n+1): ans*=i
return ans
C++ Encontrar C nm C^m_nCnm
int Ck_n(int n, int k)
{
int res = 1;
// Since C(n, k) = C(n, n-k)
if (k > n - k)
k = n - k;
// Calculate value of
// [n * (n-1) *---* (n-k+1)] / [k * (k-1) *----* 1]
for (int i = 0; i < k; ++i) {
res *= (n - i);
res /= (i + 1);
}
return res;
}
Python 求C nm C^m_nCnm
def Ck_n(n, k):
# since C(n, k) = C(n, n - k)
if(k > n - k):
k = n - k
# initialize result
res = 1
# Calculate value of
# [n * (n-1) *---* (n-k + 1)] / [k * (k-1) *----* 1]
for i in range(k):
res = res * (n - i)
res = res // (i + 1)
return res
Cap.II Conhecendo permutações e combinações para encontrar m
Conhecido A nm A^m_nAnme nnencontrar mm_m,因为A nn = A n ( n − 1 ) A^n_n=A^{(n-1)}_nAnn=An( n − 1 ), encontre o mmm max én − 1 n-1n−1。
versão C++
int An_kR(A, n) {
if(A==n) return 1;
if(A==1) return 0;
int m=n;
while(A>n) {
A/=n--;
if(A==n) return m-n+1;
}
return -1;
}
versão Python
def An_kR(A, n):
if A==n: return 1
if A==1: return 0
m=n
while A>n:
A/=n; n-=1
if A==n: return m-n+1
return -1