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