Implementação de Permutação e Combinação e Algoritmo

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≤nmn ,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≤nmn ) 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 ( n1 ) ( n2 ) ( nm+1 )=( n m )!n !

Combinação do Cap.II

de nnEntre n elementos diferentes, escolhammm (m ≤ nm≤nmn ) 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≤nmn ) 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-1n1

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

おすすめ

転載: blog.csdn.net/Gou_Hailong/article/details/128713343