miércoles, 16 de julio de 2008

Eficiencia

Wenas¡¡

Que tal el veranito? Espero que todos los animalitos hayais descansado y esteis haciendo cosas.... jejeje. Yo ahora estoy currando durante un mes. Este año me ha tocado oficinas (al final siempre acabo siendo la putilla de la empresa). La cuestion es, que hago el trabajo que nadie quiere hacer. Es un poco peñazo, pero consigo encontrarle el punto divertido, ya que de lo contrario me volvería loco.

Os describiré un poco las frikadas que me pasan por la cabeza


1. ORDENACION

Asi es, tengo que hacer ordenaciones. Es divertido cuando te dicen "ordena esa montaña de albaranes por numero de cliente, y para albaranes con el mismo cliente ordenalos por fecha"... porque tienes dos opciones: echarte a llorar o... aplicar el "bucket sort"!!! Ahi es cuando una de las secretarias pone cara de satisfaccion y me felicita por ordenar como ellas. Yo contento le pregunto si ella también aplica ese algoritmo, pero la cara que se le queda despues de la pregunta no mola xDD.

Ademas, creo que he optimizado su algoritmo. Pues solo ordeno por millares y centenas (hablamos de un orden de 5000 clientes), y como he notado que hay clientes frecuentes, en un paso de la ordenacion al separar, doy la vuelta a los albaranes para que queden revertidos por fecha (dado que al darles la vuelta los tendre un 95% aprox ordenados) :D


2. ACCESO A CARPETAS

En las oficinas tambien se clasifican recibos y facturas. Mi nivel de felicidad disminuye cuando me doy cuenta que desde el año pasado no se ha clasificado nada de nada y tengo una montaña inmensa de pequeños papelitos. Ojala fuera solo ordenarlos... la tarea que me asignan en este caso es:

1. Coge un recibo y mira el nombre
2. Encuentralo en alguno de los siguientes sitios
2.1 Proveedores contenidos en subcarpetas del cajon A
2.2 Proveedores contenidos en subcarpetas del cajon B
los cajones tienen dos subcajones que solo se abren en exclusion mutua. si abres el de arriba no abres el de abajo
2.3 Proveedores contenidos en archivador grande
2.4 Otros
3. Abre la carpeta de proveedor y encuentra el numero asociado
(en caso de archivador, estan ordenados alfabeticamente, y despues por numero descendentemente)

4. Grápalo
5. Repite hasta que se acaben

Teniendo en cuenta que hay recibos de todo el año... me entran ganas de llorar (más aun cuando la secretaria me dice "tienes trabajo para semana y media").

Peeeeero, tras pensar unos momentos, decido cambiar el sistema de ir uno por uno (completamente de locos), aprovechando que el contenido de las carpetas está ordenado y no tengo que buscar linealmente en todos lados

METODO MIO
----------------

Primero pierdo 20 minutos haciendome tres listas con nombres de proveedores: Cajon A, cajon B y Archivador. Como el acceso a los cajones es realmente costoso (levantarse, ir hasta alli, coger una carpeta, llevartela a la mesa, poner el recibo, dejarla otra vez), y encima hay recibos del mismo proveedor repetidos, hay que buscarse la manera de acceder a ellos lo menos posible.

Asi que primero distribuimos los recibos en cuatro montones (los cuatro tipos anteriores).

Para cada uno de los tres montones:
Primero aplicamos una ordenacion alfabetica (dividimos en dos montones: A-M y N-Z; y despues una ordenacion por selección alfabetica para cada uno de los dos).
Al no haber muchos proveedores, puedo permitirme ordenarlos numéricamente sobre la marcha en el caso de proveedores repetidos

Para el monton de "otros", aplicamos un bucket sort numérico (en este caso por orden descendente).

Tengo entonces tres montones ordenados alfabetica + numericamente y un monton numericamente.

Una vez tengo los cuatro montones ordenados segun mis criterios, es todo muchisimo mas rapido. Con mi metodo, obtengo lo siguiente:

- Como los tengo ordenados alfabeticamente, solo abro el cajon una vez
- Cojo una y solo una vez la carpeta de un proveedor, y la recorro una y solo una vez pues los tengo ordenados numericamente
- Para encontrar el primer recibo de la serie, se aplica una mini busqueda dicotomica hasta encontrarlo.
- Por tanto, me levanto solo tantas veces como proveedores diferentes tenga

Pero la mayor mejora se nota en el monton de otros

- Consigo grapar todos y cada uno de los recibos de una pasada. Es decir, la enorme carpeta de otros se abre y se recorre una sola vez¡¡¡ Asi que el coste es lineal en el numero de recibos: (grapar recibo + pasar hoja(s))*n

De otro modo el coste hubiese sido en el peor de los casos:

(levantarse)*n + (acceder a carpeta)*n + (grapar recibo)*n + (pasar hojas)*n(n+1)/2 + (levantarse y dejar carpeta)*n


Mmmmm de este modo he reducido el trabajo de 9 dias a 2 dias. Yeaah¡¡

Y boh, ya paro que os habré pegado una rallada del 15 ;). Enga, un saludo a todos!!!

Sr. Clorofila