Todos los programas, aplicaciones y software modernos se basan en algoritmos informáticos, que son esencialmente la aplicación de pensamiento lógico matemático para resolver problemas. El papel de los algoritmos en programación es tan importante que se vuelve la base principal del estudio de esta ciencia. ¿Sabes qué son y cómo se hacen? Veamos.
Las palabras más buscadas en Google en español por países:
España, México, Colombia, EE UU, Argentina… (Lista actualizada)
Un algoritmo es una serie de pasos ordenados que tienen como meta solucionar un problema concreto o conseguir un objetivo definido a través de unos valores iniciales o punto de partida.
Entonces… ¿qué son los algoritmos en informática? Son un grupo de pasos o instrucciones que pueden ser traducidas a lenguaje de programación (un idioma intermedio entre las máquinas y el humano), que se implementan con la finalidad de que los ordenadores realicen determinadas tareas.
Todos los programas de computador vendrían a ser grupos de algoritmos informáticos que contienen las instrucciones que el ordenador necesita para realizar su ejecución.
El concepto de algoritmo en informática no se debe confundir con una codificación de lenguaje. El algoritmo son los pasos a seguir mientras que el lenguaje (o tipo de código) es el “idioma” en el que está escrito.
Si bien la mayoría de las personas entiende a los algoritmos como un elemento netamente computacional o matemático de la era moderna, la realidad es que ya se practicaban formas primitivas de algoritmos bastante sofisticados en el antiguo Egipto y Mesopotamia.
En la transición de la era antigua a la compresión moderna de los algoritmos informáticos destacan los escritos de Al-Juarismi, latinizado comúnmente como Algorithmi, un matemático y astrónomo quien en su escrito: Kitab al-Jabr wa-l-Muqabala explica la solución de problemas matemáticos desde un punto de vista ordenado, en números determinados de pasos.
Las implicaciones de estos textos cuyos orígenes se remontan a 813 años d.C. sentaron las bases filosóficas para el desarrollo de métodos de resolución de problemas de lógica matemática.
No fue hasta varios siglos más tarde que el primer algoritmo destinado para su procesamiento en una máquina naciera (el primer algoritmo informático) diseñado por la célebre Augusta Ada King o como mejor se le conocía, Ada Lovelance, Condesa, matemática, escritora y la primera programadora de computadores de la historia.
A pesar de que la máquina de Charles Babbage, para quien estaría diseñado el primero de los algoritmos de programación, nunca se terminó, el trabajo de Ada inspiraría los esfuerzos de los pensadores y científicos contemporáneos hasta la actualidad.
Otros nombres que ayudaron a construir el concepto de algoritmo en programación actual fueron David Hilbert, Alan Turing y Stephen Kleene, por nombrar algunos.
Los algoritmos informáticos tienen como función principal componer módulos de trabajo que, unidos, dan forma al software de un computador. Ya que todos estos algoritmos poseen un número definido de pasos que proporcionan soluciones a distintos problemas, un programa puede ir ejecutando distintos algoritmos para ir trabajando los datos a medida que los usuarios hacen alguna solicitud.
La informática de algoritmos sirve a los programadores como una guía lógica para la solución de problemas de diseño, ya que estos representan en sí mismos una manera de llegar desde el punto A (el problema) al punto Z (la resolución).
De esta manera, un algoritmo base puede traducirse a muchos lenguajes de programación para que las diferentes plataformas lo entiendan.
Una vez definidos qué son los algoritmos computacionales es hora de establecer sus partes fundamentales:
El input o también conocido como valores de entrada es el punto del algoritmo en el que se ingresan los valores iniciales necesarios para que este pueda operar. Una entrada puede ser cualquier cosa: Números, letras, patrones de verdadero y falso, entre otros.
El proceso son todos los cálculos, operaciones lógicas y modificaciones que el algoritmo debe hacerle a la entrada para poder conseguir un resultado en consecuencia. Es decir, son los pasos de un algoritmo.
La salida representa todos los valores, conclusiones o resultados que el algoritmo ha podido conseguir después de procesar los datos de entrada. Esto es uno de los componentes que más define algoritmo en informática.
Así como las partes que componen a un algoritmo, indistintamente del problema, también existen una serie de características en común que los identifican como tales:
Todos los algoritmos tienen un número de pasos finitos, que incluyen las posibles desviaciones desde el punto A (entrada – inicio) hasta el punto Z (Salida – Resultado). Es decir, siempre poseen un único punto de inicio y un único punto final.
Cuando se dice que los algoritmos de informática son definidos se está queriendo decir que, para los mismos valores de entrada, estos deben por definición arrojar los mismos valores de salida, ya que los pasos o procedimientos son siempre los iguales.
Pudieran verse como una excepción los algoritmos que trabajen con variables estadísticas que, al ser aleatorias, puedan dar valores distintos cada vez, pero la realidad es que inclusos estos valores se encuentra entre un margen de variación, por lo que se deben considerar consistentes.
Todos los algoritmos tienen una serie de pasos lógicos ordenados en secuencias precisas, de uno a la vez, con la finalidad de obtener un resultado con sentido.
Todas las tareas dentro del algoritmo deben tener una utilidad lógica real, sin ambigüedades o subjetividad de ningún tipo. En este sentido un algoritmo en computación siempre debe dar una solución acorde a sus funciones.
Dicho de otra manera, un algoritmo no trabaja con valores que estén abiertos a la interpretación y los resultados deben tener coherencia. Si se hace un algoritmo para sumar, el resultado debe ser una suma, por decir un ejemplo cualquiera.
Esta es una de las esencias que ayudan a definir qué es un algoritmo en informática.
Dependiendo desde el punto de vista que se utilice para clasificar a los algoritmos estos pueden ser cuantitativos y cualitativos, si es que nos referimos al sistema de símbolos en el que están hechos.
Si en algún punto del algoritmo la secuencia de acciones puede dividirse en dos posibles rutas a seguir para dar solución al problema, que dependerá de los valores de entrada, entonces el algoritmo se considera condiciona o no condicional.
Dependiendo de las herramientas que se requieran para ponerlo en marcha puede existir un algoritmo computacional y uno no computacional.
Para el algoritmo computacional, en el que nos enfocaremos, existe otra clasificación que dependerá de sus funciones específicas o los mecanismos que en ellos se especifican para llegar a la solución (output) del problema.
Los algoritmos de búsqueda puede que sean uno de los más conocidos por el público en general, ya que estos se especializan en encontrar uno o más elementos en una base de datos, siempre y cuando cuenten con determinadas propiedades o características definidas por el usuario.
Existen muchos métodos para hacer funcionar a este tipo de algoritmos, ya sea:
Los algoritmos estadísticos o probabilísticos son un poco diferente al resto, ya que estos no siempre muestran los mismos resultados ante las mismas variables de entrada. Esto se debe a que al inicio del programa se hace un muestreo aleatorio con el cual se presentará un resultado que puede no ser 100% acertado, pero que son útiles si se tiene en cuenta el margen de error.
Para mejorar la precisión de estos no es raro que se hagan múltiples barridos del algoritmo, es decir, que se consigan varios resultados a través del mismo proceso y de ahí elegir el valor ideal.
Los algoritmos de ordenamiento son aquellos que reciben como entrada una serie desordenada de valores y tienen como objetivo ordenarlos según un determinado parámetro: alfabético, numérico, de magnitud, de tamaño…
Existen varios métodos por los cuales se puede resolver un algoritmo de ordenamiento, los más conocidos son:
Los algoritmos de simulación o devoradores son especialmente buenos para la optimización de tareas u operaciones.
En estos algoritmos estudian diferentes opciones posibles ante determinado escenario y elige la mejor entre todas ellas, repitiendo el proceso hasta que se encuentra una solución general óptima o factible.
Un algoritmo devorador puede entonces:
Los algoritmos dinámicos son los más eficientes, pero limitados de todos, ya que solo se pueden aplicar a tareas donde un problema lógico complejo alcance a dividirse en varios sub problemas más pequeños. De esta manera el programa optimiza el esfuerzo necesario para llegar a una salida satisfactoria.
Se implementan en su mayoría dentro de bloques conocidos como recursivos, es decir, para solucionar secuencias matemáticas como las de Fibonacci, Las Torres de Hanoi y operaciones factoriales.
En lo que respecta a los algoritmos comunes puede que ninguno sea más clásico que una receta de cocina. Esta es la versión más conocida de un algoritmo.
Ahora, en programación, existen algunos ejemplos de algoritmos informáticos famosos que, más o menos visibles, han tenido un gran impacto en la vida moderna y en la forma en la que se puede disfrutar de la tecnología como la conocemos.
La solución del algoritmo matemático de Euclides puede que sea uno de los mejores ejemplos de algoritmos informáticos, ya que fue una de las primeras soluciones en incorporarse a procesos de cálculo complejo y resultó en un método muy eficiente para identificar el máximo común divisor (m.c.d.) de dos números enteros.
El enunciado de este algoritmo sugiere que:
Considerando que fue detallado 300 años a.C. y se utiliza exactamente igual en la programación moderna, puede que estemos ante el algoritmo de uso informático más antiguo y conocido de la historia.
La información en la red está desordenada y no es accesible de manera libre, a menos claro que se sepa de ante mano la dirección única de cada página en la red y entendemos que esto no es factible.
Para solucionar este problema, los motores de búsqueda como Google crean un “índice” donde se indexan muchísimas de las páginas que hay en la red para que los usuarios pueden acceder a cualquier información, incluso cuando no se sepa exactamente dónde está.
Para ello, Google emplea un algoritmo llamado PageRank encargado de sugerir los mejores contenidos a los usuarios a través de las palabras clave que ellos dan como entrada. Así se generan los resultados que hay en las páginas de búsqueda.
El secreto detrás de la eficiencia de este algoritmo está muy bien protegido, al punto que existen profesionales dedicados a tiempo completo en tratar de descifrar como funciona, para así sacar beneficios y ayudar a que sus proyectos salgan primeros en las listas de búsqueda.
Este es al algoritmo de búsqueda más usado del mundo y es, por mucho, uno de los más poderosos y precisos que existen.
Un algoritmo del tipo Timeline es aquel que se utiliza comúnmente en perfiles de contenido masivo como portales de noticias y redes sociales para ofrecerle a los usuarios una lista de contenidos que sea de interés para él.
Para encontrar estos contenidos los algoritmos estudian muchas variables como categorías con las que el usuario suele interactuar más, relevancia de las publicaciones, antigüedad, relación con otros usuarios, gustos en común con otros usuarios de la plataforma y más.
Estos algoritmos son útiles porque gracias a ellos se puede personalizar la experiencia de navegación en diferentes portales y conectar a las personas con sus intereses.
El mejor ejemplo de un algoritmo en informática de este tipo seguramente sería EdgeRank, el gestor de timeline de Facebook.
A pesar de no ser los más conocidos por el público en general, el algoritmo Round-Robin es muy famoso dentro del ámbito informático, ya que es un método de ordenamiento inteligente, capaz de optimizarlos los niveles de trabajo de un procesador.
Durante mucho tiempo este fue el secreto detrás de la ilusión multitareas de los procesadores antiguos.
Haciendo un resumen general, este algoritmo les permite a los sistemas operativos (OS) dividir todas las tareas que demandan algo de tiempo del procesador en orden de potencia requerida y facilidad de cálculo.
De esta manera el procesador dedica cierto número de nanosegundos a cada tarea de manera ordenada lo que da la sensación de que se están haciendo todos los trabajos al mismo tiempo. En la actualidad, con procesadores multinucleares y programación dividida, ya no se requiere de trucos ilusorios, pero el mecanismo sigue siendo popular.
Esto puede aplicarse en la optimización de operaciones informáticas a todos los niveles, no solo en los OS.
Saber cómo elaborar un algoritmo es una habilidad sumamente útil para el público en general, ya que ayuda a desarrollar las capacidades de solución de problemas, sin mencionar que es la base para todos aquellos que estén interesados en aprender un lenguaje de programación.
Estos esqueletos de programas en pseudolenguaje son fáciles de hacer si se entiende la lógica que hay detrás de ellos, por lo que basta conseguir algunos datos iniciales y seguir los pasos apropiados para entender cómo se elabora un algoritmo realmente.
A continuación, algunos ejemplos de cómo hacer un algoritmo:
Básicamente, no hay requerimientos técnicos además de tener una noción básica de cómo realizar un algoritmo porque serán un grupo de instrucciones que pueden estar fácilmente en papel. Hay que recordar no confundir algoritmos informáticos con lenguajes de programación o códigos de programación.
Ahora, ciertamente es necesario realizar algunas consideraciones preliminares:
Una vez que se tienen los conocimientos generales de los tipos de algoritmos informáticos y la estructura en general, solo se deben seguir los pasos adecuados. A continuación, cómo desarrollar un algoritmo:
Parte vital de cómo se hace un algoritmo recae en un análisis detallado del contexto del problema a resolver o de los objetivos que se quieren alcanzar (salidas) ante determinados parámetros de entrada. Para ello, conviene hacer una descripción tan detallada como sea posible de los pormenores antes de iniciar.
Una vez que se entiende el problema y se ha contextualizado corresponde detallar el problema en sí mismo, enfocándose en posibles secuencias o retos para llegar desde el inicio a la solución, así como en posibles desviaciones (Si pasa X, hacer Y, si no hacer Z). Este es uno de los más importantes pasos para crear un algoritmo.
Ya que se tiene el problema desglosado, corresponde darle forma a cualquier potencial bloque donde sea necesario hacer alguna tarea, cálculo o procesamiento.
Hasta este punto no se ha completado el algoritmo, solo basta entender qué grupos de tareas o procedimientos pueden llegar a requerirse en determinado punto para poder conseguir una solución.
Una vez que se entiende qué cálculos se pueden hacer, lo que se necesita de entrada para iniciar los cálculos y las potenciales salidas aceptables corresponde la creación del algoritmo en sí mismo.
Entre los pasos para hacer un algoritmo este suele ser el más largo, aunque no necesariamente el más complejo.
Para ello se realizará una serie de pasos ordenados que deben incluir hasta la más mínima de las instrucciones como: Indicar al usuario que ingrese un valor, leer el valor ingresado, guardar en valor en una variable con “x” nombre, sumar la variable…
Una vez el algoritmo esté terminado, será necesario hacer algo denominado en programación como corrida en frío que es una revisión manual del algoritmo (ya que en este punto aún no hay lenguaje de programación).
Para hacer una corrida en frío basta con seguir paso a paso el algoritmo con un par de valores iniciales “de prueba” y usar herramientas como una hoja de papel, calculadoras, lápices o simplemente la memoria para seguir todos los procesos hasta la salida.
La idea de este procedimiento es verificar que la lógica detrás del algoritmo se cumpla y que esta tenga sentido.
Este tipo de secuencias están orientadas al uso de las máquinas por lo que para implementarlos hace falta saber cómo hacer un algoritmo de programación que sería esencialmente los mismos, solo que traducido a un lenguaje de código.
Aprender a realizar algoritmos informáticos es el punto de partida ideal para todo aquel que desee dominar el arte de solucionar problemas complejos a través de herramientas tecnológicas, siendo los algoritmos en programación un lenguaje universal que puede ser entendido por todos los programadores de oficio.