Guia Teoria de La Computacion

17
GUIA TEORIA DE LA COMPUTACION UVM Autómatas Finitos son modelos útiles para muchos elementos hardware y software: Los lenguajes nos permiten comunicarnos con la máquina, parte de lo que puede hacer la máquina depende del poder descriptivo del lenguaje Máquinas abstractas Autómatas Finitos. Autómatas de Pila. Autómatas linealmente acotados. Máquina de Turing Alfabeto: conjunto no vacío y finito de símbolos Ej: Σ={0, 1, ..., 9}, Σ={a, b, c, ..., z} Palabra (cadena): secuencia finita de símbolos de un determinado alfabeto. f:N→Σ f: cadena Ej: Σ={a, b, c, ..., z} Lenguaje: conjunto de palabras Ej: {1, 12, 123, 1234, 12345, 123456} es un lenguaje sobre Σ={0, 1, ..., 9} Ejemplo de AF Sistema: Interruptor. El sistema recuerda si está conectado (ON) o desconectado (OFF). El usuario lo presiona. Si está en OFF y es presionado pasa al estado ON. Si está en ON y es presionado pasa al estado OFF.

Transcript of Guia Teoria de La Computacion

Page 1: Guia Teoria de La Computacion

GUIA TEORIA DE LA COMPUTACION UVM

Autómatas Finitos son modelos útiles para muchos elementos hardware y software:

Los lenguajes nos permiten comunicarnos con la máquina, parte de lo que puede hacer la máquina depende del poder descriptivo del lenguaje

• Máquinas abstractas

– Autómatas Finitos.

– Autómatas de Pila.

– Autómatas linealmente acotados.

Máquina de Turing

• Alfabeto: conjunto no vacío y finito de símbolos

Ej: Σ={0, 1, ..., 9}, Σ={a, b, c, ..., z}

• Palabra (cadena): secuencia finita de símbolos de un determinado alfabeto. f:N→Σ f: cadena

Ej: Σ={a, b, c, ..., z}

• Lenguaje: conjunto de palabras

– Ej: {1, 12, 123, 1234, 12345, 123456} es un lenguaje sobre Σ={0, 1, ..., 9}

Ejemplo de AF

• Sistema: Interruptor.

• El sistema recuerda si está conectado (ON) o desconectado (OFF).

• El usuario lo presiona.

• Si está en OFF y es presionado pasa al estado ON.

• Si está en ON y es presionado pasa al estado OFF.

Page 2: Guia Teoria de La Computacion

• Un autómata finito no determinista (AFN) es un modelo matemático formado por :

• Un conjunto de estados S

• Un conjunto de símbolos de entrada Σ (alfabeto de símbolos de entrada)

• Una función de transición mueve que transforma pares estado-símbolo en conjunto de estados

• Un estado inicial so que se considera el estado de inicio.

• Un conjunto de estados F Considerados como estados de aceptación o final.

• Un autómata finito determinista (AFD) es un caso especial de un autómata no determinista donde:

Ningún estado tiene una transición ε, es decir, una transición con la entrada ε.

Page 3: Guia Teoria de La Computacion

Para cada estado s y cada símbolo de entrada a no hay a lo sumo una arista etiquetada a que sale de s

Autómatas de pila y Lenguajes independientes del Contexto

Los Lenguajes Libres de Contexto (LLC) forman una clase de lenguajes más amplia que los Lenguajes Regulares, de acuerdo con la Jerarquía de Chomsky.

• Funcionamiento de los Autómatas de Pila (informal)

– La pila tendrá un alfabeto propio, que puede o no coincidir con el alfabeto de la palabra de entrada.

– Esto se justifica porque puede ser necesario introducir en la pila caracteres especiales usados como separadores, según las necesidades de diseño del autómata.

Autómatas de pila y Lenguajes independientes del Contexto

– Al iniciar la operación de un AP, la pila se encuentra vacía.

– Durante la operación del AP, la pila puede ir recibiendo (y almacenando) caracteres, según lo indiquen las transiciones ejecutadas.

– Al final de su operación, para aceptar una palabra, la pila debe estar nuevamente vacía.

– En los AP las transiciones de un estado a otro indican, además de los caracteres que se consumen de la entrada, también lo que se saca del tope de la pila, así como también lo que se mete a la pila.

Autómatas de pila y Lenguajes independientes del Contexto

Page 4: Guia Teoria de La Computacion

– Para verificar el funcionamiento del autómata, podemos simular su ejecución, listando las situaciones sucesivas en que se encuentra, mediante una tabla que llamaremos “traza de ejecución”.

– Las columnas de una traza de ejecución para un AP son:

• El estado en que se encuentra el autómata.

• Lo que falta por leer de la palabra de entrada.

• El contenido de la pila.

Autómatas de pila y Lenguajes independientes del Contexto

Autómatas de pila y Lenguajes independientes del Contexto

• Formalización de los AP

Un autómata de pila es un séxtuplo (K, Σ, Г, Δ, s, F), donde

Page 5: Guia Teoria de La Computacion

Autómatas de pila y Lenguajes independientes del Contexto

• Autómatas de pila (pushdown automata)

– Para las CFG vamos a usar otro tipo de máquina reconocedora denominada autómata de pila.

– Se diferencian de los autómatas finitos en que se ayudan para sus transiciones de una memoria con estructura de pila.

– Como en los anteriores, la transición entre estados depende del símbolo leído y del estado actual, pero también del símbolo en lo alto de la pila.

– Cada transición implica la modificación de la pila.

– Es no determinista

Definición 14 Un autómata de pila se define como una 7-tupla

– AP = (Q; V; Σ; δ; q0; z0; F) en donde:

– Q es un conjunto finito de estados.

– V es el alfabeto de entrada.

– Σ es el alfabeto de la pila.

– q0 es el estado inicial.

– z0 es el símbolo inicial de la pila.

– F Ì Q es el conjunto de estados finales.

– δ es la función de transición:

δ : Q x (V È {λ}) x Σ→ 2Qx Σ *

Máquina de Turing

Page 6: Guia Teoria de La Computacion

• Es un modelo matemático simple de una computadora.

Modela la capacidad de cálculo de una computadora de propósito general

• La máquina de Turing añade a un autómata finito una “memoria externa”: una cinta de papel “ilimitada” hacia ambos extremos.

• Una máquina de Turing se puede definir como un autómata finito que se desplaza sobre una cinta de papel dividida en casillas

Page 7: Guia Teoria de La Computacion

• En cada paso el autómata lee el símbolo que hay en la casilla actual y lo emplea como símbolo de entrada. Cambia de estado, y produce un nuevo símbolo (que puede ser igual al leído), que es almacenado en la casilla sustituyendo al anterior. Además decide si avanza una casilla hacia la izquierda o hacia la derecha.

• El autómata comienza en un estado inicial y con un número finito de símbolos en la cinta. Al cabo de un tiempo llega a un estado final (de parada), y en la cinta queda el “resultado” de la computación.

• Formalmente, una máquina de Turing viene definida por los mismos términos que un autómata finito más una función que dado el estado y el símbolo de entrada decide la dirección del desplazamiento.

• En la práctica se puede definir una máquina de Turing dando un conjunto de 5-tuplas, de la siguiente forma: {estado, símbolo, nuevo_estado, nuevo_símbolo, dirección}

• Gráficamente se puede representar mediante un diagrama de estados que incorpore también la dirección.

Computabilidad

Encontrar la representación adecuada para la descripción de un problema

Computabilidad

Page 8: Guia Teoria de La Computacion

Describir

Encontrar las combinaciones de símbolos adecuadas para representar lo que se tiene en mente

Problemas Computables

Todo lo que se describe, se puede representar

ALGORITMO. Representación de la descripción de un proceso

Existe o no, un ALGORITMO que lo puede representar

Problemas No Computables

No se sabe si existe o no un algoritmo que lo pueda representar.

BASES DE DATOS RELACIONALES

• En las bases de datos relacionales, una tabla representa un conjunto de elementos únicos.

• Todos los elementos son diferentes, identificables y ordenables.

• Esto hace que pueda aplicárseles el cálculo de conjuntos y la lógica de primer orden.

• Se pueden manejar igualmente como las relaciones matemáticas; es decir, un registro en una tabla puede equipararse a un punto único en el espacio que puede relacionarse mediante una relación de transformación con un punto en otro espacio (otra tabla).

SQL, el lenguaje de consultas a bases de datos universalmente aceptado implementa la aritmética y cálculo relacional a sea, el cálculo y lógica de conjuntos

Complejidad computacional

Un área fundamental en la teoría de las ciencias computacionales es la teoría de la complejidad computacional y el análisis de los recursos necesarios para resolver problemas computacionales.

La teoría de la complejidad computacional estudia la manera de clasificar los algoritmos como buenos y malos de acuerdo a un criterio específico y también trata la manera de clasificar los problemas de acuerdo a la dificultad inherente a la búsqueda de su solución.

Para darles una solución existen diferentes técnicas de las cuales las más fundamentales son: la máquina determinística y la máquina no determinística.

Page 9: Guia Teoria de La Computacion

Máquina determinística: Es aquella en la cual para una misma entrada siempre se obtiene el mismo resultado.

Máquina no determinística: Es aquella en la cual para una misma entrada se pueden obtener resultados diferentes.

Existen algoritmos determinísticos y algoritmos no determinísticos de acuerdo con las técnicas usadas.

En un algoritmo determinístico, el resultado es único en el sentido de que cada instrucción tiene un resultado conocido dependiente del contexto.

Algoritmos no determinísticos donde algunas instrucciones den resultados no determinados de antemano.

Los investigadores en el área de la teoría de las ciencias computacionales han definido algunos modelos computacionales, tales como:

• Máquina de Turing.

• Circuitos booleanos.

• Máquinas aleatorias paralelas

• Una clase de complejidad computacional es el conjunto de problemas solubles en un modelo computacional particular y sujeto a recursos computacionales particulares.

• El hecho de saber que una máquina de Turing parará en un tiempo finito no es muy práctico si dicho tiempo es excesivo.

• Los problemas computacionales los podemos dividir en dos conjuntos

• Tratables: Problemas para los cuales existe un algoritmo de complejidad polinomial. A los problemas tratables se les conoce también como problemas P (de orden polinomial).

• Intratables: Problemas para los que no se conoce ningún algoritmo de complejidad polinomial. Asimismo a los problemas no tratables se les llama también NP (de orden no determinístico polinomial).

Árboles

Un árbol es una estructura de datos que puede definirse de forma recursiva como:

Una colección de nodos que puede ser vacía, o que en su defecto consiste de una raíz R y un número finito de estructuras tipo árbol T1,…,Tk, llamados subárboles, los cuales son disjuntos y sus respectivos nodos raíz están conectados a R.

Page 10: Guia Teoria de La Computacion

Raíz: es aquel elemento que no tiene antecesor; ejemplo: a

Rama: arista entre dos nodos.

Antecesor: un nodo X es es antecesor de un nodo Y si por alguna de las ramas de X se puede llegar a Y.

Sucesor: un nodo X es sucesor de un nodo Y si por alguna de las ramas de Y se puede llegar a X.

Grado de un nodo: el número de descendientes directos que tiene. Ejemplo: c tiene grado 2, d tiene grado 0, a tiene grado 2.

Hoja: nodo que no tiene descendientes: grado 0. Ejemplo: d

Nodo interno: aquel que tiene al menos un descendiente.

Nivel: número de ramas que hay que recorrer para llegar de la raíz a un nodo. Ejemplo: el nivel del nodo a es 1 (es un convenio), el nivel del nodo e es 3.

Altura: el nivel más alto del árbol. En el ejemplo de la figura 1 la altura es 3.

Anchura: es el mayor valor del número de nodos que hay en un nivel. En la figura, la anchura es 3.

Árboles binarios

Un árbol binario en un árbol en el cual cada nodo puede tener como máximo dos hijos.

Recursivamente un árbol binario puede definirse como: un árbol vacío, o un nodo raíz con un subárbol izquierdo y un subárbol derecho.

Cada nodo del árbol consiste en:

Un dato (cualquier cosa)

A

B D

G H I

C

E F

Page 11: Guia Teoria de La Computacion

Un apuntador al hijo izquierdo

Un apuntador al hijo derecho

Inicialmente el nodo raíz apunta a NULL.

En las hojas del árbol, los apuntadores hacia los hijos izquierdo y derecho son NULL.

Se denomina recorrido de un árbol el proceso que permite acceder una sola vez a cada uno de los nodos del árbol.

Cuando un árbol se recorre, el conjunto completo de nodos se examina.

Los algoritmos de recorrido de un árbol binario representan tres tipos de actividades comunes:

Visitar el nodo raíz

Recorrer el subárbol izquierdo

Recorrer el subárbol derecho

Estas tres acciones repartidas en diferentes ordenes proporcionan los diferentes recorridos del árbol.

Los más frecuentes tienen siempre en común recorrer primero el subárbol izquierdo y luego el subárbol derecho .

Los algoritmos anteriores se llaman pre –orden , post-orden , in-orden y su nombre refleja el momento en que se visita el nodo raíz .

En el in-orden la raíz esta en el medio del recorrido

en el pre-orden la raíz esta en el primero y

en el post-orden la raíz esta el ultimo:

RECORRIDO PRE-ORDEN

1- Visitar el nodo raíz

2- Recorrer el subárbol izquierdo en pre-orden

Page 12: Guia Teoria de La Computacion

3- Recorrer el subárbol derecho en pre-orden

RECORRIDO EN-ORDEN

1- Recorrer el subárbol izquierdo en in-orden

2- Visitar la raíz

3- Recorrer el subárbol derecho en in-orden

RECORRER POST-ORDEN

1- Recorrer el subárbol izquierdo en post-orden

2- Recorrer el subárbol derecho en post-orden

3- Visitar la raíz

Es una árbol:

Una colección de nodos que puede ser vacía, o que en su defecto consiste de un nodo raíz R y un número finito de estructuras tipo árbol T1,…,Tk, llamados subárboles, los cuales son disjuntos y sus respectivos nodos raíz están conectados a R.

Es binario:

Cada nodo puede tener como máximo dos hijos, en otras palabras, cada nodo sólo puede tener dos subárboles.

Es de búsqueda porqué:

Los nodos están ordenados de manera conveniente para la búsqueda.

Todas las datos del subárbol izquierdo son menores que el dato del nodo raíz, y todas los datos del subárbol derecho son mayores

Árboles desbalanceados

La figura muestra un árbol binario de búsqueda, sin embargo éste NO facilita la búsqueda de elementos.

El problema es que está muy desbalanceado.

La solución es balancearlo, y con ello asegurar que asegurar que tiempo promedio de búsqueda sea de O(log2N).

Page 13: Guia Teoria de La Computacion

Árboles AVL

Propuestos por Adelson-Velskii and Landis.

Árboles binarios con una condición de balance.

Esta condición es usada para asegurar que en todo momento la altura del árbol es O(log2N).

Condición de balance : para cada nodo del árbol, las alturas de sus subárboles izquierdo y derecho sólo pueden diferir como máximo en 1.

La condición de balance debe mantenerse después de cada operación de inserción o eliminación.

2

7

1 8

6

5

4