viernes, 25 de febrero de 2011

HTG explica: que son los algoritmos de computadoras y como funcionan?

No caiga en el error de pensar que ya sabe que son, eso es lo que ud piensa. A veces a fuerza de haber empleado o repetido determinadas cosas o conceptos creemos que no los olvidaremos, pues no siempre es así, y pasarse de tanto en tanto por las teorías básicas es muy útil. Mas de una vez se sorprenderán pensando para si mismos "ya esto lo había olvidado". Así pues aquí se los traigo, creo que es válido, tanto como el resto de los temas que aquí hemos tratado antes, y con mas razón porque nos regresa a las bases, además de que contrariamente a lo que muchos creen, todos seguimos algoritmos para todo, aunque no lo notemos. Dicho esto, aquí les va el original es de HTG y lo pueden encontrar aquí, provecho.

HTG explica: que son los algoritmos de computadoras y como funcionan?
A menos que usted este involucrado en las matemáticas o la programación, la palabra "algoritmo" podría estar en griego para usted, pero es uno de los bloques de construcción de todo lo que está utilizando para leer este artículo. Aquí está pues, una explicación rápida de lo que son y cómo funcionan.
Renuncia de responsabilidad: No soy profesor de ciencias matemáticas o computadoras, así que no todos los términos que utilizo son de carácter técnico. Eso es porque trataré de explicar todo en español simple para las personas que no están muy cómodas con las matemáticas. Dicho esto, hay algo de matemáticas involucradas, y eso es inevitable. Geeks Matemáticos, no duden en corregirme o explicar mejor en los comentarios, pero por favor, manténgalo simple para los noversados matemáticamente entre nosotros.

¿Qué es un algoritmo?
La palabra "Algoritmo" tiene una etimología similar a "álgebra", salvo que esto se refiere al matemático árabe en si mismo, al-Khwarizmi (sólo un dato interesante). Un algoritmo, para los no-programadores entre nosotros, es un conjunto de instrucciones que toman una entrada A y proporcionan una salida, B, que cambia los datos involucrados de alguna manera. Los algoritmos tienen una amplia variedad de aplicaciones. En matemáticas, pueden ayudar a calcular funciones de los puntos en un conjunto de datos, entre muchas cosas más avanzadas. Aparte de su uso en la programación en sí, juegan un papel importante en cosas como la compresión de archivos y el cifrado de datos.

Un conjunto básico de instrucciones.
Digamos que su amigo se va a encontrar con ud en una tienda de abarrotes y debe guiarlo hacia donde ud está. Usted dirá cosas como "entra por la puerta lateral derecha", "pasa la sección de pescado a la izquierda", y "si ves la lechería, ya pasaste a mi lado." Los algoritmos funcionan así. Podemos utilizar un diagrama de flujo para ilustrar instrucciones sobre la base de criterios que sabemos de antemano o encontraremos a lo largo del proceso.

Desde el START, descenderemos hacia abajo, y en función de lo que ocurra seguiremos el "flujo" hacia el resultado final. Los diagramas de flujo son herramientas visuales que pueden representar de un modo más comprensible el conjunto de instrucciones que utilizan los ordenadores. Del mismo modo, los algoritmos ayudan a hacer lo mismo con modelos mas basados en las matemáticas.

Gráficos
Vamos a utilizar un gráfico para ilustrar las diferentes formas en que se pueden dar instrucciones.
Podemos expresar este gráfico como una conexión entre todos sus puntos. Con el fin de reproducir esta imagen, podemos dar una serie de instrucciones a otra persona.

Método 1
Podemos representar esto como una serie de puntos, y la información seguiría el modelo estándar del gráfico = {(x1, y1), (x2, y2), ..., (xn, yn)}.

gráfico = {(0,0), (3,0), (3,3), (5,5), (7,10), (8,7), (9,4), (10,1) }

Es muy fácil trazar cada punto, uno tras otro, y conectarlo con el punto anterior. Sin embargo, imagine un gráfico con un millar de puntos o segmentos múltiples todos apuntando en diferentes direcciones. Dicha lista tendrá una gran cantidad de datos, ¿no? Y luego tener que conectar cada uno, uno a la vez, puede ser un dolor.

Método 2
Otra cosa que podemos hacer es definir un punto de partida, la pendiente de la línea entre éste y el siguiente punto, e indicar dónde esperar el siguiente punto usando la forma estándar del gráfico = {(punto de partida}, [m1, x1, h1 ], ..., mn [, xn, hn]}. Aquí, la variable 'm' representa la pendiente de la línea, "x" representa la dirección del conteo (sea x o y), y 'h' le indica que tanto contar en dicha dirección. También puede recordar marcar un punto después de cada movimiento.

gráfico = {(0,0), [0, x, 3], [0, y, 3], [1, x, 2], [2,5, x, 2], [-3, x, 1], [-3, x, 1], [-3, x, 1]}

Usted terminará con la misma gráfica. Podrá ver que los tres últimos términos en esta expresión son los mismos, por lo puede reducirlos diciendo simplemente "repite esto tres veces" de alguna manera. Digamos que cada vez que vea la variable "R" aparecer, significará repetir lo último. Podemos hacer esto:

gráfico = {(0,0), [0, x, 3], [0, y, 3], [1, x, 2], [2,5, x, 2], [-3, x, 1], [R = 2]}

¿Qué tal si los puntos individuales no importan, y sólo importa la gráfica en si misma? Podemos consolidar las tres últimas secciones de este modo:

gráfico = {(0,0), [0, x, 3], [0, y, 3], [1, x, 2], [2,5, x, 2], [-3, x, 3]}

Acortamos un poco las cosas respecto a como estaban antes.

Método 3
Vamos a tratar de hacer esto de otra manera.

y = 0, 0 <= x <= 3
x = 0, 0 <= y <= 3
y = x, 3 <= x <= 5
y = 2.5x - 7.5, 5 <= x <= 7
y =- 3x + 29, 7 <= x <= 8
y =- 3x + 29, 8 <= x <= 9
y =- 3x + 29, 9 <= x <= 10

Aquí lo tenemos en términos puramente algebraicos. Una vez más, si los puntos en sí no tienen importancia y sólo es importante la gráfica, podemos consolidar los tres últimos elementos.

y = 0, 0 <= x <= 3
x = 0, 0 <= y <= 3
y = x, 3 <= x <= 5
y = 2.5x -  7.5,  5 <= x <= 7
y =- 3x  + 29,  7 <= x <= 10

Ahora, el método a elegir depende de tus habilidades. Tal vez usted se lleva bien con las matemáticas y la representaciones gráficas, así que elige la última opción. Tal vez usted es bueno navegando, por lo que eligirá la segunda opción. En el ámbito de las computadoras, sin embargo, ud estará haciendo diferentes tipos de tareas y la capacidad del equipo no cambia realmente. Por lo tanto, los algoritmos están optimizados para las tareas que completan.
Otro punto importante a destacar es que cada método se basa en una clave. Cada conjunto de instrucciones es inútil a menos que sepa qué hacer con ellos. Si usted no sabe que se supone que grafique cada punto y los conecte entre ellos, la primera serie de puntos no significarán nada. A menos que sepa lo que significa cada variable en el segundo método, no sabrá cómo aplicarlas, al igual que la clave de un sistema de cifrado. Esa clave es también una parte integral del uso de los algoritmos, y a menudo, esta clave se encuentra en la comunidad o a través de un "estándar".

Compresión de Archivos
Cuando se descarga un archivo .zip ud extraerá los contenidos de manera que pueda utilizar lo que sea que hay dentro de el. Hoy en día, la mayoría de sistemas operativos pueden bucear dentro de los archivos .Zip como si fueran carpetas normales, haciéndolo todo que en el background. En mi equipo con Windows 95 hace más de una década, tenía que extraer todo manualmente antes de que pudiera ver algo más que los nombres de los archivo de adentro. Esto se debe a que lo que se almacena en el disco como un archivo .Zip no se encontraba en una forma utilizable. Piense en un sofá cama plegable. Cuando usted quiere usarlo como cama, tiene que quitar los cojines y se desplegarlo, lo que ocupará más espacio. Cuando no lo necesita, o si desea transportarlo, lo puede volver a doblar.
Los algoritmos de compresión son diseñados y optimizados específicamente para este tipo de archivos a los que están dirigidos. Los formatos de audio, por ejemplo, cada uno emplea una manera diferente de almacenar los datos, que cuando son descifrados por el códec de audio, darán un archivo de sonido similar a la forma de onda original. Para obtener más información sobre las diferencias, echa un vistazo a nuestro artículo anterior, ¿Cuáles son las diferencias entre todos los formatos de audio? Los formatos de audio sin pérdidas y los archivos zip tienen una cosa en común: ambos ofrecen los datos originales en su forma exacta luego del proceso de descompresión. Los códecs de audio con pérdidas utilizan otros medios para ahorrar espacio en disco, tales como el recorte de las frecuencias que no son capaces de ser escuchadas por el oído humano y el suavizado de las formas de onda en secciones para deshacerse de algunos detalles. Al final, si bien no pueda ser capaz de escuchar realmente la diferencia entre un MP3 y una pista de CD, definitivamente hay un déficit de información en el primero.

Cifrado de datos.

Los algoritmos también se utilizan para asegurar datos o líneas de comunicación. En lugar de almacenar los datos de modo que utilicen menos espacio en disco, se almacenan en una forma que los hace indetectable por otros programas. Si alguien le roba su disco duro y lo revisa, puede acceder a los datos incluso luego de que son eliminados los archivos, porque los datos en sí siguen ahí, aunque se hayan borrado los índices en el disco. Cuando los datos son encriptados, lo que se almacena no se parece a lo que es en realidad. Por lo general, luce como algo aleatorio, como si a lo largo del tiempo la información se hubiera fragmentado. Usted también puede almacenar datos y hacer que parezca como otro tipo de archivo. Los archivos de imágenes y de música son buenos para esto, ya que pueden ser bastante grandes sin levantar sospechas, por ejemplo. Todo esto se hace mediante el uso de algoritmos matemáticos, que toman algún tipo de entrada y lo convierten en otro tipo muy específico de salida.  Para obtener más información sobre cómo funciona el cifrado, echa un vistazo a: ¿Qué es la encriptación y cómo funciona?

Los algoritmos son herramientas matemáticas que proporcionan una variedad de aplicaciones en la informática. Ellos trabajan para proporcionar una ruta entre un punto de partida y un punto final de una manera consistente, y proporcionar las instrucciones a seguir. Conoce más de lo que aquí exponemos? Comparta sus explicaciones en los comentarios!