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.
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í:
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! 😊
It’s nice when there are organic users
oooo kimler kimler var hayretler içerisindeyimm??
¿Quiénes son lo que estoy asombrado?
I know it works every day without interruption
Realmente, gracias!!
A Really Excellent Application Good luck
Good to learn 🙂
Good to learn 🙂
thanks!!
An Excellent App indeed!