Algoritmos en Informática
Quitab Al Jabr Al Mugabala es el culpable de todos los dolores de cabeza y
trasnochadas de cualquier estudiante de informática. Este hombre es
el creador del algoritmo. Y lo creó allá por el siglo IX. Mira si tuvo tiempo de
cambiar la faz de la tecnología.
Como la harina al pan, el algoritmo es el ingrediente imprescindible de la
informática. Cuando comienzas a desarrollar un software, lo haces a través
de algoritmos. Sin este, sería imposible escribir un programa de forma
coherente.
1. ¿Qué es un Algoritmo?
Un algoritmo te permite llevar a cabo una tarea o encontrar la solución a un
determinado problema a través de un flujo de instrucciones bien definidas y
estructuradas, que además deben estar en orden, y ser finitas, es decir tener
una solución o varias soluciones posibles.
Definidos un estado inicial y una entrada, si sigues las instrucciones
formuladas llegarás al estado final y encontrarás la solución al problema o
alcanzarás el objetivo definido.
2. Concepto de algoritmo
El término algoritmo proviene del idioma árabe clásico “ḥisābu
lḡubār”, luego trasformada al latín “Alborarismus”, que según los expertos
podría traducirse como “cálculo mediante cifras arábigas”.
El origen del vocablo se remonta a la Edad Media, más precisamente de la
mano del matemático Al_ Khwarizmi, en una zona de Asia Central hoy
conocida como Uzbekistán, en el Asia Central.
El algoritmo es una serie ordenada de procesos o pasos que deben
llevarse a cabo para alcanzar la solución a un problema
específico.
Los algoritmos pueden ser de distintos tipos, los de la vida diaria como
seguir las instrucciones para lavarse los dientes, poner en funcionamiento
un lavarropas, para resolver o llevar a cabo procesos más complicados como
el funcionamiento de un programa de computación.
Una de las características de los algoritmos es que te permiten definir una
serie de pasos a seguir que se deben realizar para alcanzar el resultado que
deseas, es decir un resultado previsible.
En este punto cabe destacar un ejemplo de uso de algoritmos: el software de
computadoras, el cual consta de instrucciones precisas para llevar a cabo un
procedimiento de manera siempre igual, pero escritas en un lenguaje de
programación.
Sin embargo, el uso de los algoritmos no se limita a las computadoras o a los
sistemas automatizados, ya que también en la naturaleza y en la vida los
algoritmos están bien presentes.
Podría considerarse como un algoritmo cualquier tarea que deba
ser llevada a cabo mediante instrucciones y reglas definidas para
ello.
Un ejemplo de ello sería lavarse las manos y tareas similares, como podrás
ver más abajo en este mismo post.
3. Tipos de algoritmos
En términos sencillos de entender, existen dos tipos de algoritmos.
Los primeros son los llamados “algoritmos convencionales”, los cuales son
aquellos que las personas realizan todos los días en su acontecer diario, con
el fin de llegar a cumplir un determinado objetivo. Ejemplo de ello es
hacerse el desayuno.
También tareas para solucionar problemas en la jornada laboral, como por
ejemplo programar lo que almorzará en base al tiempo que tiene disponible
o calcular a que temperatura hay que subir el termostato de la sala.
Aunque pueda parecer demasiado simple, lo cierto es que si nos llevamos del
significado de algoritmo, el cual básicamente dicta que se trata
de “secuencia lógica y finita de pasos que permite solucionar una
problemática o cumplir con un determinado objetivo” cualquier de los
ejemplos citados se ajustan al máximo al significado de algoritmo.
El otro tipo de algoritmos son los llamados “algoritmos computacionales”, los
cuales son aquellos que utilizan las aplicaciones y el software de
computadoras para realizar las tareas que les pedimos o las acciones
automáticas que realizan los dispositivos sin que lo solicitemos.
Nuevamente si tomas la definición de algoritmo, vamos que se cumplen
todas las condiciones requeridas.
Cabe destacar en este punto que todas las operaciones aritméticas y
algebraicas relacionadas con los algoritmos se engloba en una ciencia
llamada Algoritmia.
Si quieres saber más acerca de los algoritmos computacionales, te invitamos
a seguir leyendo el resto del post, en donde encontrarás importantes
definiciones acerca del tema.
4. Historia de los algoritmos
Si bien la mayoría de nosotros piensa que la implementación de
algoritmos es un hecho más relacionado con la aparición de las
computadoras modernas, lo cierto es que ya en tiempos muy antiguos se
utilizaban para resolver problemas matemáticos como por ejemplo raíces
cuadradas y multiplicaciones.
Los egipcios y babilonios ya usaban algoritmos, aun cuando no existían
todavía ni la base teórica ni el concepto de algoritmo como tal, siendo los
primeros quienes los usaban algoritmos muy parecidos a los de expansión
binaria.
La palabra algoritmo tiene su origen en el término árabe Al-Khwārizmī,
derivado de Quitab Al Jabr Al Mugabala.
Este es el nombre con que se conocía a un importante astrónomo y
matemático quien en el siglo IX dejara como legado numerosos tratados
acerca de conceptos acerca del cero y de la numeración hindú, y en los que
también trataba temas como el desarrollo y resolución de ecuaciones de
primer y segundo grado con un número limitado de procesos.
Estos tratados fueron de mucha ayuda para desarrollar enunciados para
sumas, restas, multiplicaciones y divisiones de números decimales.
Si bien Al-Khwārizmī no fue el creador del primer algoritmo, ya que como
mencionábamos ya los egipcios y babilonios los utilizaban, aunque sin
saberlo, se considera que el matemático árabe fue en el primero en
utilizarlos con un orden.
Pero los algoritmos del modo en que los conocemos y empleamos hoy, no se
utilizaron hasta bien entrado el siglo VXIII.
El salto más importante de los algoritmos y su relación con la
computación ocurrió en el año 1842, de la mano de Charles Babbage, con su
máquina analítica y de Ada Lovelace, creadora del primer algoritmo
destinado a ser procesado por una máquina.
Lamentablemente, Charles Babbage no pudo terminar su máquina
analítica, por lo tanto, el algoritmo creado por Ada Lovelace no pudo llegar a
implementarse nunca. Pero el trabajo llevado a cabo por ambos fue de gran
inspiración para todos los investigadores que llegaron después.
El otro gran salto de los algoritmos aplicados a las ciencias
computacionales ocurrió unos cuantos años más tarde, precisamente en el
año 1900, cuando el matemático David Hilbert declaró algunas
consideraciones fundamentales acerca de la ciencia de las matemáticas.
Esto llevó a nuevos puntos de vista que más tarde serían de mucha
importancia para el desarrollo de nuevas tecnologías, como por ejemplo los
trabajos llevados a cabo por científicos como Alonzo Church, Alan Turing,
Stephen Kleene o Emil Post.
Finalmente, las décadas de 1950 y 1960 fueron testigo del nacimiento de
muchos lenguajes de programación, compiladores y sistemas operativos, que
nos llevaron a donde estamos hoy, todo gracias al trabajo realizado durante
siglos por matemáticos y científicos en torno a los algoritmos.
5. Alan Turing y los algoritmos
El científico británico Alan Turing (1912-1954), fue generador de los
conceptos de algoritmo y computación: la famosa máquina de Turing.
Turing es conocido, en el campo de la inteligencia artificial, por ser el
creador del test de Turing, mediante el cual es posible juzgar la inteligencia
de una máquina, analizando si sus respuestas son imposibles de distinguir
de las de un ser humano.
Gracias a sus aportes, fue posible desarrollar la programación y
computación de la actualidad.
En uno de sus trabajos dedujo que existen varias cosas que los algoritmos no
pueden resolver: ¿Es posible que un algoritmo calcule si un programa de una
computadora se "colgará" en algún momento? ¿o seguirá corriendo para
siempre?
La respuesta es: No.
Turing, allá por 1936 probó que ese algoritmo no puede existir. Escribió que
no existe una manera de predecir consistentemente el "cuelgue" de una
computadora. Tampoco es posible evitarlo.
6. El algoritmo de Euclides
En matemáticas, el algoritmo de Euclides, es un método eficiente para
calcular el máximo común divisor de dos números enteros, también conocido
como el máximo factor común o el máximo común divisor.
Lleva el nombre del matemático griego Euclides, quien lo describió en los
Libros VII y X de sus Elementos.
En su forma más simple, el algoritmo de Euclides comienza con un par de
números enteros positivos y forma un nuevo par que consiste en el número
más pequeño y la diferencia entre los números más grandes y más
pequeños.
El proceso se repite hasta que los números son iguales. Ese número
entonces es el máximo común divisor del par original.
La descripción más antigua que se conserva del algoritmo euclidiano se
encuentra en Euclid's Elements, lo que lo convierte en uno de los algoritmos
numéricos más antiguos que aún se usan comúnmente.
7. Algoritmo computacional
Todos hemos escuchado la palabra “Algoritmo” relacionada con las ciencias
de la computación, como por ejemplo cuando se habla del “algoritmo de
Google” o del “algoritmo de Facebook”.
Esto es porque nada sucede en computación sin un diagrama que definen
una serie de pasos, los que definitivamente conforman un algoritmo.
En este sentido, el algoritmo informático es el elemento fundamental de
cualquier programa de computación, y no está relacionado con el lenguaje de
programación utilizado para desarrollarlo, sino en los pasos que deben
realizarse para alcanzar el objetivo, es decir el conjunto de instrucciones y
pasos desarrollados para llevar a cabo la tarea encomendada al software.
Esto en pocas palabras significa que primero el desarrollador de software
debe diseñar el diagrama de flujo, escribir el algoritmo y luego plasmarlo en
el lenguaje de programación que más se adecue a sus propias necesidades y
a los requerimientos de los clientes.
Con el ello, el ingeniero en informática se asegura tener una base sólida
desde la cual comenzar a crear una metodología con escenarios bien
definidos y finitos, es decir que deben finalizar en algún momento de su
recorrido.
Básicamente el uso de un algoritmo en computación nos ofrece la posibilidad
de hallar una solución genérica a un determinado problema, y nos va a
permitir reutilizarlo cada vez que sea necesario para lograr el objetivo
deseado.
8. Características de un algoritmo
Hasta este punto hemos hablado de los diferentes tipos de algoritmos y sus
orígenes, pero nos falta conocer un punto más que importante: ¿Cuáles son
las características fundamentales que debe cumplir todo algoritmo?
Es por ello que debajo de estas líneas encontrarás los puntos fundamentales
que debe cumplir un proceso para ser considerado un verdadero algoritmo.
Lo primero que debes considerar es que un algoritmo debe ser preciso:
es por ello que se debe indicar el orden exacto de ejecución de cada
paso implicado en el proceso.
Otro punto más que importante a considerar es que un algoritmo debe
estar perfectamente definido. Esto significa que en el caso de
ejecutarse el mismo más de dos veces, siempre se debe obtener el
mismo resultado independientemente de la cantidad de veces que se
siga.
También es necesario saber que un algoritmo debe ser finito, es decir
que el algoritmo debe culminar en algún momento de su ejecución,
expresado en otras palabras, debe tener un número de pasos bien
determinados hasta concluir con su tarea.
Asimismo, un algoritmo tiene que ser legible. Esto significa que el
texto que describe debe ser claro y conciso, de una manera tal que
permita su comprensión inmediata, es decir sin procedimientos
rebuscados o poco claros.
Por último, un algoritmo debe estar definido en tres partes
fundamentales, las cuales son: Entrada, Proceso y Salida. Si quieres
saber más sobre este tema, más adelante en este mismo post
encontrarás información al respecto.
9. Características de los algoritmos computacionales
Originariamente, la idea de llevar este concepto del ámbito de las
matemáticas al campo de la incipiente informática fue propuesto por el
matemático inglés Alan Turing, quien sentó las bases para definir los
elementos básicos de un algoritmo aplicado a las ciencias de la computación,
los cuales debían ser los siguientes:
Una secuencia de pasos limitada, que deben estar definidas
claramente. Asimismo estos pasos deben ser independientes el uno del
otro.
Un agente, que puede ser en algunos casos un operador humano y en
otros casos parte del propio programa es el actor que tiene como tarea
aplicar cada una de las etapas del proceso en un punto específico del
recorrido.
Este agente debe tener la capacidad de interpretar
las instrucciones operacionales y simultáneamente tener la posibilidad
de almacenar la información suministrada por el propio programa.
El resultado obtenido cuando se realizan las determinadas operaciones
del programa siempre ha de comportarse igual, en cada paso de la
operatoria, teniendo en cuenta por supuesto la configuración de los
datos iniciales de entrada.
La operación siempre debe finalizar con un resultado conciso.
En este punto cabe destacar que existen casos en los cuales el procedimiento
requiere que se ofrezca un resultado concreto, y otros casos en los cuales no
es necesario.
Es por ello que los algoritmos repetitivos o irregulares que no culminan son
tan habituales en la programación de aplicaciones para computadoras.
El mejor ejemplo de esto son los sistemas operativos modernos como
Windows, Linux o el SO de las computadoras Mac, los cuales deben seguir
en ejecución para permitir que las demás aplicaciones y procesos de la
computadora puedan seguir cumpliendo con su función o tarea.
10. Partes de un algoritmo
A partir de este punto, conoceremos las reglas básicas de las partes que
deben conformar un algoritmo para ser considerado como tal.
Básicamente, los algoritmos deben estar compuestos por tres partes
principales que son entrada, proceso y salida, independientemente de
tratarse de algoritmos computacionales, algoritmos no computacionales,
algoritmos cualitativos o algoritmos cuantitativos.
Aquí abajo encontrarás las características que debe tener cada fase de un
algoritmo.
10.1. Entrada
Esta fase del algoritmo se corresponde con los valores de entrada con que se
debe alimentar al mismo. Básicamente se trata de la información que se
entrega al algoritmo, es decir, los valores de datos con los que tendrá que
ofrecer un determinado resultado.
10.2. Proceso
La segunda fase de un algoritmo ocupa los cálculos necesarios para procesar
los datos con los que hemos alimentado al algoritmo, es decir que en este
punto se procesará la información entrega a la entrada del algoritmo, y con
la cual se debe llegar al resultado esperado.
10.3. Salida
La tercera y última fase de un algoritmo es donde se obtiene el resultado de
la operación, es decir la transformación de los datos que fueron
proporcionados en la fase de entrada y desarrollados en la fase de proceso.
11. ¿Cómo hacer un algoritmo?
En el caso que necesites realizar tu propio algoritmo para poder resolver
problemas o mejorar algún proceso en tu actividad, lo puedes llevar a cabo
de manera bastante sencilla, ya que lo único que tienes que hacer es poner
claro qué necesitas y cómo lo puedes resolver.
Para ello debes realizar la serie de pasos necesarios y sus derivaciones para
poder llegar al resultado esperado del problema que tienes entre manos.
Los pasos para definir y concretar tu algoritmo son los siguientes:
Primer paso: Análisis previo del problema o necesidad. Lo primero que
tienes que hacer, antes de comenzar con el desarrollo de cualquier
algoritmo es llevar a cabo un análisis pormenorizado de la situación o
problema.
Segundo paso: Definir los requerimientos. En este paso se debe definir
exactamente el problema que tengas que solucionar y desglosarlo,
incluyendo todas las derivaciones que puedan surgir.
Tercer paso: La identificación de los módulos. En este paso, identificar
claramente los módulos es tan importante como la identificación de los
requerimientos. Esto es así debido a que identificar correctamente los
módulos nos va servir para simplificar considerablemente la puesta en
marcha de los pasos del algoritmo correcto para tu problema, y que has
identificado en el paso anterior.
Cuarto paso: La creación del algoritmo. En este punto debes
asegurarte que el algoritmo cumpla con todos los requerimientos
adecuados para llevar a cabo la función encomendad. Esto es
similar tanto para los algoritmos no computacionales como para los
algoritmos computacionales. En el caso de tratarse de un algoritmo
computacional, además deberá cumplir con ciertas características para
poder luego implementarse en cualquier lenguaje de programación.
Quinto paso: La implementación del algoritmo. En el caos de los
algoritmos computacionales, la implementación de los mismos se debe
llevar a cabo traduciendo el mismo a un lenguaje de programación con
el propósito de que cualquier computadora pueda interpretar sus
instrucciones y enviar a su hardware la información necesaria para
poder completar los pasos correspondientes y de esta manera obtener
el resultado esperado.
Sexto paso: Creación de las herramientas para llevar a cabo el
algoritmo. En este último, y si pudiste cumplimentar correctamente
con todos los pasos anteriores, ya estarás en posición para poder crear
las herramientas necesarias para poder ejecutar el algoritmo
desarrollado. En el caso tratarse de un algoritmo
computacional, puedes desarrollar a través de cualquier lenguaje de
programación una aplicación para poder llevarlo a cabo, la cual
contará con una serie de instrucciones que ordenadas una detrás de la
otra podrán representar el algoritmo que has diseñado y poder ofrecer
una solución a los requerimientos identificados. En los casos en que se
trate de un algoritmo no computacional, puedes desarrollar lo
necesario teniendo en cuenta los pasos que debe seguir el
algoritmo, como por ejemplo una línea de producción.
12. Ejemplos de algoritmos
Los algoritmos pueden aplicarse en cualquier campo, y no son para nada
ajemos a la vida diaria, es decir que no son sólo cálculos que se aplican en
determinados campos científicos, ya que en la vida diaria puedes encontrar
decenas de ejemplos de algoritmos, los cuales la mayoría de las veces pasan
desapercibidos para todos.
Un ejemplo de algoritmo en la vida diaria es el proceso de digestión, el cual
es básicamente un concepto de algoritmo con el que vivimos todos los
días sin que tengamos que conocer implícitamente su definición para que
ocurra.
Esto significa que para que puedas realizar el proceso de digestión todos los
días no es necesario que sepas cómo éste funciona ni los actores implicados
en el procedimiento.
Los algoritmos se ponen en marcha infinidad de veces el día, pero nos hemos
acostumbrado a ellos o quizás simplemente ignoramos que lo son, debido a
que no estamos familiarizados con el concepto de algoritmo.
Un hecho que debemos destacar es que los algoritmos en la vida diaria, no
difieren demasiado de los algoritmos que se utilizan en las ciencias de la
computación.
En el siguiente ejemplo, proponemos comparar el algoritmo descripto con
alguna situación dada en la vida real. ¡Te aseguramos que te sorprenderá el
resultado!
Para el ejemplo hemos realizado un algoritmo dónde se determina si una
persona puede ingresar a una atracción mecánica en un parque de
diversiones.
Comienzo
Paso 1 Escribir “¿Cuál es la edad?”
Paso 2 Leer “Edad”
Paso 3 Escribir “¿Cuál es la altura?
Paso 4 Leer “Altura”
Paso 5 Si (“Edad” >= 18 “Altura” >= 148) entonces
Paso 6 Escribir “Puede ingresar”
Paso 7 En caso contrario “si no”
Paso 8 Escribir “No puede ingresar”
Paso 9 Finalización de “Si”
FINAL
El algoritmo en la programación
¿Los algoritmos te parecen complicados? Pues sí, pueden serlo, y
complicarse aún más. Pero si quieres ingresar a una carrera de informática,
es preciso que entiendas a la perfección el concepto de algoritmo.
Los algoritmos son el pan de cada día de la computación, y nunca está de
más asegurarse de aprender todo lo que puedas sobre ellos. Aquí podrás
hacerlo!
1. Que es un algoritmo en la programación
En la actualidad, la palabra algoritmo se encuentra muy relacionada con el
ámbito de la informática y la programación. Este tipo de algoritmo se llama
algoritmo informático, y son esenciales en la actividad.
Los algoritmos en informática se utilizan para resolver un problema en un
programa antes de llevarlo a un lenguaje de programación, es decir pulir
una idea antes de su desarrollo final. Esto evita errores y problemas
posteriores.
Concretamente, un algoritmo informático podría definirse como una
secuencia de instrucciones finitas que ejecutan procesos que dan respuesta a
problemas puntuales.
2. Representación de un algoritmo en la
programación
Existen varias maneras de poder representar un algoritmo. Cabe destacar
que en este caso puedes emplear la forma que mejor se adapte al trabajo que
tú hagas.
Las más conocidas de ellas son:
Mediante el código fuente, a través de un lenguaje de programación.
Mediante el llamado pseudocódigo, del cual más abajo hay más
información.
También puedes representar un algoritmo mediante un diagrama de
flujo.
2.1. Lenguaje natural
Existen algoritmos escritos en lenguaje natural. Es decir todo lo contrario a
la estructuración rígida de los lenguajes de programación. La ejecución
del algoritmo escrito en lenguaje natural sigue un proceso común y lógico.
Esto se hace describiendo de forma textual el paso a paso de cada uno de los
procesos a llevar a cabo para resolver el problema dado.
Si bien puede parecer más fácil, lo cierto es que los algoritmos que usan el
lenguaje natural tienen ciertos inconvenientes. Como por ejemplo:
La ambigüedad.
La casi nula estandarización.
El tamaño del algoritmo.
Todos estos factores tienen altas probabilidades de provocar errores, lo que
significa que quizás no pueda ser interpretado correctamente por la
computadora a la hora de ser escrito en un lenguaje de programación.
2.2. Pseudocódigo
Básicamente, el pseudocódigo es una mezcla de lenguaje de programación y
programación natural. Este se emplea para llevar a cabo del diseño y
desarrollo de un software, incluidos aquellos de utilizan la inteligencia
artificial. Es decir que el pseudocódigo es un lenguaje de especificaciones de
algoritmos.
El pseudocódigo es la representación textual de los pasos que debe seguir un
algoritmo para dar solución a un problema determinado. El seudocódigo
para ello utiliza palabras que determinan el proceso que se debe llevar a
cabo.
Cabe destacar que existen combinaciones de diferentes métodos de
representación de algoritmos, como por ejemplo el diagrama Nassi-
Shneiderman, el cual combina la representación textual del pseudocódigo
con la representación gráfica del diagrama de flujo, y del cual se habla más
adelante.
Si quieres saber más sobre pseudocódigo, en este enlace encontrarás mucha
información interesantísima.
2.3. Diagramas de flujo
Podría definirse a un diagrama de flujo como un método útil para describir
un proceso, un sistema o un algoritmo informático, aunque también se usa
en otras disciplinas como la psicología.
El diagrama de flujo es utilizado para mostrar procesos complejos en
diagramas claros y fáciles de comprender para todos. Para ello, en los
diagramas de flujo se emplean formas geométricas como rectángulos,
diamantes, óvalos, y otras.
Estas se usan para definir el tipo de procedimiento a llevar a cabo. Para
interconectar cada una de estas acciones, se utilizan flechas conectoras, las
cuales establecen el flujo y la secuencia.
3. Lenguajes de programación
En forma muy sencilla, se puede decir que un lenguaje de programación es
un conjunto de símbolos y códigos que se utilizan para orientar la
programación de estructuras en el desarrollo de programas de
computadoras.
Con un lenguaje de programación, podrás controlar las acciones que realiza
una computadora o dispositivo de acuerdo a las funciones que hayas definido
en el programa.
Los lenguajes de programación son lenguajes formales, que te permitirán,
cuando estés programando, escribir un conjunto de órdenes o serie de
instrucciones, las que contienen valores de entrada y algoritmos, los cuales
luego de ser compilados, se convertirán en un programa de computación.
4. Diagramas Nassi-Shneiderman
Los diagramas Nassi-Schneiderman, que fueran desarrollados por la dupla
de investigadores Isaac Nassi y Ben Shneiderman, a principios de la década
de 1970, y es una técnica para crear algoritmos.
Básicamente, combina las propiedades del lenguaje usado en el
pseudocódigo con las representaciones gráficas típicas del diagrama de
flujo. Toma su forma de un diseño de tipo Top-Down, es decir de los más
complejo a lo más simple. Estas son estrategias de procesamiento de
información muy relacionadas con la programación dinámica.
A este tipo de diagramas también se les conoce como Estructograma, ya que
es muy útil para representar la estructura de los programas. También se lo
conoce como diagrama N-S, o diagrama de Chapin.
5. Un algoritmo no es un programa
Uno de los errores más importantes de quienes comienzan recién en
una carrera de informática, es pensar que un algoritmo en sí es un
programa. No. Básicamente un algoritmo es un conjunto de instrucciones
ordenadas, finitas y delimitadas.
Un algoritmo es creado con el propósito de mostrar de forma visual cómo
deberá realizarse la programación para que un dispositivo o computadora
realice una tarea. En cambio un programa de software, es una secuencia
lógica de instrucciones que sirven para que un dispositivo o computadora
lleven a cabo una tarea determinada.
Estas secuencias lógicas se determinan en el lenguaje de programación, en
base al estudio de los algoritmos usados en su desarrollo. Esta es la gran
diferencia entre un algoritmo y un programa de computadora.