Cuestión de Compromiso

En el mundillo de la informática existen ideas de lo más curioso.

Problemas que tienen solución, como por ejemplo el factorial de un número, a veces no se pueden resolver. ¿Por qué? Empecemos por el principio.

El factorial de un número se define como la multiplicación de todos los enteros hasta ese número, y se escribe como n!, siendo ese n el número en cuestión. Si alguien tiene una pregunta tipo ¿por qué? a estas alturas, lo envío a mi antiguo colegio, junto con esos/as gilipuertas que no entendían lo que es una definición. Si digo que algo se llama Paco, no hay nada que entender, le pongo ese nombre porque se me sale de la punta de la...

Bueno, que me desvío del tema. Como ejemplo, diremos que 4! (el factorial de 4) es 1*2*3*4 = 24, es decir 4! = 24.

Pues bien, hacer un programa que calcule el factorial de un número es la mar de sencillo, lo hay hasta recursivo, que es como hacer magia:

factorial(n){
return n*factorial(n-1)
}

Es decir, el factorial de un número es ese número por el factorial del anterior. Mola, ¿no? ¡Qué fácil!

Pues ya está, ya tenemos solución, oye, para cualquier número es darle y esperar.

El problema es que, por ejemplo, 1000000! es un poco largo de calcular, vas a tardar un buen rato... tanto que no verás el resultado, seguramente...

Bueno, puede decir alguno, es que eso tarda mucho, pero tengo otra solución más rápida:

Guardamos en un registro los valores que vayan tocando:

1, 1*2 = 2, 2*3 = 6, 6*4 = 24, 24*5 = 120 ...

Es decir, no calculas todo, sino que vas guardando el valor acumulado y así se gana en rapidez.

Ok, aquí llegamos a la madre del cordero, por un lado podemos tardar mucho, por otro, para tardar menos, podemos guardar resultados; es decir, elegimos entre espacio requerido (en memoria física del ordenador) o el tiempo que se tarda. No se pueden elegir ambas cosas, si quieres que algo acabe más rápido o sea más sencillo o más lo que sea, siempre tienes que gastar más memoria.

Hemos llegado al compromiso entre espacio y velocidad, y no, no se trata del tiempo (espacio = velocidad * tiempo), sino de que cuanto más quieras de uno, más se jode lo otro.

En general las cosas se pueden hacer de manera que ocupe el espacio necesario, las máquinas han mejorado mucho, pero ¿a qué viene todo este lío?

A que todas las mañana tengo que elegir entre levantarme antes para venir a trabajar en autobús o dejarme la pasta para aparcar mi coche, ya ves tú, otro compromiso.

Y en este caso, haciendo la analogía pertinente, la memoria (la pasta) es el criterio primordial...

2 comentarios:

kancerbero dijo...

tú eres ingeniero, no?

A parte de muy friki, claro.

xD

Gorka dijo...

Hola!

pues sí, uno tiene estas cosas, pero para friki de verdad, pero friki, friki, friki, alguno de estos dos:

La Frikipedia

La FrikiGueb
(permitir ventanas emergentes...)

:S

Salu2!