Вы находитесь на странице: 1из 9

Practica 1

Candys candy, Carlos Eduardo Perez Trujilloa


a Cinvestav-Tamaulipas

1. Introducci
on

20

2. Problema
2.1. Descripci
on del problema
Candy tiene una tienda de dulces

En esta pr
actica es presentado un con F diferentes sabores.
algoritmo que es cap
az de resolver un

quiere hacer muchos paquetes de dul-

25
ces para venderlos.
problema de combinaciones llamado

Candys candy, donde se requiere cono-

Ella re-

Cada paquete,

debe de tener por lo tanto un paquete

cer conocer cuantos paquetes con un saborizado, conteniendo dulces de un


numero diferente numero de dulces, o

solo sabor, o un paquete variado, con-

diferente tipos de paquetes, basados en

teniendo dulces de cada sabor. Candy

30
quiere hacer un empaquetado agradel numero de sabores y la cantidad de

10

able con sus dulces.

dulces de cada sabor.

Los parametrtos de entrada y ranLa meta en esta pr


actica es desar- gos son definidas por dos lineas, la
rollar un software que pueda resolver perimera linea contiene un entero
este problema de manera correcta, 35
y F, indicando el numero de sabores
15

encontrar una posible forma para que

(2<=F<=105 . The second line con-

el programa se tarde lo menos posi- tains F integers Ci , la segunda linea


ble en resolver los problemas, y as de

contiene F enteros Ci , indicando el nu-

esa forma pueda considerarse como un

mero de piezas de dulces de cada sabor

software de c
alidad.

(1<=Ci <= 109 Para 1<=i <=F).

40

I Fully

documented templates are available in the elsarticle package on CTAN.


URL: www.elsevier.com (Carlos Eduardo P
erez Trujillo)

Preprint submitted to Journal of LATEX Templates

October 5, 2015

3. Soluci
on

65

Entrada

Rango

Linea 1

2:105

Linea 2

Ci

1:109 para i=1:F

El algoritmo fue diseado tomando


en cuenta los requerimientos y las re-

2.2. Restricciones

stricciones especificadas, entonces, el

Las restricciones del problema son


45

algoritmo diseado no solo resulve el

las siguientes:

problema correctamente, si no que que

70

Cada pieza de dulce debe de ser tambien trata de resolverlo en la menor


colocado en exactament un pa-

cantidad de tiempo posible.

Por lo

quete, es decir, no deben de so- tanto la alternativa de solucion es debrar dulces.


50

scrita a continuacion en las siguientes

75
secciones.
Cada paquete, sin importar su

tipo, debe de contener por lo


menos 2 piezas de dulces.

3.1. Dise
no del algoritmo

Cada paquete, sin importar su


tipo, debe de contener el mismo
55

El algoritmo dise
nado sera descrito

numero de piezas de dulces.

a traves de tres secciones, donde el


primer algoritmo descrito muestra el

Dentro de cada paquete variado,

programa principal, el segundo pro-

80

el numero de piezas de dulces de

grama muestra los empaquetamientos

sabores debe de ser el mismo en

actuando sobre la cantidad de dulces

todos.

de sabores en los que se tiene la menor


60

Debe de haber por lo menos un

cantidad de estos, y el tercer programa

paquete variado.
85

verifica si es posible realizar los em-

Debe de haber por lo menos un

paquetamientos con el tama


no de pa-

paquete saborizado, es decir de

quete especificado y cuenta cuantos pa-

un solo sabor.

quetes puede realizar.

Algorithm 1 main program


1: int main(){
2:

get F lavors

3:

for i = 0 : F lavors do

4:

get C[i]

5:

auxC[i] = C[i]

6:

if i = 0 then
min = C[i]

7:
8:

end if

9:

if min > C[i] then

10:

min = C[i]

11:

j=i
end if

12:
13:

end for

14:

for z = 1 : z F lavors <= c[j] z do

15:

V ariety = 0

16:

P ackSize = z F lavors

17:

P ackaging()

18:

end for

19:

print N iceP ackings

20:

Algorithm 2 Packaging program


1: void P ackaging(){
2:

while variety < auxC[j] P ackSize do

3:

auxC[j] = C[j]

4:

varietyo ld = variety

5:

variety = 0

6:

single = 0

7:

while auxC[j] > 0 do


if (auxC[j]%P ackSize) == 0&&variety > variety old then

8:

single = auxC[j]/P ackSize F lavors

9:

auxC[j] = auxC[j] (auxC[j]/P ackSize) F lavors

10:
11:

end if

12:

if auxC[j]%P ackSize! = 0||variety <= varietyo ld then

13:

variety + +

14:

auxC[j] = auxC[j] z
end if

15:
16:

end while

17:

if single == 0||P ackaging2() == 0 then


break

18:
19:

end if

20:

if single! = 0&&P ackaging2() == 1&&auxC[j] >= 0 then

21:

N iceP ackings+ = single/F lavors

22:

variety+ = single P ackSize


end if

23:
24:

end while

25:

Algorithm 3 Packaging2 program


1: int P ackaging2(){
2:

single2=0;

3:

for i = 0 : F lavors do
if i! = j then

4:

if C[i] C[j]%P ackSize == 0&&C[i] C[j]! = 0 then

5:

singles2+ = (C[i] C[j])/P ackSize

6:
7:

end if

8:

if C[i] C[j]! = 0&&C[i] C[j]%P ackSize! = 0 then


return0

9:

end if

10:

end if

11:
12:

end for

13:

return1

14:

y que no sobre ning


un dulce.

3.2. Estructura y variables usadas


90

105
El algoritmo se encuentra estruc-

turado de tal forma que resuelve el Los tipos de variables utilizados son
problema en dos partes, la primera los siguientes:
parte, que es la llamada Packaging(),

int: La gran mayoria de vari-

resuelve la parte que trata de obtener


95

ables utilizadas son del tipo en-

el n
umero de maneras en las que se

tero, debido a que es capaz de

110

puede crear un Nice Packing, pero esta

usar 4 bytes de memoria, es de-

parte realiza esta funcion tomando en

cir 32 bits, y con este tipo de dato

cuenta solo el menor numero de dul-

es suficiente para realizar algunas

ces de un sabor, y es por eso que se


100

tareas del software.

necesita un segundo programa, el cual


115
se encarga de verificar si es posible en-

long int: algunas variables como

paquetar los demas dulces de sabores

single y variety son usadas como

con el tamao de paquete especificado

de tipo long int, debido a que


5

120

el numero que se pueden formas

es teniendo tres paquetes varia-

realizando las operaciones nece-

dos y nueve paquetes de un solo

sarias, pueden exceder los 4 bytes

sabor, donde cada paquete vari-

de memoria.

ado y de un solo sabor contienen


tres dulces, la segunda manera

150

int arrays: este tipo de variables

es obteniendo seis paquetes vari-

son usadas para guardar el nu-

ados y seis paquetes de un solo

mero de dulces de cada sabor en


125

File *:

130

sabor, y la tercera forma es obte-

arreglos unidimensionales.

niendo nueves paquetes variados


y tres paquetes de un solo sa-

155
este tipo de variable

es utilizado para crear la vari-

bor, por lo tanto en total ten-

able que contendr


a el nombre del

emos tres maneras de producir

archivo txt de donde los datos

un Nice Packing, con un tamao

ser
an extraidos.

de paquete de tres.

3.3. Ejemplo de soluci


on
El ejemplo de soluci
on sera explicado con una instancia de ejemplo que
contiene 3 sabores y cada sabor es de
135

Figure 1: Generando los 3 Nice Packings con

12 piezas de dulces, entonces es sabido

un tama
no de paquete de 3

de antemano que la solucion a este


problema genera 5 posibles formas de
realizar Nice Packings, entonces, el algoritmo funciona como se aprecia a
Con un tama
no de paquete de

160
140

continuaci
on.

seis, existe solo una manera de

145

Para generar los Nice Packings

generar un Nice Packing, y esta

con un tama
no de paquete de

es obteniendo tres paquetes vari-

tres, se puede observar que que

ados de seis dulces y tres paque-

con doce dulces, la primera man165

tes de un solo sabor con 6 dulces

era de obtener un Nice Packing

cada uno.
6

Figure 2: Nice Packing con un tama


no de paFigure 4: Programa ejecutado

quete de 6

Con un tama
no de paquete de
nueve existe tambien solo una
manera de generar Nice Packing,
170

4. Experimentaci
on y resultados

y es obteniendo un paquete variado de nueve dulces y tres paquetes de un solo sabor de 9 dulces
cada uno.

4.1. Dise
no experimental

185

Figure 3: Nice Packing con un tama


no de paquete de 9

La experimentiacion es ejecutada a
traves de un shell, donde es especifiTomando en cuenta lo mencionado cado el nombre del programa que sera
175

ejecutado, siguiendo del comando -file,

anteriormente, en la siguiente ima-

190
espacio, y el nombre de la instancia,
gen se puede apreciar los resultados

obtenidos, y mostrando los resultados ejemplo:


de la cantidad de dulces de los paque-

Input N 10000, txt, pero

en adicion, se le agrego una cuarta in-

tes variados y de un solo sabor para stancia, que le dice al programa donde
180

la primera manera de generar un Nice guardara los resultados, estos resultaPacking, y se muestra como los Nice
195
dos son guardados en un archivo txt,
Packings, pueden ser obtenidos con un en la siguiente figura es mostrado el
tamao de paquete diferente.

shell utilizado.
7

los resultados obtenidos son completamente correctos en relacion con las instancias de salida brindados.

Figure 6: Tiempo de ejecuci


on para resolver
Figure 5:

las instancias

shell utilizado para la experi-

mentaci
on

Como puede ser observado, el pro4.2. Car


acteristicas del Hardware 215y grama tiene un tiempo de ejecucion
del software
200

largo con la primera instancia, debido a que las maneras en que pueden

La siguiente tabla contiene las

ser obtenidas un Nice Packing con un

caracteristicas principales acerca del

tama
no de paquete que va de dos en

hardware donde fue implementado y


ejecutado el programa.

dos son mayores que con un tamao de

220

paquete mayor, es por esa razon que


Procesados

Dual core 2700 MHz

Cache L1

2 x 16KB 4-vias

Cache L2

1MB 16-vias

Memoria

4GB DDR3

solo con esta instancia el tiempo de ejecucion tarda 5071 segundos, y con las
demas instancias tiene un tiempo de
ejecucion de al rededor de los 450 se-

225

205

El software fue desarrollado en gundos aproximadamente.


lenguaje C, y el ejecutable tiene un
4.4. Conclusions

peso de 13.7KB.

Con el desarrollo y evolucion lle4.3. Results

vada a cabo con esta practica, se pudo

El resultado del tiempo de eje230


notar que si el algoritmo no es pro210

cuci
on es mostrado en la Figura 6, y

gramado de forma adecuada, podra


8

demorar demasiado tiempo, llevan- bien las tareas que debe de realizar, sin
dose incluso das de ejecucion para embargo pueden encontrarse maneras
resolver las instancias, por lo tanto es
245
de resolver este problema de una man235

importante encontrar formas alterna- era mas efectiva que requiera menor
tivas que permita optimizar el tiempo tiempo de ejecucion.
de ejecuci
on del programa e implementar tecnica para resolver este tipo Por lo tanto se concluye que el alde problemas, ya que muchos tipos
250
goritmo desarrollado aqu realizar bien

240

de programas pueden ser resueltos de

su funcion, sin embargo, no cabe en

distintas maneras, el algoritmo im-

duda en que pueden existir metodos

plementado aqu, realiza relativamente

que permitan optimizar este problema.

References
255

[1] Byron S. Gottfried SCHAUMs Outlines