ALGORITMOS - · PDF filealgoritmo es independiente del lenguaje en el cual se programa, de la...

29
ALGORITMOS DIGITALES II Ing. Hugo Fdo. Velasco Peña Universidad Nacional © 2006

Transcript of ALGORITMOS - · PDF filealgoritmo es independiente del lenguaje en el cual se programa, de la...

ALGORITMOSDIGITALES II

Ing. Hugo Fdo. Velasco PeñaUniversidad Nacional© 2006

OBJETIVOS

Conocer los principios básicos de los algoritmos.Establecer paralelos entre los algoritmos, los programas y las máquinas de estado.

ALGORITMIA

DefiniciónCiencia del cálculo aritmético y algebraico; teoría de los números.

La algoritmia es uno de los pilares de la programación y su relevancia se muestra en el desarrollo de cualquier aplicación, más allá de la mera construcción de programas.

ALGORITMO

Un algoritmo es un conjunto de pasos claramente definidos, que a partir de una cierta entrada produce una determinada salida.

CARACTERÍSTICAS DE UN ALGORITMO

Todo algoritmo debe tener las siguientes características:

Debe ser preciso, es decir, cada instrucción debe indicar de forma inequívoca que se tiene que hacer. Debe ser finito, es decir, debe tener un número limitado de pasos. Debe ser definido, es decir, debe producir los mismos resultados para las mismas condiciones de entrada.

ALGORITMOS Y PROGRAMAS

Debemos distinguir algoritmo de programa un algoritmo es independiente del lenguaje en el cual se programa, de la maquina en la cual se implemente y de otras restricciones que hacen a la puesta en operación del algoritmo.

Desde el punto de vista del estudio de los algoritmos los mismos pueden considerarse como entidades matemáticas abstractas independientes de restricciones tecnológicas.

VALIDACIÓN DE UN ALGORITMO

Un algoritmo es correcto si el resultado que produce siempre resuelve un determinado problema a partir de una entrada valida.

Demostrar ya sea en forma rigurosa o intuitiva que un algoritmo es correcto es el primer paso indispensable en el análisis de un algoritmo.

Los algoritmos que no son correctos a veces pueden ser útiles si por ejemplo producen una respuesta aproximada a un problema particularmente difícil en forma eficiente.

ALGORITMOS DETERMINISTICOS

Un algoritmo es deterministico si la respuesta que produce se puede conocer a partir de los datos de entrada.

Un algoritmo es no deterministico cuando no es deterministico.

Que un algoritmo sea o no sea deterministicono aporta dato alguno sobre la validez del algoritmo.

ÁREAS DE LA ALGORITMIA

El estudio de los algoritmos se puede dividir en dos grandes categorías:

Análisis de algoritmos.Diseño de algoritmos.

ANÁLISIS DE ALGORITMOS

El analisis intenta determinar que tan eficiente es un algoritmo para resolver un determinado problema.

En general el aspecto mas interesante a analizar de un algoritmo son sus costos de espacio y tiempo.

COSTOS DE TIEMPO

Suele ser el mas importante indica cuanto tiempo insume un determinado algoritmo para encontrar la solución a un problema.Se mide en función de la cantidad o del tamaño de los datos de entrada.

COSTO DE ESPACIO

Mide cuanta memoria (espacio) necesita el algoritmo para funcionar correctamente.

DISEÑO DE ALGORITMOS

El diseño de algoritmos se encarga de encontrar cual es el mejor algoritmo para un problema determinado. En general existen algunos paradigmas básicos que pueden aplicarse para encontrar un buen algoritmo.Es claro que esta es una tarea dificil que requiere de conocimientos especicos y de una habilidad particular.

DISEÑO DE ALGORITMOS

Algunas de las técnicas mas utilizadas en el diseño de algoritmos son las siguientes:

Dividir para conquistarAlgoritmos aleatorizadosProgramación dinámicaAlgoritmos golosos GreedyAlgoritmos de heurísticosReducción a otro problema conocidoUso de estructuras de datos que solucionen el problema

MODELOS COMPUTACIONALES

Para poder estudiar en detalle un algoritmo debemos establecer un marco en el cual podamos probar y analizar un algoritmo, así como también que permita comparar dos algoritmos entre si.Este ambiente necesario para el estudio de los algoritmos se conoce como modelo computacional.

MAQUINA DE TURING

La maquina de Turinges el mas básico de los modelos computacionales y fue propuesta por el celebre matemático Alan Turing.

MAQUINA DE TURING

La maquina de Turing maneja tres símbolos que llamaremos, a, b y espacio.Además cuenta con una memoria infinita que puede verse como una cinta infinita.La maquina es capaz de leer en cada paso un símbolo de la cinta escribir el mismo u otro símbolo en la cinta y avanzar o retroceder una posición.

MAQUINA DE TURINGEl cómputo es determinado a partir de una tabla de estados de la forma:

Esta tabla toma como parámetros el estado actual de la máquina y el carácter leído de la cinta, dando la dirección para mover el cabezal, el nuevo estado de la máquina y el valor a ser escrito en la cinta.Con este aparato extremadamente sencillo es posible realizar cualquier cómputo que un computador digital sea capaz de realizar.

(estado, valor)→(nuevo estado, nuevo valor, dirección)

MAQUINA DE TURINGUna máquina de Turing con una sola cinta puede ser definida como una 6-tupl, dondeQ es un conjunto finito de estadosΓ es un conjunto finito de símbolos de cinta, el alfabeto de cinta

es el estado inicial es un símbolo denominado blanco, y es el único

símbolo que se puede repetir un número infinito de veces

es el conjunto de estados finales de aceptación es una función parcial

denominada función de transición, donde L es un movimiento a la izquierda y R es el movimiento a la derecha.

MÁQUINA UNIVERSAL DE TURING

Una máquina de Turing computa una determinada función parcial de carácter definido, y unívoca, definida sobre las secuencias de posibles cadenas de símbolos de su alfabeto.

En este sentido se puede considerar como equivalente a un programa de ordenador, o lo que es lo mismo, a un algoritmo.

MÁQUINA UNIVERSAL DE TURING

En 1947, Turing indicó:Se puede demostrar que es posible construir una máquina especial de este tipo que pueda realizar el trabajo de todas las demás. Esta máquina especial puede ser denominada máquina universal.

Esto pudo ser demostrado, y por lo tanto cualquier problema que una computadora pueda resolver puede resolverse en una maquina de Turing

REPRESENTACIÓN DE LA MAQUINA DE TURING

Podemos representar un programa para la maquina de Turingcomo un autómata de estados finitos donde cada estado tiene la siguiente notación

donde s1 es el símbolo que la maquina lee de la cinta, s2 es el símbolo que la maquina escribe en la cinta en la misma posición donde leyó s1 y el +1 o -1 indica si se avanza o se retrocede una posición en la cinta. La flecha indica cual es el estado hacia el cual se desplaza la maquina que podría ser el mismo estado donde estaba antes.

Ejemplo 1

En algún lugar de la cinta se pueden encontrar dos o mas letras “a” seguidas. Copiar una “b” a continuación de la última “a”

λaaaλ → λaaabλ

Ejemplo 2

Copiar todas las “a” de la memoria a continuación de las “b”

λλλλaaaλλλbbbbbλλλλλ→λλλλλλλbbbbbaaaλλλ

COSTOSEn la maquina de Turing, y en general para cualquier algoritmo, los costos se pueden medir de la siguiente forma:

Costo de tiempoCosto de espacio

COSTO DE TIEMPO

Es la cantidad de transiciones cambios de estado que realiza la maquina, contando también aquellas transiciones que parten de un estado y vuelven al mismo.

Por ejemplo nuestro programa para la máquina de Turing del ejemplo 1 Para el caso λaaaaλ insume 5 transiciones y la cinta queda de la forma λaaaabλ

COSTO DE ESPACIOSe puede medir como la cantidad de estados del programa.

Cada estado en la maquina de Turingrepresenta una cierta memoria por lo que medir la cantidad de estados es una buena forma de medir el costo espacial.

Nuestro primer algoritmo para la maquina de Turing tiene 4 estados.

EFICIENCIA DE UN ALGORITMO

En la maquina de Turing el análisis de la eficiencia de un algoritmo pasa por averiguar si no existe un programa que pueda resolver el mismo problema en forma mas rápida empleando menos transiciones o bien utilizando menos espacio menor cantidad de estados.

EFICIENCIA DE UN ALGORITMO

Desarrolle un algoritmo para cambiar una bombilla.