Algoritmos
Un algoritmo es
una secuencia de pasos para resolver un problema.
Los pasos deben estar
muy bien definidos, y tienen que describir sin ambigüedades cómo llegar desde
el inicio hasta el final.
Componentes de un algoritmo
Conceptualmente, un
algoritmo tiene tres componentes:
- la entrada: son los datos sobre
los que el algoritmo opera;
- el proceso: son los pasos que hay
que seguir, utilizando la entrada;
- la salida: es el resultado que
entrega el algoritmo.
El proceso es una
secuencia de sentencias, que debe ser realizada en orden. El
proceso también puede tener ciclos (grupos de sentencias que
son ejecutadas varias veces) y condicionales (grupos de sentencias
que sólo son ejecutadas bajo ciertas condiciones).
Medios
de expresión de un algoritmo
Los algoritmos
pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas de
flujo y lenguajes
de programación entre otros. Las descripciones en
lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocódigo y
diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas
expresiones son formas más estructuradas para representar algoritmos; no
obstante, se mantienen independientes de un lenguaje de programación
específico.
La descripción de
un algoritmo usualmente se hace en tres niveles:
1. Descripción de alto
nivel. Se establece el problema, se selecciona un modelo matemático y se
explica el algoritmo de manera verbal, posiblemente con ilustraciones y
omitiendo detalles.
2. Descripción formal. Se usa
pseudocódigo para describir la secuencia de pasos que encuentran la solución.
3. Implementación. Se muestra el
algoritmo expresado en un lenguaje de programación específico o algún objeto
capaz de llevar a cabo instrucciones.
También es posible
incluir un teorema que demuestre que
el algoritmo es correcto, un análisis de complejidad o ambos.
Diagrama de flujo
Los
diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos
conectados con flechas para indicar la secuencia de instrucciones y están
regidos por ISO.
Los
diagramas de flujo son usados para representar algoritmos pequeños, ya que
abarcan mucho espacio y su construcción es laboriosa. Por su facilidad de
lectura son usados como introducción a los algoritmos, descripción de un
lenguaje y descripción de procesos a personas ajenas a la computación.
Los
algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje
natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre
otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas.
El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del
lenguaje natural. Dichas expresiones son formas más estructuradas para
representar algoritmos; no obstante, se mantienen independientes de un lenguaje
de programación específico.
Pseudocódigo
El pseudocódigo (falso
lenguaje, el prefijo pseudo significa falso) es una descripción de
alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con
algunas convenciones sintácticas propias de lenguajes de programación, como
asignaciones, ciclos y condicionales, aunque no está regido por ningún
estándar. Es utilizado para describir algoritmos en libros y publicaciones
científicas, y como producto intermedio durante el desarrollo de un algoritmo,
como los diagramas de flujo, aunque presentan una ventaja importante sobre estos, y es que
los algoritmos descritos en pseudocódigo requieren menos espacio para
representar instrucciones complejas.
El pseudocódigo está
pensado para facilitar a las personas el entendimiento de un algoritmo, y por
lo tanto puede omitir detalles irrelevantes que son necesarios en una
implementación. Programadores diferentes suelen utilizar convenciones
distintas, que pueden estar basadas en la sintaxis de lenguajes de programación
concretos. Sin embargo, el pseudocódigo, en general, es comprensible sin
necesidad de conocer o utilizar un entorno de programación específico, y es a
la vez suficientemente estructurado para que su implementación se pueda hacer
directamente a partir de él.
Así el
pseudodocódigo cumple con las funciones antes mencionadas para representar algo
abstracto los protocolos son los lenguajes para la programación. Busque fuentes
más precisas para tener mayor comprensión del tema.
Sistemas formales
La teoría de autómatas y la teoría de funciones recursivas proveen modelos matemáticos que formalizan el concepto de algoritmo. Los modelos más
comunes son la máquina de Turing, máquina de registro y funciones μ-recursivas.
Estos
modelos son tan precisos como un lenguaje máquina, careciendo de
expresiones coloquiales o ambigüedad, sin embargo se mantienen independientes
de cualquier computadora y de cualquier implementación.
Implementación
Muchos algoritmos son
ideados para implementarse en un programa. Sin
embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal, un
circuito eléctrico o un aparato mecánico y eléctrico. Algunos algoritmos
inclusive se diseñan especialmente para implementarse usando lápiz y papel. El algoritmo de multiplicación tradicional, el algoritmo de Euclides,
la criba de Eratóstenes y muchas formas de resolver la raíz
cuadrada son sólo algunos
ejemplos.
Variables
Son elementos que toman
valores específicos de un tipo de datos concreto. La declaración de una
variable puede realizarse comenzando con var.
Principalmente, existen dos maneras de otorgar valores iníciales a variables:
1.
Mediante una sentencia de asignación.
2.
Mediante un procedimiento de entrada de datos (por ejemplo: 'read').
Análisis de algoritmos
Como
medida de la eficiencia de un algoritmo, se suelen estudiar los recursos
(memoria y tiempo) que consume el algoritmo. El análisis de algoritmos se ha
desarrollado para obtener valores que de alguna forma indiquen (o especifiquen)
la evolución del gasto de tiempo y memoria en función del tamaño de los valores
de entrada.
El
análisis y estudio de los algoritmos es una disciplina de las ciencias de la
computación y, en la mayoría de los casos, su estudio es completamente
abstracto sin usar ningún tipo de lenguaje de programación ni cualquier otra implementación; por
eso, en ese sentido, comparte las características de las disciplinas
matemáticas. Así, el análisis de los algoritmos se centra en los principios
básicos del algoritmo, no en los de la implementación particular. Una forma de
plasmar (o algunas veces "codificar") un algoritmo es escribirlo en pseudocódigo o
utilizar un lenguaje muy simple tal como Léxico,
cuyos códigos pueden estar en el idioma del programador.
Algunos
escritores restringen la definición de algoritmo a procedimientos que deben
acabar en algún momento, mientras que otros consideran procedimientos que
podrían ejecutarse eternamente sin pararse, suponiendo el caso en el que
existiera algún dispositivo físico que fuera capaz de funcionar eternamente. En
este último caso, la finalización con éxito del algoritmo no se podría definir
como la terminación de este con una salida satisfactoria, sino que el éxito
estaría definido en función de las secuencias de salidas dadas durante un
periodo de vida de la ejecución del algoritmo. Por ejemplo, un algoritmo que
verifica que hay más ceros que unos en una secuencia binaria infinita
debe ejecutarse siempre para que pueda devolver un valor útil. Si se implementa
correctamente, el valor devuelto por el algoritmo será válido, hasta que evalúe
el siguiente dígito binario. De esta forma, mientras evalúa la siguiente
secuencia podrán leerse dos tipos de señales: una señal positiva (en el caso de
que el número de ceros sea mayor que el de unos) y una negativa en caso
contrario. Finalmente, la salida de este algoritmo se define como la devolución
de valores exclusivamente positivos si hay más ceros que unos en la secuencia
y, en cualquier otro caso, devolverá una mezcla de señales positivas y
negativas.
