2. OBJETIVOS
Conocer los principios básicos de los
algoritmos.
Establecer paralelos entre los algoritmos,
los programas y las máquinas de estado.
3. ALGORITMIA
Definición
Ciencia 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.
4. ALGORITMO
Un algoritmo es un conjunto de pasos
claramente definidos, que a partir de una
cierta entrada produce una determinada
salida.
5. 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.
6. 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.
7. 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.
8. 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 deterministico
no aporta dato alguno sobre la validez del
algoritmo.
9. Á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.
10. 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.
11. 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.
12. COSTO DE ESPACIO
Mide cuanta memoria (espacio) necesita
el algoritmo para funcionar correctamente.
13. 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.
14. DISEÑO DE ALGORITMOS
Algunas de las técnicas mas utilizadas en el
diseño de algoritmos son las siguientes:
Dividir para conquistar
Algoritmos aleatorizados
Programación dinámica
Algoritmos golosos Greedy
Algoritmos de heurísticos
Reducción a otro problema conocido
Uso de estructuras de datos que solucionen
el problema
15. 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.
16. MAQUINA DE TURING
La maquina de Turing
es el mas básico de
los modelos
computacionales y
fue propuesta por el
celebre matemático
Alan Turing.
17. 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.
18. MAQUINA DE TURING
El 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)
19. MAQUINA DE TURING
Una máquina de Turing con una sola cinta puede ser
definida como una 6-tupl, donde
Q 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.
20. 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.
21. 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
22. REPRESENTACIÓN DE LA
MAQUINA DE TURING
Podemos representar un programa para la maquina de Turing
como 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.
23. 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λ
24. Ejemplo 2
Copiar todas las “a” de la memoria a
continuación de las “b”
λλλλaaaλλλbbbbbλλλλλ→λλλλλλλbbbbbaaaλλλ
25. COSTOS
En la maquina de Turing, y en general para
cualquier algoritmo, los costos se pueden medir
de la siguiente forma:
Costo de tiempo
Costo de espacio
26. 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λ
27. COSTO DE ESPACIO
Se puede medir como la cantidad de estados
del programa.
Cada estado en la maquina de Turing
representa 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.
28. 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.
29. EFICIENCIA DE UN ALGORITMO
Desarrolle un algoritmo para cambiar una
bombilla.