Algoritmos ¿Qué son y en qué me beneficia saberlo?
La guía definitiva para entender los algoritmos de una manera fácil y práctica y así te vaya bien en tu chamba y tus entrevistas genio

Si ya tienes regular experiencia como developer, podrías pensar que es un tema muy básico y que no significa mucho para ti, pero craso error, eso mismo pensaron muchos y justamente el conocer estos temas solamente de manera empírica y superficial fue justamente su talón de Aquiles en las entrevistas de trabajo en las cuales no supieron responder acertadamente ni resolver los algoritmos planteados, por eso no nos confiemos y repasemos estos importantes temas que son la base y además lo que veremos en el día a día cuando se nos pida proponer una solución a una regla de negocio compleja.

Y si eres nuevo en este mundo del desarrollo de software entonces aprenderás algo muy importante, ya que como dije antes, saber de algoritmia es la base de la profesión, y un tema que debes aprender incluso antes de aprender algún lenguaje de programación. Comencemos.

Photo by NeONBRAND on Unsplash

Algoritmos

Esta palabra deriva del griego arithmos que significa números y fue acuñada por la influencia del notable matemático persa Al-Juarismi.

Un algoritmo es un conjunto de instrucciones que se siguen para llevar a cabo una tarea.

Estas instrucciones deben cumplir con estas características:

  • No son ambiguas, sino claramente definidas
  • Ordenadas, deben tener un orden claro y bien definido
  • Son finitas, un algoritmo no puede ser infinito sino que debe tener un fin definido en todas sus rutas.

Las tareas que se llevan a cabo por el algoritmo también deben cumplir ciertas características, tenemos:

  • Realizar un cálculo o cómputo, por ejemplo un algoritmo para realizar el cálculo del puntaje final en un examen de admisión.
  • Solucionar un problema, por ejemplo un algoritmo para saber si una persona está en buena condición física dado su peso y talla.

Estos algoritmos como ya hemos visto, son sencillamente una lista de pasos a seguir, un listado de instrucciones, y se pueden representar de tres maneras: gráficamente usando notación BPMN mediante un diagrama conocido como diagrama de flujo de datos, lo podemos hacer sobre el papel, un software o herramientas online gratuitas como lucidchart, draw.io, DFD, los representamos también de manera textual con pseudocódigo o un listado simple de pasos a seguir ya sea en un papel o block de notas y finalmente las podemos representar en código mediante cualquier lenguaje de programación.

Algoritmos en la práctica

Hagamos el algoritmo para ordenar una lista de números. Esto se conoce como algoritmo de ordenamiento y hay varios más, sin embargo en esta ocasión realizaremos un algoritmo conocido como "burbuja" o BubbleSort para fines didácticos ya que es el algoritmo de ordenación mas simple que existe, sin embargo no el más eficiente, pero seamos prácticos, para empezar, está muy bien.

Como estás notando hay "algoritmos notables" o conocidos y que tienen hasta nombre y están clasificados, te convendría aprenderlos, ya que mejorará increíblemente tu agilidad mental resolutiva de problemas y tu lógica, además es muy probable que los veas en entrevistas técnicas.

Si quieres dominar el tema sin complicarte mucho y de cero a experto te puedo recomendar este curso de Victor Robles, un reconocido desarrollador web y muy didáctico instructor, puedo dar fe de ello ya que es uno de mis mentores favoritos. Una vez hayas agarrado cancha como se dice, y si eres entusiasta, un libro que puedes echar un vistazo y te inspirará es el conocido Cracking the Coding Interview.

BubbleSort o Método de burbuja

Caso: Dada una lista de números aleatorios, se nos pide que el programa devuelva la lista ordenada.

Vamos a representar este algoritmo en sus 3 formas, las que hemos hablado antes, veamos:

Listado de instrucciones (texto)

1. Iniciar, obtener lista original de números

2. Analizar la lista comenzando por el último elemento hacia el primero, número por número

  • [2.1] Comparar el número a analizar (el primero por analizar sería el último de la lista) con su antecesor
  • [2.2] Si es menor entonces intercambiar posiciones (aquí se hace algo conocido como swap)
  • [2.3] Si no, continuar hasta llegar al segundo número de la lista (no hasta el primero porque no tiene antecesor).
  • [2.4] Descartar número analizado para el siguiente ciclo.

3. Repetir paso 2.1 hasta llegar al segundo elemento de la lista (porque el primero no tiene antecesor).

4. Mostrar la lista ordenada. Fin.

Diagrama de flujos

El diagrama de este algoritmo sería masomenos así:

Fuente: www.includehelp.com (clic en la imagen)

Codificación en C#

Los algoritmos pueden ser programados, en este caso utilicé C# y lo subí a mi Github, puedes ver el código completo desde: https://github.com/GeaSmart/Algorithms-BubbleSort, sin embargo aquí te muestro el código principal que resuelve el problema de ordenar una lista de números:

        //Método de ordenamiento burbuja | Bubble sort method
        private static int[] order(int[] List)
        {
            int temp;
            //Recorremos la lista de atrás para adelante
            for (int i = List.Length; i > 0; i--)
            {                
                //Analizamos numero y antecesor
                for (int j = 0; j < i-1; j++)
                {                    
                    if (List[j] > List[j + 1])
                    {
                        //Si es mayor hacemos swap de variables
                        temp = List[j+1];
                        List[j + 1] = List[j];
                        List[j] = temp;
                    }                        
                }
            }
            return List;
        }

Espero te haya servido esta información crack y sea un trampolín para que aprendas más de algoritmos, en un futuro post también hablaré de su complemento por excelencia: las estructuras de datos, con eso podrás salir bien parado en tus entrevistas de trabajo y en tu día a día como dev.

Comparte esta información crack de cracks! 😊

Deja una respuesta

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