Está en la página 1de 8

Cómo aprobar

Primero tenemos que aprobar la cursada de


esta materia, con un parcial escrito, pero
no rendimos su final. Luego, cursamos la
siguiente, la correlativa, y ahí hacemos un
final que nos aprueba las 2 materias.
Esta materia se complementa con su correlativa: teoría de la
computación. Según el profe, ahí es cuando se terminan de entender
algunos de los temas que se dan en esta materia.

Clase 1
Computadora: máquina capaz de computar; la máquina recibe una
entrada, computa algo y produce una salida.
Ciencias de la computación
Es una ciencia formal, que estudia objetos puramente abstractos. Algunos
de ellos son computación gráfica, simulación de procesos, inteligencia
artificial, etc. Se considera una ciencia fundamental, junto con la
electrónica, para la Era y revolución de la información. Shannon.

Problema intratable: son problemas/algorítmos que es posible ejecutarlo,


pero tardaría tantísimo tiempo (años y años), que se lo considera intratable.
Problema irresoluble: problemas que directamente no tienen solución.

Teoría de autómatas
Una expresión regular en un lenguaje de programación, es un autómata.
Un autómata es una máquina abstracta que dice si algo es o no es; si se
puede computar o no se puede computar. Esa es el concepto más básico y
sencillo de autómatas, pero, a medida que se fueron expandiendo las
capacidades y interfaces de estas máquinas, se fue viendo como se iban
transformando en computadoras.
Un autómata se define por tener entradas y salidas discretas: te puede
salir un número 1, un número 2, una w, una hola, etc, pero no te puede salir
1,54 o w…aa.
Existen diferentes tipos de autómatas, según su poder de cómputo.

Conjuntos
Un conjunto es una colección de elementos no repetidos y no ordenados.
La teoría está en la carpeta de matemáticas 3.

Hay 3 conceptos claves para los autómatas. Los alfabetos, palabras y


lenguajes. Estos 3 son conjuntos, por lo que también adquieren muchos de
sus conceptos como los conjuntos vacíos, uniones, intersecciones, etc.
Vamos a estar haciendo relaciones entre estos 3 conjuntos
constantemente. Por ejemplo, vamos a usar alfabetos para formar palabras,
y vamos a usar palabras para formar lenguajes.

Alfabeto
Un alfabeto es un conjunto finito y no vacío de símbolos indivisibles.
Estos símbolos pueden ser de distintos tipos.
A los alfabetos los designamos con Σ. Por ejemplo Σ = {0, 1} que
representa al alfabeto binario. O el Σ = {a,b,c,…,z} que repesenta al conjunto
de letras minúsculas.
Las gramáticas que utilizan los lenguajes de programación son formales,
de forma que hay reglas claras y fijas que aplican a todo el “alfabeto” del
lenguaje. Esto es esencial para que los autómatas funcionen correctamente.

Operaciones con alfabetos


1. Potencias de alfabeto: podemos ponerle una potencia de 𝑘 a un alfabeto
para obtener todas las combinaciones de palabras posibles con los
elementos de ese conjunto de 𝑘 longitud. La cantidad de elementos con
𝑘
Σ dependerá de la cantidad de elementos que tenga ese alfabeto. Por
ejemplo, para el alfabeto binario Σ = {0, 1}, podemos obtener:
0
Σ = {ε} (cualquier alfabeto elevado a la cero da ε)
1
Σ = {0, 1}
2
Σ = {00, 01, 10, 11}
3
Σ = {000, 001, 010, 011, 100, 101, 110, 111 }

Importante destacar cualquiera de estos alfabetos elevado a una
𝑘
potencia (Σ ) ya no cuentan como alfabetos sino como Lenguajes.
*
a. Clausura de Kleene (Σ ): el conjunto de todas las cadenas posibles
de un alfabeto, se lo llama Clausura de Kleene, o clausura de un
*
alfabeto. Se representa con el Σ y se lo puede escribir como
{0, 1} = {ε, 0, 1, 00, 01, 10, 11, 000, ...} o también como
* 0 1 2 3
Σ = Σ ⋃ Σ ⋃ Σ ⋃ Σ ...
i. En caso de que necesitemos la Clausura de Kleene, pero no
queramos que tenga la cadena vacía, podemos representar
+
eso con Σ

Palabra/Cadenas de caracteres
Una palabra la definimos como: una secuencia finita de símbolos
pertenecientes a un alfabeto. Osea, una palabra es generada usando los
símbolos de un alfabeto. También solemos llamar a las palabras como
cadenas de caracteres.
Las palabras las representamos generalmente usando letras como por
ejemplo w = 0101. Esta es una palabra formada por el alfabeto binario.
Existe una Cadena Vacía, que tiene cero símbolos. Es lo mismo que el
conjunto vacío que vimos antes. Se escribe con la letra épsilon ε.

Operaciones con palabras. Acá las llamamos cadenas


1. Longitud de cadena: el largo de la palabra. Lo mismo que el len(str).
Para palabras compuestas sólo por el elemento ε, su longitud es cero.
2. Subcadena: más conceptos robados de teoría de conjuntos, una
subcadena es una cadena que tiene al menos un elemento de la cadena
original.
3. Concatenación de cadenas: lo mismo que en informática, unir varias
cadenas de texto. Lo mismo que podemos hacer en python “Hola” +
“Mundo”, podemos hacer con las cadenas usando w = “Hola” y x =
“Mundo”, acá hacemos w.x = “HolaMundo”. El orden importa.
4. Se pueden elevar a diferentes potencias las cadenas. Una cadena al
cuadrado será una concatenación de la misma cadena 2 veces. Siguiendo
2
con el w de antes, 𝑤 = “HolaHola”. También se puede meter la
2 0
concatenación al medio y hacer cosas como 𝑤 . 𝑥 = “HolaHola”. Si hay
un elemento elevado a cero, entonces se convierte en una cadena vacía,
y funciona como si fuera un uno en la matemática de siempre; por eso
2 0
𝑤 . 𝑥 sigue dando el mismo resultado.
2
5. Para operaciones como (𝑥. 𝑧) , se hace siguiendo la lógica de siempre, se
resuelve lo de dentro del paréntesis y luego se aplica la potencia.
Lenguaje
Un lenguaje es un conjunto de cadenas, formadas por las palabras de un
alfabeto.
Por ejemplo, el lenguaje inglés y el español son lenguajes distintos, pero
todos pertenecen al mismo alfabeto. Esto es verdad incluso cuando, el
lenguaje inglés, no utiliza las “ñ”, “ll” o demás. Esto es debido a que los
lenguajes pueden ser un subconjunto selecto de los elementos del alfabeto.
Por lo tanto, el inglés y el español, comparten el mismo alfabeto.
Los lenguajes pueden ser descritos por extensión o comprensión, pero
por lo general lo vamos a hacer según comprensión.

Problemas a resolver en autómatas


Las problemáticas en esta teoría es determinar si una palabra forma parte
de un lenguaje. Por ejemplo, en este documento que estoy escribiendo
tenemos un autómata comprobando que cada palabra forma parte de un
lenguaje. Si escribo algo como aaaet, el autómata lo marcará como que no
forma parte del lenguaje español.
A un autómata le vamos a dar una cadena y el nos va a contestar si esa
cadena está o no dentro de ese lenguaje. Cada autómata será especializado
para cada lenguaje.
Clase 2
El otro grupo está haciendo un trabajo de autómatas temporales, aunque
no se vea la materia.

Al profe le gusta mucho la optimización, un proyecto de eso suma :)


Clase 3
Para lo del proyecto
Los otros alumnos se les ocurrió empezar a buscar ideas por las 17
recomendaciones por la ONU.
Mientras a más gran escala o industrial nos vayamos, más probable es
que ya haya alguien metido laburando en eso.
Su idea principal fue modelar un autómata para algo y ver cómo se puede
optimizar eso.

Autómatas finitos
Se dice que son finitos porque tienen una cantidad finita de estados.
También van a tener transiciones entre estos estados.

Vamos a trabajar con autómatas finitos deterministas (AFD) y no


deterministas (AFND). Cuando tenemos la información suficiente para
saber qué es lo que va a pasar, podemos usar un autómata determinista.
Cuando no tengamos suficiente información o exista información que no
sabemos que existe, podemos usar un autómata indeterminista.
Esta diferencia principal se ve reflejada en sus grafos dirigidos, donde los
deterministas no tienen ambigüedades en sus transiciones: desde un nodo,
sólo se puede transicionar con un valor, una vez. Mientras que, en los no
deterministas, de un nodo pueden salir varias transiciones que usen el
mismo valor.
Los autómatas aceptarán una cadena de caracteres, si dentro del grafo
dirigido, ocurren las transiciones necesarias para que, al revisar todos los
caracteres de la cadena, se llegue a un estado final (aka nodo final).
Ambos autómatas se representan con una tupla de 5 elementos. Por
ejemplo, para el autómata AFD tenemos: AFD = {𝐸, Σ, Ծ, 𝑒0, 𝐹 }. Cada uno
de estos representa algo, siendo:
1. 𝐸: conjunto finito de estados; los nodos del grafo. Si son más de uno
capaz que los tenemos que poner dentro de otros corchetes
2. Σ: alfabeto
3. Ծ: función de transición. Esta indica con notación cómo es que se puede
dar la transición de un estado a otro según la palabra ingresada. Si hacés
el grafo olvidate de esto, el propio grafo es una representación gráfica de
la función de transición. Le metés un símbolo cualquiera y ya está.
4. 𝑒0: estado inicial. El nodo al que le entra la flecha inicial
5. 𝐹 : conjunto de estados finales. Agarrá y poné todos los nodos que
tengan doble círculo acá
Tanto para los AFD como para los AFND la tupla es la misma, lo único que
debería cambiar
un toque es la
función de
transición.

Los lenguajes aceptados por los AFD y AFND son los lenguajes
regulares. Calculo que son lenguajes que tengan ciertas reglas en cómo se
forman sus palabras.

Autómata finito determinístico


Definición formal: Se dice que un autómata finito es determinístico, si
para todo estado del autómata existe como mucho una transición definida
para cada símbolo del alfabeto.

Autómata finito no determinístico


Definición formal: Se dice que un autómata finito es no determinístico,
si para algún estado del mismo y para igual símbolo de entrada del alfabeto,
se definan al menos dos transiciones.
De youtube

También podría gustarte