Proc code - Solutions - COMBINATION/PERMUTATION |
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.Analysis
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
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
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 listAnalysis
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
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).
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.
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 combinacionsAnàlisi
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.
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.
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.Anàlisi
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
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).
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
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 combinacionesAnálisis2. 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
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
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 permutarAnálisis2. 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
Aunque
el comportamiento del algoritmo es lineal hay que tener en cuenta que el
número de listas generables es factorial(items_lista).
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.
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 |