Proc code - Solutions - COMBINATION/PERMUTATION Go Home

$language

Combination and Permutation generation

Combinations

Description

    The propose of this services is to generate all the possible combinations between all items in a set of lists .

    The COMBINATION service contains two operations:

1. SetList(ListName, ListItems). Used to add a new list, identified by a name, to the combination generator.
2. GetComb(CombinationList). Returns the next items combination.
    Values returned in $status:
        0 No combination generated
        >0 Number of generated combination
        <0 Last combination has been generated. abs($status) is the number of generated combination
Analysis

    The algorithmic complexity is lineal, but you must notice that the number of calls (due to the generated output) to this service can be exponential.

Use sample (in form usecomb)

    We want to generate all the possible customers with combinations of the relevant parameters to calculate the invoices of our organisation.

    The CUSTOMER entity is :

    CUST_ID numeric
    CUST_NAME string
    CUST_TYPE stirng ; Values : A, B, C (major, normal, occasional)
    CUST_DISC sting    ; Values : Y,N (discounts or not)
    CUST_VAT stinrg   ; Applicable VAT : R,N,S,X (Reduced, Normal, Special, Not apply)

activate “combination”.SetList(“CUST_TYPE”,”A;B;C”)
activate “combination”.SetList(“CUST_DISC”,”Y;N”)
activate “combination”.SetList(“CUST_VAT”,”R;N;S;X”)

activate “combination”.GetComb(l_values)
while ($status !=  0)
   wid = abs($status)
   creocc “customer”,-1
   getlistitems/occ l_values,”customer”
   cust_id = wid
   cust_name = “Customer %%wid”
   activate “combination”.GetComb(l_values)
endwhile

Click here to view the result
 

Permutations

Description

    This services returns all the item permutations for a list.

    The PERMUTATION service contains two operations:

1. SetList(ListItems). Initialise the services with the specified list
2. GetPerm(ListItems). Returns the next permutation of the initial list
    Values returned in $status:
        0 no permutation generated
        >0 Number of generated permutation
        <0 Last permutation has been generated. abs($status) number of generated permutation
Analysis

    The behaviour of this algorithm is  lineal, but notice that the number of calls, number of  generated lists, is factorial (depending on the number of items).
 

Components


    The components in the cp.trx files are:

        - PERMUTATION service
        - COMBINATION service
        - TESTPERM form. A form to test the PERMUTATION service
        - TESTCOMB form. A form to test the COMBINATION service
        - USECOMB form. A COMBINATION service sample of use to generate a test data set.


Generador de combinacions i permutacions

Combinacions


Descripció

    La intenció d’aquest servei és la de generar totes les llistes possibles combinant tots els elements d’una sèrie de llistes entre ells.

    El servei COMBINATION consta de dues operacions

1. SetList(ListNmae, ListItems). S’utilitzarà per afegir una llista, identificada per un nom, al generador de combinacions
2. GetComb(CombinationList). Retorna la següent combinació d’items de les diferents llistes.
    Valores retornats en $status.
        0 si no s’ha generat cap combinació
        >0 Número de combinació generada
        < 0 Última combinació possible. abs($status) és el número de combinació generada.
Anàlisi

    Tot i que el comportament és lineal s’ha de tenir en compte que el nombre de crides que poden efectuar-se és exponencial en funció de les dades subministrades.

Exemple d’ús (form usecomb)

    Volem generar totes les combinacions possibles de clients amb els paràmetres que intervenen en un càlcul de factures de la  nostra organització.

    L’entitat CUSTOMER és :

    CUST_ID numeric
    CUST_NAME string
    CUST_TYPE string    ; tipus de client. Valors : A,B,C (majorista, normal, ocasional)
    CUST_DISC string ; Descompte. Valores : Y, N (pot tenir o no descomptes)
    CUST_VAT string ; Tipus d’IVA : R,N,S,X (Reduït, Normal, Especial o No aplicable)

activate “combination”.SetList(“CUST_TYPE”,”A;B;C”)
activate “combination”.SetList(“CUST_DISC”,”Y;N”)
activate “combination”.SetList(“CUST_VAT”,”R;N;S;X”)

activate “combination”.GetComb(l_values)
while ($status !=  0)
   wid = abs($status)
   creocc “customer”,-1
   getlistitems/occ l_values,”customer”
   cust_id = wid
   cust_name = “Customer %%wid”
   activate “combination”.GetComb(l_values)
endwhile

Click aquí per veure el resultat generat.
 
 

Permutacions


Descripció

    Aquest servei permet obtenir totes les permutacions possibles d’items d’una llista

    El servei PERMUTATION consta de dues operacions

1. SetList(ListItems) Inicialitza el servei amb la llista a permutar.
2. GetPerm(ListItems): Retorna la següent permutació de la llista
    Valors retornats en $status
        0 no s’ha generat cap permutació
        >0 Número de permutació generada
        <0 Última permutació possible. abs($status) número de permutació generada
Anàlisi

    Tot i que el comportament de l’algorisme és lineal, s’ha de tenir en compte que el nombre de llistes generades té un comportament factorial(items_llista).
 

Component


    Al fitxer cp.trx trobareu dos serveis que, tot i que són de propòssit general, poden ser útils per la creació de dades de proves.

    Els components disponibles en cp.trx són:

        - Servei PERMUTATION
        - Servei COMBINATION
        - Form TESTPERM. Per comprovar el funcionament del servei PERMUTATION
        - Form TESTCOMB. Per comprovar el funcionament del servei COMBINATION
        - Form USECOMB. Exemple de generació de dades de proves amb COMBINATION


Generador de combinaciones y permutaciones.

 

Combinaciones.


Descripción

    La intención de este servicio es la de generar todas las listas posibles combinando todos los elementos de una serie de listas entre ellos.

    El servicio COMBINATION consta de dos operaciones.

1. SetList ( ListName, ListItems). Se utiliza para añadir una lista, identificada por un nombre, al generador de combinaciones

2. GetComb (CombinationList). Devuelve la siguiente combinación de items de la diferentes lista.
    Valores retornados en $status
       0 no se ha generado ninguna combinación
       > 0 Número de combinación generada
       < 0  Última combinación posible. abs($status) número de combinación generada

Análisis

    Aunque el comportamiento es lineal hay que tener en cuenta que el número de llamadas que pueden efectuarse es exponencial en función de los datos suministrados.

Ejemplo de uso (form usecomb)

    Queremos generar todas las combinaciones posibles de clientes con los parámetros que intervienen un el cálculo de facturas de nuestra organización

    La entidad CUSTOMER es :

    CUST_ID  numeric
    CUST_NAME string
    CUST_TYPE  string       ;  Tipo de cliente. Valores : A, B, C (mayorista, normal, ocasional)
    CUST_DISC   string       ;  Descuentos Valores. Y, N  (puede tener descuentos, No )
    CUST_VAT    string       ;  IVA aplicable : R, N, S, X (Reducido, Normal, Especial, No aplicable)

activate “combination”.SetList(“CUST_TYPE”,”A;B;C”)
activate “combination”.SetList(“CUST_DISC”,”Y;N”)
activate “combination”.SetList(“CUST_VAT”,”R;N;S;X”)

activate “combination”.GetComb(l_values)
while ($status !=  0)
   wid = abs($status)
   creocc “customer”,-1
   getlistitems/occ l_values,”customer”
   cust_id = wid
   cust_name = “Customer %%wid”
   activate “combination”.GetComb(l_values)
endwhile

Click aqui para ver el resultado obtenido
 

Permutaciones


Descripción

    Este servicio permite obtener todas las permutaciones posibles de items de una lista.

    El servicio PERMUTATION consta de dos operaciones:

1. SetList(ListItems). Inicializa el servicio con la lista a permutar

2. GetPerm(ListItems). Retorna la siguiente permutación de la lista
    Valores retornados en $status
        0 no se ha generado ninguna permutación
        > 0 Número de permutación generada
        < 0  Última permutación posible. abs($status) número de permutación generada

Análisis

    Aunque el comportamiento del algoritmo es lineal hay que tener en cuenta que el número de listas generables es factorial(items_lista).
 

Componentes


    En el fichero cp.trx podéis encontrar dos servicios que, aunque son de propósito general, pueden ser útiles para la creación de datos de pruebas.

    Los componentes disponibles en cp.trx son:

- Servicio PERMUTATION
- Servicio COMBINATION
- Form TESTPERM . Para comprobar el funcionamiento del servicio PERMUTATION
- Form TESTCOMB. Para comprobar el funcionamiento del servicio COMBINATION
- Form USECOMB. Ejemplo de generación de datos de pruebas con COMBINATION.


Combination sample output
CUST_TYPE=A;CUST_DISC=Y;CUST_VAT=R
CUST_TYPE=A;CUST_DISC=Y;CUST_VAT=N
CUST_TYPE=A;CUST_DISC=Y;CUST_VAT=S
CUST_TYPE=A;CUST_DISC=Y;CUST_VAT=X
CUST_TYPE=A;CUST_DISC=N;CUST_VAT=R
CUST_TYPE=A;CUST_DISC=N;CUST_VAT=N
CUST_TYPE=A;CUST_DISC=N;CUST_VAT=S
CUST_TYPE=A;CUST_DISC=N;CUST_VAT=X
 CUST_TYPE=B;CUST_DISC=Y;CUST_VAT=R
 CUST_TYPE=B;CUST_DISC=Y;CUST_VAT=N
 CUST_TYPE=B;CUST_DISC=Y;CUST_VAT=S
 CUST_TYPE=B;CUST_DISC=Y;CUST_VAT=X
 CUST_TYPE=B;CUST_DISC=N;CUST_VAT=R
 CUST_TYPE=B;CUST_DISC=N;CUST_VAT=N
 CUST_TYPE=B;CUST_DISC=N;CUST_VAT=S
 CUST_TYPE=B;CUST_DISC=N;CUST_VAT=X
CUST_TYPE=C;CUST_DISC=Y;CUST_VAT=R
CUST_TYPE=C;CUST_DISC=Y;CUST_VAT=N
CUST_TYPE=C;CUST_DISC=Y;CUST_VAT=S
CUST_TYPE=C;CUST_DISC=Y;CUST_VAT=X
CUST_TYPE=C;CUST_DISC=N;CUST_VAT=R
CUST_TYPE=C;CUST_DISC=N;CUST_VAT=N
CUST_TYPE=C;CUST_DISC=N;CUST_VAT=S
CUST_TYPE=C;CUST_DISC=N;CUST_VAT=X

 
 

Copyright © 1999-1999  $UUU  All rights reserved.
Disclaimer. | Site Comments.