Algoritmos Informáticos

Algoritmos Informáticos.

No es un secreto para nadie que cuando de programación se trata estamos involucrados con esta palabra, los algoritmos son una parte fundamental en el desarrollo de software, por no decir de la ciencia en general. Primero comprendamos que un algoritmo es ese conjunto de instrucciones ordenadas y finitas que nos permite resolver un problema planteado, la solución es separada en pequeñas instrucciones ya que es la manera en la que el computador es capaz de ejecutarlas. Por ende su importancia es más que evidente, nos ayudaran en la resolución de problemas de manera lógica.

La estructura de un algoritmo se resume en: entrada, proceso y salida; donde la entrada es el conjunto de datos que tenemos para la ejecución del algoritmo, el proceso el conjunto de instrucciones que se estarán ejecutando para obtener un resultado, y la salida es el valor resultante de nuestra ejecución la cual debe hacer match con los requerimientos planteados al inicio.

Conociendo la estructura de un algoritmo también podemos intuir que existen diferentes maneras de representarlo, donde podemos destacar el pseudo código y el diagrama de flujo.

Pseudo Código

El pseudo código es un lenguaje informal con el cual podemos definir el flujo de un algoritmo mediante una estructura de alto nivel, es decir, es un lenguaje que puede ser un poco arbitrario, pero que se comporta como un lenguaje de programacion sin la rigidez de su sintaxis. Con el pseudo código podemos dar respuesta a un algoritmo y hacer una ejecución por medio de un artilugio llamado corrida en frio, que nos permite dar esos primeros pasos para entender el comportamiento de una linea de código, básicamente interpretamos el lenguaje mentalmente y vamos viendo las ejecuciones y simulando un resultado con unos valores de entrada.


Diagrama de flujo

Un diagrama de flujo es la forma gráfica de representar un algoritmo, al igual que el pseudo código nos permite ejecutar una corrida en frio para comprender cada instrucción y resultado de nuestro algoritmo. Este posee un conjunto de símbolos que representan desde el inicio del algoritmo, hasta condicionales y e instrucciones precisas, lo cual nos ayuda a visualizar de una forma estandarizada la estructura de una solución planteada.

Existen dos tipos de algoritmos: los cualitativos y los cuantitativos. Un algoritmo cualitativo es aquel que se enfoca en características y la mayoría de los datos que maneja son de tipo string (cadena de caracteres), aunque también puede tratar con datos numéricos, pero solo en forma no calculo, mientras que los cuantitativos tienen como principio el calculo para la resolución de problemas.
En este articulo estudiaremos algunos algoritmos populares, pero sin profundizar demasiado en sus conceptos puesto que muchos requieren un articulo completo para ser explicados.


Algoritmos de ordenamiento

Los algoritmos de ordenamientos son muy utilizados en diferentes aplicaciones, ya que dependiendo de ciertos axiomas (condiciones) requerimos mostrar un conjunto de elementos de una forma u otra, un ejemplo claro son los filtros de las búsquedas que realizamos en alguna plataforma de ecommerce, algunas búsquedas pueden ir relacionadas con nuestros intereses y organizadas según el grado de importancia. Para la resolución de esta clase de problemas usamos algún algoritmo de ordenamiento que se adecue a nuestras necesidades de rendimiento y funcionamiento.

  • Método de la burbuja (burblesort): Es un algoritmo que recorre la lista comparando la posicion actual con la siguiente para obtener el resultado esperado.

Imagen extraída de wikipedia

  • Ordenamiento por árbol binario( Binary tree sort ): Nos permite organizar los elementos a partir de la construcción de un árbol binario, entendiendo que un árbol binario es una estructura de nodos cuyos elementos hijos solo pueden ser dos, uno izquierdo y uno derecho; la construcción de dicho árbol permite obtener el arreglo de elementos ordenados con su recorrido con la lectura inorden.
  • Ordenamiento por insercion ( Insertion sort ): En este algoritmo se mantiene una sub-lista donde se ejecuta el ordenamiento, mientras se hace el recorrido cada elemento es comparado y se añade a la sub-lista en la posición correspondiente.
  • Ordenamiento por módulos ( Heapsort ): Es un algoritmo no recursivo y es considerado inestable ya que presenta problemas con elementos del mismo valor y no considera su orden de entrada. Se basa en dividir el arreglo en módulos (heap) y va haciendo las comparaciones tomando en cuenta un elemento o nodo recurrente y una cima, que se refiere al menor o mayor valor según se defina, normalmente este algoritmo construye desde el final del arreglo hasta el inicio. Explicar su comportamiento requiere un articulo dedicado, así que solo tomemos estos conceptos por ahora.

Algoritmos de ruta

Qué programador no conoce los famosos algoritmos para conseguir la ruta más corta, normalmente esta clase de algoritmos son vistos cuando hablamos de geolocalización o incluso si queremos ubicar un valor en una direccion de memoria.
  • Dijkstra’s creo que es el único algoritmo que conozco hasta ahora para conseguir la ruta mas corta, básicamente hacemos la búsqueda a partir de un grafo, donde tenemos un nodo inicial y vamos a ir iterando sobre los siguientes que tengan el menor valor. Podríamos pasar todo un post hablando sobre este algoritmo, pero dejare por aca una implementación en ruby hecha por mi amigo Nardo Nykołyszyn que nos puede ir dando una idea hasta ese momento, el repositorio esta en github.

Muchos planteamientos matemáticos también se representan de forma algorítmica, un ejemplo es la resolución del problema de como cortar un pastel de forma “equitativa” y “justa” que podemos encontrar en el libro de Ian Stewart Como cortar un pastel (Recomendado) el cual nos plantea que:
Si dos personas quieren compartir un pastel sin discutir , la solución clásica es «yo corto, tu eliges». El problema se vuelve sorprendentemente espinoso hay mas de dos personas , y cuanto más comensales haya, más espinoso será todavía.
Es sumamente interesante puesto que explica las diferentes formas de resolver un planteamiento aparentemente sencillo, y aquí entramos en materia de complejidad de aun algoritmo, esto básicamente hace parte de la teoría de complejidad computacional que es un tema bastante extenso; donde estudiamos todo lo relacionado a los recursos que requiere un algoritmo para llevar a cabo la resolución de un problema expresado en un computador.
La teoría de la complejidad es sumamente importante para el analisis y optimización de algoritmos, pero lo dejaremos para otro articulo, por ahora entendamos lo interesante que resulta conocer los algoritmos y su gran importancia al momento de definir soluciones sin importar el lenguaje de programación.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Más info

aceptar