0
Programación [Algoritmo]
martes, 10 de mayo de 2011 | Author: Alex Alvarez Gárciga | Etiquetas: Programación, TeoríaAlgoritmo en matemáticas, ciencias de la computación y disciplinas relacionadas (del griego y latín, dixit algorithmus y éste a su vez del matemático persa Al Juarismi) es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de estudio de la algoritmia.
La descripción de un algoritmo usualmente se hace en tres niveles:
- 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.
- Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.
- 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.
Ejemplo de algoritmo
Tomemos el problema de encontrar el máximo de un conjunto de números.
Descripción de alto nivel
Dado un conjunto finito C de números, se tiene el problema de encontrar el número más grande. Sin pérdida de generalidad se puede asumir que dicho conjunto no es vacío y que sus elementos están numerados como C0, C1, …, Cn
Es decir, dado un conjunto C = { C0, C1, …, Cn } se pide encontrar m tal que x <= m para todo elemento x que pertenece al conjunto C.
Para encontrar el elemento máximo, se asume que el primer elemento (c0) es el máximo; luego, se recorre el conjunto y se compara cada valor con el valor del máximo número encontrado hasta ese momento. En el caso que un elemento sea mayor que el máximo, se asigna su valor al máximo. Cuando se termina de recorrer la lista, el máximo número que se ha encontrado es el máximo de todo el conjunto.
Descripción formal
El algoritmo puede ser escrito de una manera más formal en el siguiente pseudocódigo:
| Algoritmo Encontrar el máximo de un conjunto |
función max(C) //C es un conjunto no vacío de números// n ← | C | // | C | es el número de elementos de C// m ← c0 para i ← 1 hasta n hacer si ci > m entonces m ← ci devolver m |
Sobre la notación:
- "←" representa una asignación: m ← x significa que la variable m toma el valor de x;
- "devolver" termina el algoritmo y devuelve el valor a su derecha (en este caso, el máximo de C).
Implementación
| En lenguaje C#: |
int max(int[] c, int n){ int i, m = c[0]; for (i = 1; i < n; i++) if (c[i] > m) m = c[i]; return m; } |
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.
La implementación de hardware de la mayoría de computadores es imperativa; lo que significa que este está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del programa está definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina nativo del computador (por ejemplo el lenguaje ensamblador).
Una Máquina de Turing (MT) es un modelo computacional que realiza una lectura/escritura de manera automática sobre una entrada llamada cinta, generando una salida en esta misma.
Este modelo está conformado por un alfabeto de entrada y uno de salida, un símbolo especial llamado blanco (normalmente b, Δ o 0), un conjunto de estados finitos y un conjunto de transiciones entre dichos estados. Su funcionamiento se basa en una función de transición, que recibe un estado inicial y una cadena de caracteres (la cinta, la cual es finita por la izquierda) pertenecientes al alfabeto de entrada. Luego va leyendo una celda de la cinta, borrando el símbolo, escribiendo el nuevo símbolo perteneciente al alfabeto de salida y finalmente avanza a la izquierda o a la derecha de celda por vez, repitiendo esto según se indique en la función de transición, para finalmente detenerse en un estado final o de aceptación, representando así la salida.
Suscribirse a:
Enviar comentarios (Atom)