Disposition - biblioteca para Combinatoria

Inglés - Español

Disposition es una biblioteca diseñada para generar variaciones, permutaciones y combinaciones de elementos, temas habituales en matemática combinatoria, y facilitar que puedas incluirlas en tu programa.

La biblioteca está escrita en C ANSI y ha sido liberada bajo licencia GPL. Puedes descargar la última versión del programa de la página del proyecto Disposition en SourceForge.

Disposition viene con un programa de ejemplo, llamado disp, que muestra una aplicación de la biblioteca para la generación de cadenas de texto:

$ disp
`disp' prints permutations and combinations of characters.

Usage: disp [-v|-r] TYPE CHARLIST [SIZE]

TYPE must be one of these: -p|-pr|-c|-cr|-prr|-crr
By default, the SIZE number is equal to the length of CHARLIST.

-p        Permutations (nPk)
-pr       Permutations with repetition (nPRk)
-c        Combinations (nCk)
-cr       Combinations with repetition (nCRk)
-prr      Permutations with "restricted" repetition
-crr      Combinations with "restricted" repetition
CHARLIST  string with the n characters used in the dispositions
SIZE      length k of every disposition, equal to n by default
-v        output in reverse order
-r        print only random dispositions

For Permutations and Combinations with "restricted" repetition,
characters in CHARLIST can be repeated to set the maximum number
of times that each character can appear in the dispositions.

La tabla siguiente muestra diferentes secuencias generadas con el programa disp:

$ disp -p abc
abc
acb
bac
bca
cab
cba
$ disp -pr 01 4
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
$ disp -c aeiou 3
aei
aeo
aeu
aio
aiu
aou
eio
eiu
eou
iou
$ disp -v -cr ABC 4
CCCC
BCCC
BBCC
BBBC
BBBB
ACCC
ABCC
ABBC
ABBB
AACC
AABC
AABB
AAAC
AAAB
AAAA

Aquí se muestra un ejemplo de un programa que usa la biblioteca para generar e imprimir las variaciones de 5 elementos y tamaño 3:

#include "permutation.h"
#include <stdio.h>
int main(void)
{
        Permutation *perm;
        int numelem, size, i;
        perm = newPermutation(numelem = 5, size = 3, NULL);
        if (!perm) return 1;
        disp_first(perm);
        do {
                for (i = 0; i < disp_size(perm); i++)
                        printf("%d ", disp_vec(perm)[i]);
                printf("\n");
        } while (disp_next(perm));
        disp_delete(perm);
        return 0;
}

Puede encontrarse más información dentro del paquete. Para cualquier sugerencia, error o idea sobre el programa, envíame un correo a: jasampler en yahoo punto es