[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Esse capítulo descreve funções para criar e tratar combinações. Uma combinação c é representada por um vetor estático de k inteiros no intervalo de 0 a n-1, onde cada valor c_i ocorre no máximo uma vez. A combinação c corresponde a indices de k elementos escolhidos a partir de um vetor de n elementos. Combinações são úteis para iteragir sobre todos os k-elementos subconjuntos de um conjunto.
As funções descritas nesse capítulo estão definidas no arquivo de cabeçalho ‘gsl_combination.h’.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Uma combinação é definida por uma estrutura contendo três componentes, os
valores de n e k, e um apontador para o vetor estático de combinação.
Os elementos do vetor de combinação são todos do tipo size_t
, e
são armazenados na ordem de incremento. A estrutura gsl_combination
assemelha-se ao seguinte,
typedef struct { size_t n; size_t k; size_t *data; } gsl_combination;
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Essa função aloca memória para uma nova combinação com parâmetros
n, k. A combinação não é inicializada e seus elementos
são indefinidos. Use a função gsl_combination_calloc
se você
deseja criar uma combinação que é inicializada para a
primeira combinação lexicográfica. Um apontador null é retornado se
não tiver memória suficiente para criar a combinação.
Essa função aloca memória para uma nova combinação com parâmetros n, k e inicializa essa nova combinação para a primeira combinação lexicográfica. Um apontador nulo é retornado se não tiver memória suficiente para criar a combinação.
Essa função inicializa a combinação c para a primeira combinação lexicográfica, i.e. (0,1,2,…,k-1).
Essa função inicializa a combinação c para a última combinação lexicográfica, i.e. (n-k,n-k+1,…,n-1).
Essa função libera toda a memória usada pela combinação c.
Essa função copia os elementos da combinação src para a combinação dest. As duas combinações devem ter o mesmo tamanho.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
A seguinte função pode ser usada para acessar os elementos de uma combinação.
Essa função retorna o valor do i-ésimo elemento da
combinação c. Se i cair fora do intervalo permitido de 0 a
k-1 então o controlador de erro é chamado e 0 é retornado. Uma versão modificada dessa função é usada quando HAVE_INLINE
for definida.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Essa função retorna o intervalo (n) da combinação c.
Essa função retorna o número de elementos (k) na combinação c.
Essa função retorna um apontador para o vetor estático de elementos na combinação c.
Essa função verifica se a combinação c é válida. Os k elementos devem estar no intervalo de 0 a n-1, com cada valor ocorrendo no máximo uma vez e em ordem crescente.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Essa função avança a combinação c para a combinação seguinte
na ordem lexicográfica e retorna GSL_SUCCESS
. Se nenhuma combinação
adicional estiver disponível a gsl_combination_next retorna GSL_FAILURE
e a combinação
c permanece inalterada. Iniciando com a primeira combinação e
repetidamente aplicando essa função irá iteragir através de todas as possíveis
combinações de uma ordem fornecida.
Essa função dá um passo atrás na combinação c no sentido da
combinação anterior na ordem lexicográfica, retornando
GSL_SUCCESS
. Se nenhuma combinação anterior estiver disponível a gsl_combination_prev retorna
GSL_FAILURE
e a combinação c permanece inalterada.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
A biblioteca fornece funções de leitura e escrita de combinações para um arquivo tanto no formato binário quanto em texto formatado.
Essa função escreve os elementos da combinação c para o
fluxo stream em formato binário. A função retorna
GSL_EFAILED
se houver um problema de escrita para o arquivo. Uma vez que os
dados são escritos no formato binário nativo pode não ser portável
enrre diferentes arquiteturas.
Essa função lê elementos a partir de um fluxo aberto stream para a
combinação c em formato binário. A combinação c deve ser
pré-alocada com os valores corretos de n e k uma vez que a
função utiliza o tamanho de c para determinar quantos bytes devem ser lidos.
A função retorna GSL_EFAILED
se houver um problema durante a leitura
do arquivo. Os dados são assumidos terem sido escritos no formato
binário nativo sobre a mesma arquitetura.
Essa função escreve os elementos da combinação c
uma linha de cada vez para o fluxo stream usando o especificador de formato
format, que deve ser adequado para o tipo size_t.
No ISO C99 o modificador de tipo z
representa size_t
, de forma que
"%zu\n"
é um formato adequado.(30) A função retorna
GSL_EFAILED
se houver um problema de escrita para o arquivo.
Essa função lê dados formatados a partir do fluxo stream para a
combinação c. A combinação c deve ser pré-alocada com
valores corretos de n e k uma vez que a função usa o tamanho de c para
determinar quantos números devem ser lidos. A função retorna
GSL_EFAILED
se houver um problema de leitura do arquivo.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
O programa exemplo abaixo mostra na tela todos os subconjuntos do conjunto {0,1,2,3} ordenados por tamanho. Subconjuntos de mesmo tamanho são ordenados lexicográficamente.
#include <stdio.h> #include <gsl/gsl_combination.h> int main (void) { gsl_combination * c; size_t i; printf ("All subsets of {0,1,2,3} by size:\n") ; for (i = 0; i <= 4; i++) { c = gsl_combination_calloc (4, i); do { printf ("{"); gsl_combination_fprintf (stdout, c, " %u"); printf (" }\n"); } while (gsl_combination_next (c) == GSL_SUCCESS); gsl_combination_free (c); } return 0; }
Aqui está a saída do programa,
$ ./a.outAll subsets of {0,1,2,3} by size: { } { 0 } { 1 } { 2 } { 3 } { 0 1 } { 0 2 } { 0 3 } { 1 2 } { 1 3 } { 2 3 } { 0 1 2 } { 0 1 3 } { 0 2 3 } { 1 2 3 } { 0 1 2 3 }
Todos os 16 subconjuntos são gerados, e os subconjuntos de cada tamanho são ordenados lexicograficamente.
[ << ] | [ < ] | [ Acima ] | [ > ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Informações adicionais sobre combinações podem ser encontradas em,
[ << ] | [ >> ] | [Topo] | [Conteúdo] | [Índice] | [ ? ] |
Esse documento foi gerado em 23 de Julho de 2013 usando texi2html 5.0.