Introducción a los algoritmos
Introducción
Un algoritmo es un conjunto ordenado y finito de pasos que se siguen para resolver un problema específico.
Los algoritmos existen porque son esenciales, fundamentales, para resolver problemas y realizar tareas en una variedad de campos, especialmente en la informática y la programación, ya que son la base de cualquier programa de computadora.
Son la base de la programación. Antes de escribir código, debemos diseñar algoritmos que describan cómo resolver un problema.
Los algoritmos pueden ser tan simples como una receta de cocina o tan complejos como el algoritmo de Google para clasificar páginas Web. Pero, independientemente de su complejidad, todos los algoritmos tienen una cosa en común: toman una entrada (un dato o un conjunto de datos), la procesan realizando una serie de cálculos o procesos, y producen una salida (información).
El estudio de los algoritmos implica no sólo la creación de algoritmos para resolver problemas, sino también la evaluación de su eficiencia. Esto incluye la determinación de la cantidad de tiempo y espacio que un algoritmo requiere para ejecutarse, lo que es esencial para entender qué algoritmos son más eficientes para diferentes tipos de problemas.
La habilidad para crear algoritmos eficientes es esencial para desarrollar software de calidad.
Los algoritmos son una parte esencial de la informática y la programación, y su estudio es fundamental para cualquier persona que quiera entender cómo funcionan las computadoras y cómo se pueden utilizar para resolver problemas.
Resolución de un problema
Recordemos que la programación de computadoras equivale a pensar en la resolución de un problema como el proceso de tomar alguna entrada (un problema que queremos resolver) y generar alguna salida (la solución a nuestro problema), resolviendo así dicho problema.
Ahora que podemos representar entradas y salidas, podemos trabajar en la resolución de problemas. La caja negra que transforma los datos de entrada en información de salida contiene un algoritmo que ejecuta instrucciones paso a paso para resolver el problema:
¡Para recordar!
La resolución de problemas es fundamental para las ciencias de la computación y la programación de computadoras.
Imagina el problema básico de tratar de localizar un solo nombre en una guía telefónica impresa. El viejo equivalente a una aplicación en nuestros teléfonos que almacene nuestros contactos, con sus nombres y números de teléfono ordenados alfabéticamente. ¿Cómo podrías hacer esto?
Un enfoque podría ser abrir la guía y comenzar desde la primera página, buscando el nombre una página a la vez hasta otra página, hasta llegar a la última página. Este enfoque sería correcto, ya que eventualmente encontraríamos el nombre si está en el libro.
Otro enfoque podría ser buscar el nombre hojeando la guía de a dos páginas a la vez, aunque este enfoque no será correcto ya que podríamos saltarnos la página que tiene el nombre buscado.
El enfoque final, y quizás mejor, podría ser abrir la guía telefónica por la mitad y preguntar:
-
“¿El nombre que estoy buscando está a la izquierda o a la derecha?”
-
Decidir si el nombre estará en la mitad izquierda o derecha del libro (porque el libro está alfabetizado) y reducir el tamaño de nuestro problema a la mitad.
-
Luego, repetir este proceso hasta encontrar nuestro nombre, dividiendo el problema por la mitad cada vez.
Info
Cada uno de estos enfoques podría definirse como algoritmo.
Definición de algoritmo
Día a día empleamos, de manera frecuente, distintos algoritmos que nos permiten resolver un sinfín de problemas en todos y cada uno de los aspectos de nuestras vidas.
Por ejemplo, un manual de usuario es, en cierta manera, un algoritmo que nos enseña cómo usar un aparato. Las instrucciones que recibimos para realizar una tarea específica constituyen un algoritmo también.
Definición
Un algoritmo es una serie (un conjunto ordenado) finita de pasos precisos para alcanzar un objetivo: resolver y dar solución a un problema o realizar una tarea específica de manera eficiente y sistemática.
Un algoritmo debe constar de una cantidad finita de pasos; de lo contrario sería imposible alcanzar el objetivo.
¡Para recordar!
Siempre el fin de un algoritmo es un objetivo bien específico: resolver un problema concreto.
En términos generales, se puede decir que se elabora un algoritmo para solucionar un problema. Los pasos deben ser absolutamente precisos y claros para quién debe llevar a cabo el algoritmo. Es decir, el grado de precisión que se requiere depende de para quién está dirigido.
¿Cómo funciona?
Dados un estado inicial y una entrada, siguiendo los pasos sucesivos de un algoritmo, se llega a un estado final y se obtiene una solución a un problema específico.
Un ejemplo de algoritmo aplicado en la vida real podría ser: "Armar un sandwich". Este algoritmo deberá ser nna serie finita de pasos precisos para obtener el sandwich armado.
Los pasos importan (si omitimos alguno, seguramente el sandwich no se podrá armar).
El orden importa (si colocamos primero algunos ingredientes, luego las rodajas de pan y por último completamos con otros ingredientes, la preparación podrá ser cualquier cosa menos un sandwich).
El grado de precisión también cuenta, y depende de quién deba ejecutar el algoritmo (no será lo mismo un sandwich clásico y sencillo armado por nosotros en casa para saciar el hambre; que un sandwich gourmet preparado por un chef internacional siguiendo pasos y técnicas de vanguardia culinaria que harán del sandwich una experiencia única en la boca).
Veamos una receta tipo:
- Apoyar una rodaja de pan sobre el plato.
- Untar con mayonesa la rodaja de pan apoyada sobre el plato.
- Apoyar una feta de jamón sobre la rodaja de pan untada.
- Apoyar una feta de queso sobre la feta de jamón.
- Apoyar una rodaja de tomate sobre la feta de queso.
- Untar una cara de una rodaja de pan con mayonesa.
- Apoyar la rodaja de pan untado, con la cara untada hacia abajo, sobre la rodaja de tomate.
¿Seremos capaces de ejecutar esta receta de manera correcta y eficiente?
Dependerá de nuestro conocimiento previo. O de la búsqueda exitosa de explicaciones para ejecutar la receta.
También dependerá de quién va a armar el sandwich. Dependiendo el caso, deberá emplear una receta (algoritmo) con un nivel de precisión diferente.
Para un programador, escribir un algoritmo es una tarea habitual, que se vuelve bastante intuitiva con la práctica. Sin embargo, para un principiante puede ser un desafío mayúsculo.
A continuación analizaremos los pasos que debemos seguir para escribir un algoritmo.
A medida que avancemos en la metodología para la creación de algoritmos, esta primera receta se volverá cada vez más inconsciente y será necesario mejorarla y robustecerla para que sea efectiva y cumpla con su objetivo.
Pero antes, estudiemos un poco más acerca de las características y generalidades de los algoritmos.