You are on page 1of 111

ISAE UNIVERSIDAD

LICENCIATURA EN INFORMÁTICA

ESPECIALIZACIÓN EN AUDITORÍA DE

SISTEMAS

MÓDULO DE APRENDIZAJE

MATEMÁTICA DISCRETA PARA LA

COMPUTADORA

PROFESOR

HERNÁN ESPINOSA

PRESENTADO POR

YESENIA GONZALEZ

Presentado por YESENIA GONZALEZ céd 4-239-906


INTRODUCCIÓN

La Matemática discreta es la parte de la matemática encargada del

estudio de los conjuntos discretos: finitos o infinitos numerables. En

oposición a la matemática continua, que se encarga del estudio de conceptos

como la continuidad y el cambio continuo, la matemática discreta estudia

estructuras cuyos elementos pueden contarse uno por uno separadamente.

Es decir, los procesos en matemática discreta son contables, como por

ejemplo, los números enteros, grafos y sentencias de lógica.

Mientras que el cálculo infinitesimal es primordial en el estudio de procesos

analógicos, la matemática discreta es la base de todo lo relacionado con los

procesos digitales, y por tanto, se constituye en parte fundamental de la

ciencia de la computación, una de las ramas de estudio impartidas en los

estudios de Ingeniería Informática.

La clave en matemáticas discretas es que no es posible manejar las ideas de

proximidad o límite y suavidad en las curvas, como se puede en el cálculo.

Por ejemplo, en matemáticas discretas una incógnita puede ser 2 o 3, pero

nunca se aproximará a 3 por la izquierda con 2.9, 2.99, 2.999, etc. Las

gráficas en matemáticas discretas vienen dadas por un conjunto finito de

puntos que puedes contar por separado, es decir sus variables son discretas

Presentado por YESENIA GONZALEZ céd 4-239-906


o digitales, mientras que las gráficas en cálculo son trazos continuos de

rectas o curvas, es decir sus variables son continuas o analógicas.

Presentado por YESENIA GONZALEZ céd 4-239-906


LA DEMOSTRACIÓN EN MATEMÁTICA

LA INDUCCIÓN MATEMÁTICA

La demostración matemática es una sucesión coherente de pasos que,


tomando como verdadero un conjunto de premisas llamado hipótesis,
permite asegurar la veracidad de una tesis. Estos pasos deben estar
fundamentados en la aplicación de reglas de deducción (fundadas ya sea en
axiomas o en teoremas anteriormente demostrados o en reglas básicas de
deducción del sistema en cuestión). El hecho de no conocer ninguna
demostración de un teorema no implica su no veracidad; sólo la
demostración de la negación de este resultado implica que es falso.

La inducción matemática es un razonamiento que permite demostrar una


infinidad de proposiciones, o una proposición que depende de un parámetro
n que toma una infinidad de valores enteros. En términos simples, la
inducción matemática consiste en el siguiente razonamiento:
Premisa mayor: El número entero a tiene la propiedad P.
Premisa menor: El hecho de que cualquier número entero n tenga la
propiedad P implica que n + 1 también la tiene.
Conclusión: Todos los números enteros a partir de a tienen la propiedad P.

TECNICAS DE DEMOSTRACIÓN EN MATEMÁTICAS

En general no existe un procedimiento único de demostración de teoremas,


sí existen diferentes tipos de demostraciones que son utilizados comúnmente
en matemáticas:
1. Demostración por contraposición (formalizado y utilizado, en los
silogismos, por Aristóteles).

Presentado por YESENIA GONZALEZ céd 4-239-906


Con este método se intenta demostrar directamente la validez de B ⇒ A, lo
cual, según la contrapositiva, equivale a demostrar que A ⇒ B es válido.
¿(∀x∈Z) (x múltiplo de 10 ⇒ múltiplo de 5?; en realidad, si queremos usar la
contrapositiva, la pregunta es equivalente a ¿(∀x∈Z) (x no es múltiplo de 10
⇒ no múltiplo de 5?. Con A y B definidos anteriormente;

¬B ≡ (∀n∈Z) (x≠n•5), un entero (n=k•2), (∀k∈Z) (x≠k•2•5)≡(∀k∈Z)


(x≠k•10)≡¬A

2. Demostración por reducción al absurdo (formalizado y utilizado


por Aristóteles), y como caso particular, descenso infinito.

Este método consiste en demostrar la validez de (A ^ B) ⇒ 0, lo cual, según


la tautología "reducción al absurdo", implica la validez de A ⇒ B.
¿Si un número real sumado consigo mismo es él mismo, entoces tal número
es el cero?

sea x∈R, A∧¬B ≡ (x+x=x)∧(x≠0)

Al ser x≠0, podemos dividir 2x=x entre x, lo cual conduce a la contradicción


2=1

PRINCIPIO DE INDUCCIÓN MATEMATICA (FUERTE Y DEBIL)

El principio de Inducción Matemática es un método que se utiliza para


demostrar propiedades, formulas, validarlas y probar que son verdaderas.
Es un método simple que consta de tres pasos fundamentales en los cuales
se debe demostrar la propiedad reemplazando su incógnita por 1, luego por
k y finalmente por k+1.

Presentado por YESENIA GONZALEZ céd 4-239-906


INDUCCIÓN FUERTE

La inducción fuerte o inducción completa es un método de demostración


matemático similar a la inducción matemática común, pero difiere en el
razonamiento de lo que queremos demostrar. Se toma un número fijo y se
toma como hipótesis que es cierto para otro número fijo mayor que éste y
para todos los que están entre ellos. Así, la afirmación es cierta sólo si
también se cumple para el sucesor de este último número.

Llamamos paso básico a A, paso inductivo fuerte a B y hipótesis inductiva


fuerte a (∀ r≤k) (P(r) verdadero).

A ≡ P(n1) verdadero

B ≡(∀k≥n1) (((∀r≤k)(P(k) verdadero)⇒ P(s(k)) verdadero)

A∧B ⇒ (∀n∈S) (P(n) verdadero)

INDUCCIÓN DEBIL

El método de inducción débil o inducción desplazada, que usa un


razonamiento en cierto modo inverso a este, ya que toma como base la
hipótesis de que es cierta para el antecesor del que se quiere demostrar.
El procedimiento es válido considerando que los elementos de lo que
queremos demostrar pertenecen a un conjunto inductivo. Es decir, el
conjunto de todas las afirmaciones es un conjunto inductivo.

Llamamos paso básico a A, paso inductivo débil a B y hipótesis inductiva


débil a P(k).

Presentado por YESENIA GONZALEZ céd 4-239-906


A ≡ P(n1) verdadero

B ≡(∀k≥n1) (P(k) verdadero)⇒ P(s(k)) verdadero)

A∧B ⇒ (∀n∈S) (P(n) verdadero)

INDUCCIÓN ESTRUCTURAL

La inducción estructurada es un método de demostración utilizado en Lógica


matemática, teoría de los grafos, Computación y en otras áreas. Se trata de
una generalización de la inducción matemática.
Dado un conjunto C con un orden parcial bien fundamentado < sobre sus
elementos, la prueba de una propiedad P(x) para todo elemento x de C se
realiza por inducción estructural basándose en la siguiente regla de
inferencia:

La prueba por inducción estructural consiste en demostrar que una


proposición se cumple para todos los elementos mínimos del tipo, y que si la
propiedad se cumple para todas las subestructuras de una cierta estructura
S, entonces se debe cumplir también para S. Por ejemplo, si la estructura es
una lista, normalmente se introduce el orden parcial '<' tal que L < M
siempre que exista x tal que x::L=M Bajo este orden, la lista vacía [] es el
único elemento mínimo. Así, una prueba por inducción estructural de una
proposición P(l) consta de dos partes: Una prueba de P([]) y una prueba de
P(L) implica P(x::L).

Presentado por YESENIA GONZALEZ céd 4-239-906


RELACIONES DE RECURRENCIA

Una relación de recurrencia para una sucesión es una


fórmula que expresa cada término a partir de cierto , en función
de uno o más de los términos que le preceden. Los valores de los términos
necesarios para empezar a calcular se llaman condiciones iniciales. Se dice
que una sucesión es una solución de la relación de recurrencia si su término
general verifica dicha relación.

Ejemplo: Los conejos y la secuencia de Fibonacci

Una joven pareja de conejos es colocada en una isla. Un par de conejos no


se reproduce hasta que tiene 2 meses de edad. Después que estos tienen los
2 meses de edad, cada par produce un nuevo par. Encuentre una relación de
recurrencia para el número de pares de conejos en la isla al cabo de n
meses, asumiendo que ningún conejo muere.

R// Denotaremos por fn el numero de conejos después de n meses.


Notemos que al finalizar el primer mes el numero de pares es f1=1
Igualmente al finalizar el segundo mes el numero de pares es f2=1
Para encontrar el número de pares después de n meses adicione al número
de parejas en el mes previo fn-1 el número pares recién nacidos el cual es
equivalente a fn-2, puesto que cada par recién nacido viene de un par de al
menos 3 meses de edad. Consecuentemente {fn} satisface la relación de
recurrencia:

fn = fn-1 + fn-2 para n≥3. (Secuencia de Fibonacci)


Las relaciones de recurrencia pueden ser usadas para contar cadenas de bits
de una longitud especificada que tiene cierta propiedad

Presentado por YESENIA GONZALEZ céd 4-239-906


METODO DE ITERACIÓN

Un método iterativo trata de resolver un problema (como una ecuación o un


sistema de ecuaciones) mediante aproximaciones sucesivas a la solución,
empezando desde una estimación inicial. Esta aproximación contrasta con
los métodos directos, que tratan de resolver el problema de una sola vez
(como resolver un sistema de ecuaciones Ax=b encontrando la inversa de la
matriz A). Los métodos iterativos son útiles para resolver problemas que
involucran un número grande de variables (a veces del orden de millones),
donde los métodos directos tendrían un coste prohibitivo incluso con la
potencia del mejor computador disponible.

Método Newton – Raphson

Este método, el cual es un método iterativo, es uno de los más usados y


efectivos. A diferencia de los métodos anteriores, el método de Newton-
Raphson no trabaja sobre un intervalo sino que basa su fórmula en un
proceso iterativo.

Supongamos que tenemos la aproximación a la raíz de ,

Presentado por YESENIA GONZALEZ céd 4-239-906


Trazamos la recta tangente a la curva en el punto ; ésta cruza al

eje en un punto que será nuestra siguiente aproximación a la raíz

Para calcular el punto , calculamos primero la ecuación de la recta


tangente. Sabemos que tiene pendiente

Y por lo tanto la ecuación de la recta tangente es:

Hacemos :

Y despejamos :

Que es la fómula iterativa de Newton-Raphson para calcular la siguiente


aproximación:
,
si

Note que el método de Newton-Raphson no trabaja con intervalos donde


nos asegure que encontraremos la raíz, y de hecho no tenemos ninguna
garantía de que nos aproximaremos a dicha raíz. Desde luego, existen
ejemplos donde este método no converge a la raíz, en cuyo caso se dice que
el método diverge. Sin embargo, en los casos donde si converge a la raíz lo

Presentado por YESENIA GONZALEZ céd 4-239-906


hace con una rapidez impresionante, por lo cual es uno de los métodos
preferidos por excelencia.

Método Gauss Seidel

Es un método iterativo, es decir que debe aplicarse recursivamente hasta


encontrar una solución adecuada o con un error considerablemente
pequeño.

En cada iteración obtenemos una solución posible del sistema con un error
determinado, a medida que aplicamos nuevamente el método, la solución
puede ser más precisa, entonces se dice que el sistema converge, pero si al
aplicar el método reiteradas veces la solución tiene un error (ya
explicaremos como se calcula este error) cada vez mayor se dice que el
sistema no converge y no se puede resolver el sistema de ecuaciones por
este método.

Teniendo el siguiente sistema de ecuaciones:

Despejamos x1 de la ecuación 1, x2 de la ecuación 2, … , xn de la ecuación


n, quedando:

Presentado por YESENIA GONZALEZ céd 4-239-906


Desde la formula anterior resultan las fórmulas que se deberán ir aplicando
en las diferentes iteraciones. Para comenzar a aplicar el método debemos
asignar un valor arbitrario a las variables x2,…xn con el fin de obtener x1. Lo
mas conveniente en este caso es que los valores comiencen en cero, lo cual
nos facilitaría el trabajo ya que se reduce el cálculo de las primeras
soluciones, entonces de esto resulta que:

Ahora despejamos x2 de la ecuación 2 y reemplazamos a x1 por el valor


obtenido en la ecuación anterior. De esto nos queda:

Una vez que tenemos x2, despejamos x3 de la ecuación 3 y así


sucesivamente con las n ecuaciones, cada vez asignando el valor de las x1,
x2, … xn-1 obtenido en el paso anterior.
Cuando hemos despejado las xn, tenemos lo que se conoce como primera
solución o solución de la primera iteración:

Con los nuevos valores de x1, x2,…,xn aplicamos los mismos pasos
anteriores pero con los nuevos valores de las xn, de esta manera
conseguimos una segunda solución:

Presentado por YESENIA GONZALEZ céd 4-239-906


Al tener esta segunda solución estamos en condiciones de calcular el error
que se calcula como sigue:

Así, repetimos el método tantas veces hasta que el error sea muy pequeño o
los suficientemente aceptable.
Ahora solo queda mencionar que para que un sistema sea convergente se
debe cumplir que la matriz de coeficientes sea diagonalmente dominante, y
para ello se debe verificar la siguiente expresión:

Si no se cumple esa condición, se puede permutar las filas de la matriz, con


el fin de poder convertirla en una diagonalmente dominante.

Presentado por YESENIA GONZALEZ céd 4-239-906


ECUACIONES EN DIFERENCIA

Una ecuación en diferencias es una expresión que relaciona distintas


sucesiones, siendo una de ellas una sucesión desconocida.

Son similares a las ecuaciones diferenciales, sustituyendo las funciones por


sucesiones.

La Ecuación en Diferencia

Es una ecuación que muestra la relación entra valores consecutivos de una


secuencia y la diferencia entre ellos. Usualmente se escribe en una ecuación
recurrente para que la salida del sistema se pueda calcular de las entradas
de la señal y sus valores anteriores.

y[n] +7y[n−1] +2y[n−2] =x[n] −4x[n−1]

ECUACION EN DIFERENCIA

Una ecuación ordinaria en diferencias es una ecuación que contiene una o


más diferencias de una función desconocida cuyo argumento es el tiempo:

f(Yt, ∆ Yt, ∆ 2Yt, ∆ 3Yt, ...... ∆ nYt)

Donde ∆ representa el operador retardo. Si el argumento no es únicamente


el tiempo la ecuación pierde el calificativo de ordinaria y pasa a denominarse
ecuación en diferencias finitas parciales.

En el contexto del análisis de series temporales, una ecuación de yt en


diferencias es aquella en la que yt dependerá de sus valores retardados,
del tiempo y de otras variables. Lo fundamental, en nuestro caso, será la

Presentado por YESENIA GONZALEZ céd 4-239-906


aparición de los propios valores retardados de la variable yt. Un paseo
aleatorio sin deriva del tipo:
Yt +1 = Yt + Et +1

Es una ecuación en diferencias con un componente estocástico (ε t).


En el contexto del análisis de series temporales, interesa principalmente lo
que se denomina Ecuación en diferencias lineal de orden “n” con
coeficientes constantes. La expresión genérica de esta ecuación es:

Donde los coeficientes ai se suponen constantes (parámetros) y los “n”


términos yt-i son de orden uno (ecuación lineal). El término xt se denomina
“proceso de fuerza3” y puede explicitarse de formas muy diversas:
función del tiempo, valores actuales y/o retardados de otras variables y/o
perturbaciones aleatorias. Por ejemplo, para ao=0, a1=1 y xt=et tenemos la
formulación tradicional del paseo aleatorio anterior.

Forma estructural y reducida de una ecuación en diferencias

Una ecuación en la forma estructural expresa la variable endógena en


función de valores actuales de otra endógena. La forma reducida, por el
contrario, puede incluir valores retardados de la propia endógena o de otras
endógenas pero nunca valores contemporáneos. En el contexto de un
modelo multiecuacional de series temporales una ecuación en su forma
reducida puede ser expresada en su forma estructural. Una ecuación
univariante en su forma reducida es aquella en la que la endógena es
expresada exclusivamente en función de retardos de ella misma.

Presentado por YESENIA GONZALEZ céd 4-239-906


SOLUCIÓN DE ECUACIONES EN DIFERENCIAS: Conceptos previos

Igual que el resto de ecuaciones matemáticas, las llamadas ecuaciones en


diferencias admiten una solución para la variable incógnita, en nuestro caso
yt. La solución de una ecuación en diferencias será generalmente otra
función, no un único valor.
La función solución expresará Yt en función de “t” y de los elementos del
proceso de fuerza (e incluso excepcionalmente de algunos valores iniciales
de Yt denominados condiciones iniciales). Esta solución, lo será si
transforma la ecuación en diferencias en una identidad para cualquier valor

del proceso de fuerza Xt y cualquier valor de t. Por ejemplo, para la ecuación


simple en diferencias:

la función y t c t = 2 + , donde “c” es un término constante cualquiera, es


una solución: sustituyendo yt e yt-1 se comprueba enseguida la igualdad:

No se deben confundir soluciones de una ecuación con formas reducidas de


la misma. La solución de una ecuación en diferencias no puede incluir
retardos de la propia incógnita salvo en el caso antes comentado de que sea
necesario considerar condiciones iniciales de partida para Yt.
Es interesante advertir el significado de la solución de una ecuación.
Partiendo de una ecuación en la que postulamos que yt puede expresarse en
función de valores pasados propios Yt -1, Yt -2...etc., la solución de esta

ecuación en diferencias nos informa de cómo se forman los valores de Yt por


el “paso del tiempo”, es decir de la variable “t” y del resto de términos de la

Presentado por YESENIA GONZALEZ céd 4-239-906


ecuación en diferencias (por ejemplo, en el paseo aleatorio, por el

componente ε t).

Ejemplo:

Partiendo de la ecuación en diferencias

Su solución permite observar el patrón de formación temporal de los valores de yt.


Efectivamente, sin entrar por ahora en su cálculo, la solución a esta ecuación
podría ser:

Esta solución permite observar el patrón de formación temporal de los valores de


yt en el siguiente gráfico:

Presentado por YESENIA GONZALEZ céd 4-239-906


ALGEBRAS DE BOOLE

Las álgebras booleanas constituyen un área de las matemáticas que ha


pasado a ocupar un lugar prominente con el advenimiento de la
computadora digital. Son usadas ampliamente en el diseño de circuitos de
distribución y computadoras, y sus aplicaciones van en aumento en muchas
otras áreas. En el nivel de lógica digital de una computadora, lo que
comúnmente se llama hardware, y que está formado por los componentes
electrónicos de la máquina, se trabaja con diferencias de tensión, las cuales
generan funciones que son calculadas por los circuitos que forman el nivel.
Estas funciones, en la etapa de diseño del hardware, son interpretadas como
funciones de Boole.

El álgebra de Boole (también llamada Retículas booleanas) en informática y


matemática, es una estructura algebraica que rigorizan las operaciones
lógicas Y, O y NO, así como el conjunto de operaciones unión, intersección y
complemento.

Presentado por YESENIA GONZALEZ céd 4-239-906


Se denomina así en honor a George Boole, (2 de noviembre de 1815 a 8 de
diciembre de 1864), matemático inglés que fue el primero en definirla como
parte de un sistema lógico a mediados del siglo XIX. El álgebra de Boole fue
un intento de utilizar las técnicas algebraicas para tratar expresiones de la
lógica preposicional. En la actualidad, el álgebra de Boole se aplica de forma
generalizada en el ámbito del diseño electrónico. Claude Shannon fue el
primero en aplicarla en el diseño de circuitos de conmutación eléctrica
biestables, en 1948.

Teoremas Fundamentales

A continuación se presentan los teoremas principales del álgebra de Boole,


los cuales son la base del trabajo subsecuente. Es posible demostrar dichos
teoremas por cualquiera de los siguientes métodos:
1. Algebraicamente (empleando postulados y teoremas ya demostrados).
2. Gráficamente (por medio de los diagramas de Venn).
3. Por inducción perfecta (empleando tablas de verdad).
Aquí se empleará el método algebraico pues se considera la mejor
manera de iniciarse en esta álgebra, además de que sólo se demostrarán los
teoremas primales, pero aplicando las reglas de dualidad.

T.1. Teoremas sobre la UNICIDAD.


1.a. El elemento 0 es único.
1.b. El elemento 1 es único.
Demostración de 1.a.
Por contradicción, supóngase que 0 y 01 son neutros aditivos, por lo que
deben satisfacer al postulado P.3.a, es decir:
A + 0 = A y A1 + 01 = A1
Si A1 = 0 y A = 01 y como 0 es neutro, por suposición, entonces:
01 + 0 = 0 (1)
Además como 01 es neutro, por suposición, entonces:
0 + 01 = 0 (2)
De (1) y (2) se tiene:
01 = 0

Presentado por YESENIA GONZALEZ céd 4-239-906


con lo que se demuestra el teorema.

T.2. Teoremas sobre la EQUIPOTENCIA.


2.a. A + A = A
2.b. A . A = A

Demostración de 2.a.
A + A = (A + A) . 1 (P.3.b.)
A + A = (A + A) . (A + A') (P.6.a.)
A + A = A + (A . A') (P.5.a)
A+A=A+0 (P.6.b.)
A+A=A (P.3.a.)

T.3. TEOREMA
3.a. A + 1 = 1
3.b. A . 0 = 0

Demostración de 3.a.
A + 1 = 1 . (A + 1) (P.3.b.)
A + 1 = (A + A') . (A + 1) (P.6.a)
A + 1 = A + (A' . 1) (P.5.a)
A + 1 = A + A' (P.3.b.)
A+1=1 (P.6.a.)

T.4. Teoremas de ABSORCIÓN.


4.a. A + (A . B) = A
4.b. A . (A + B) = A

Demostración de 4.a.
A + (A . B) = (A . 1) + (A . B) (P.3.b.)
A + (A . B) = A . (1 + B) (P.5.b.)
A + (A . B) = A . 1 (T.3.a.)
A + (A . B) = A (P.3.b.)

T.5. El elemento A' es único.

Demostración
Por contradicción, supóngase que existen dos elementos distintos A'1 y A'2,
tales que satisfacen los postulados P.6.a. y P.6.b., es decir:
A + A'1 = 1 y A + A'2 = 1
A . A'1 = 0 y A . A'2 = 0

Presentado por YESENIA GONZALEZ céd 4-239-906


Entonces:
A'2 = 1 . A'2 (P.3.b)
A'2 = (A + A'1) . A'2 (por suposición)
A'2 = (A . A'2 ) + (A'1 . A'2) (P.5.b.)
A'2 = 0 + (A'1 . A'2) (por suposición)
A'2 = (A . A'1) + (A'1 . A'2) (por suposición)
A'2 = (A + A'2) . A'1 (P.5.b)
A'2 = 1 . A'1 (por suposición)
A'2 = A'1 (P.3.b.)

T.6. TEOREMA Para toda A en M, A = A''


Demostración
Sea A'' = X, por tanto:
A' + X = 1 y A' , X = 0 (P.6.)
Pero:
A' + A = 1 y A' . A = 0 (P.6.)
Así que tanto X como A' satisfacen el postulado P.6. como el complemento
de A, por tanto:
X = A, es decir, A'' = A

T.7. Teoremas de ABSORCIÓN


7.a. A . [(A + B) + C] = [(A + B) + C] . A = A
7.b. A + [(A . B) . C] = [(A . B) . C] = A

Demostración de 7.a.
A . [(A + B) + C] = A . (A + B) + (A . C) (P.5.b.)
A . [(A + B) + C] = (A . A) + (A . B) + (A . C) (P.5.b.)
A . [(A + B) + C] = A + (A . B) + (A . C) (T.2.)
A . [(A + B) + C] = A . (1 + B + C) (P.5.b.)
A . [(A + B) + C] = A . 1 (T.3.)
A . [(A + B) + C] = A (P.3.b.)

T.8. Teoremas sobre la ASOCIACIÓN.


8.a. A + (B + C) = (A + B) + C
8.b. A . (B . C) = (A . B) . C
Demostración de 8.a.
Sea:
Z = [(A + B) + C] . [A + (B + C)]
Z = {A . [(A + B) + C]} + {(B + C) . [(A + B) + C]} (P.5.b.)
Z = A + {(B + C) . [(A + B) + C]} (T.7.)
Z = A + {B . [(A + B) + C] + C . [(A + B) + C]} (P.5.b.)
Z = A + {B + C . [(A + B) + C]} (T.7.)
Z = A + (B + C) (T.7.)
(1)

Presentado por YESENIA GONZALEZ céd 4-239-906


Como:
Z = [(A + B) + C] . [A + (B + C)]
Z = {(A + B) . [A + (B + C)]} + {C . [A + (B + C)]} (P.5.b.)
Z = {(A + B) . [A + (B + C)]} + C (T.7.)
Z = {A . [A + (B + C)] + B . [A + (B + C)]} + C (P.5.b.)
Z = {A . [A + (B + C)] + B} + C (T.7.)
Z = (A + B) + C (T.7.)
(2)
Por consiguiente, de (1) y (2) y por transitividad:
Z = A + (B + C) = (A + B) + C = A + B + C

T.9. Teoremas sobre la COMPLEMENTACIÓN.


9.a. A + (A' . B) = A + B
9.b. A . (A' + B) = A . B

Demostración de 9.a.
A + (A' . B) = (A + A') . (A + B) (P.5.a.)
A + (A' . B) = 1 . (A + B) (P.6.a.)
A + (A' . B) = A + B (P.3.b.)

T.10. Teoremas de DeMORGAN.


10. a. (A + B)'' = A' . B'
10.b. (A . B)' = A' + B'

Demostración de 10.a.
Primera parte:
(A + B) + (A' . B') = [(A + B) + A'] . [(A + B) + B'] (P.5.a.)
(A + B) + (A' . B') = [A' + (A + B)] . [(A + B) + B'] (P.4.a.)
(A + B) + (A' . B') = [(A' + A) + B] . [A + (B + B')] (T.8.)
(A + B) + (A' . B') = (1 + B) . (A + 1) (P.6.a.)
(A + B) + (A' . B') = 1 . 1 (T.3.a.)
(A + B) + (A' . B') = 1 (T.2.b.)
(1)
Segunda parte:
(A + B) . (A' . B') = (A' . B') . (A + B) (P.4.b.)
(A + B) . (A' . B') = (A' . B' . A) + (A' . B' . B) (P.5.b.)
(A + B) . (A' . B') = 0 + 0 (P.6.b.)
(A + B) . (A' . B') = 0 (T.2.a.)
(2)
Por tanto, de (1) y (2) se concluye que:
(A + B)' = A' . B'

T.11. TEOREMA
11.a. (A . B) + (A' . C) + (B . C) = (A . B) + (A' . C)

Presentado por YESENIA GONZALEZ céd 4-239-906


11.b. (A + B) . (A' + C) . (B + C) = (A + B) . (A' + C)
Demostración de 11.a.
(A . B) + (A' . C) + (B . C) = (A . B . 1) + (A' . 1 . C) + (1 . B . C) = (P.3.b.)
= [A . B . (C + C')] + [A' . (B + B') . C] + [(A + A') . B . C ] = (P.6.b.)
= (A B C) + (A B C') + ( A' B C) + (A' B' C) + (A B C) + (A' B C) = (P.5.b.)
= (A B C) + (A B C') + ( A' B C) + (A' B' C) = (T.2.)
= [A . B . (C + C')] + [A' . C . (B + B')] = (P.5.a.)
= (A . B . 1) + (A' . C . 1) (P.6.a.)
(A . B) + (A' . C) + (B . C) = (A . B) + (A' . C) (P.3.b.)

T.12. TEOREMA
12.a. (A . B) + (A . B' . C) = (A . B) + (A . C)
12.b. (A + B) . (A + B' + C) = (A + B) . (A + C)

Demostración de 12.a.
(A . B) + (A . B' . C) = A . [B + (B' . C)] (P.5.b.)
(A . B) + (A . B' . C) = A . [(B + B') . (B + C)] = A . (B + C) (T.9.a.)
(A . B) + (A . B' . C) = (A . B) + (A . C) (P.5.b.)

T.13. TEOREMA
13.a. (A . B) + (A . B') = A
13.b. (A + B) . (A + B') = A

Demostración de 13.a.
(A . B) + (A . B') = A . (B + B') (P.5.b.)
(A . B) + (A . B') =A.1 (P.6.b.)
(A . B) + (A . B') =A

Para fácil referencia, los teoremas se resumen en la siguiente tabla:

TEOREMA PRIMAL TEOREMA DUAL


T.1.a. 0 es único T.1.b. 1 es único
T.2.a A + A = A T.2.b. A . A = A
T.3.a. A + 1 = A T.3.b. A . 0 = 0
T.4.a. A + (A . B) = A T.4.b. A . (A + B) = A
T.5. A' es único No tiene
T.6. A = A'' No tiene
T.7.a. A . [(A + B) + C] = [(A + B) + C] . A = A T.7.b. A + [(A . B) . C] = [(A . B) . C] + A = A
T.8.a. A + (B + C) = (A + B) + C T.8.b. A . (B . C) = (A . B) . C
T.9.a. A + (A' . B) = A + B T.9.b. A . (A' + B) = A . B
T.10.a. (A + B)' = A' . B' T.10.b. (A . B)' = A' + B'
T.11.a. (A . B) + (A' . C) + (B . C) = (A . B) + (A' .C ) T.11.b. (A + B)(A' + C)(B + C) = (A + B)(A' + C)
T.12.a. (A . B) + (A . B' . C) = (A . B) + (A . C) T.12.b. (A + B)(A + B' + C) = (A + B) (A + C)
T.13.a. (A . B) + (A . B') = A T.13.b. (A + B) . (A + B') = A

Presentado por YESENIA GONZALEZ céd 4-239-906


Forma normal de funciones booleanas

Otra manera importante de expresar expresiones booleanas es la forma


normal. Tiene la misma estructura básica suma de productos o producto de
sumas, pero no se requiere que los términos sean mintérminos o
maxtérminos.

Por ejemplo:

La siguiente es una forma normal suma de productos:

La siguiente es una forma normal producto de sumas:

El Algebra de Boole es un sistema matemático que utiliza variables y


operadores lógicos. Las variables pueden valer 0 o 1. Y las operaciones
básicas son OR (+) y AND (·).

Luego se definen las expresiones de conmutación como un número finito de


variables y constantes, relacionadas mediante los operadores (AND y OR).
En la ausencia de paréntesis, se utilizan las mismas reglas de precedencia,
que tienen los operadores suma (OR) y multiplicación (AND) en el algebra
normal.

Compuertas Lógicas

Existen dispositivos electrónicos que son capaces de representar funciones


de conmutación. Estos dispositivos denominan Compuertas Lógicas y están
construidos a base de silicio.
Las compuertas lógicas son altamente usadas en el campo de la electrónica
digital, debido al bajo costo que se logra con la alta densidad de integración.

Presentado por YESENIA GONZALEZ céd 4-239-906


Las compuertas corresponden a bloques fundamentales para la construcción
de circuitos lógicos y sistemas digitales.
Una red de compuertas lógicas constituye un circuito combinacional.

Las compuertas pueden tener más de una o dos entradas. Por ejemplo la
ecuación de conmutación F(A, B, C) = A · B · C

Puede ser representada por:

O bien por:
RAE

Las compuertas lógicas se pueden encontrar en dispositivos pequeños de


uso general, llamadas pastillas lógicas TTL. Su numeración corresponde a
74LSXXX.

Presentado por YESENIA GONZALEZ céd 4-239-906


También existen dispositivos con alta densidad de integración como PLA,
CPLD y FPGA.

Las pastillas lógicas internamente están diseñadas con varias compuertas,


dependiendo de la pastilla. Por ejemplo un 74LS32 internamente es de la
siguiente forma:

Compuerta OR-EX o XOR

Es OR EXclusiva en este caso con dos entradas (puede


tener más) y lo que hará con ellas será una suma
lógica entre a por b invertida y a invertida por b.*Al
ser O Exclusiva su salida será 1 si una y sólo unade
sus entradas es 1*

Presentado por YESENIA GONZALEZ céd 4-239-906


Compuertas Lógicas Combinadas

Al agregar una compuerta NOT a cada una de las compuertas anteriores los
resultados de sus respectivas tablas de verdad se invierten, y dan origen a
tres nuevas compuertas llamadas NAND, NOR y NOR-EX. Veamos ahora
como son y cuál es el símbolo que las representa...

Compuerta NAND
Responde a la inversión del producto lógico de sus entradas, en su
representación simbólica se reemplaza la compuerta NOT por un círculo a la
salida de la compuerta AND.

Compuerta NOR
El resultado que se obtiene a la salida de esta compuerta resulta de la
inversión de la operación lógica o inclusiva es como un no a y/o b . Igual
que antes, solo agregas un círculo a la compuerta OR y ya tienes una NOR.

Compuerta NOR-EX
Es simplemente la inversión de la compuerta OR-EX, los resultados se
pueden apreciar en la tabla de verdad, que bien podrías compararla con la

Presentado por YESENIA GONZALEZ céd 4-239-906


anterior y notar la diferencia, el símbolo que la representa lo tienes en el
siguiente gráfico.

Buffer's
En realidad no realiza ninguna operación lógica, su finalidad es amplificar un
poco la señal (o refrescarla si se puede decir). Como puedes ver en el
siguiente gráfico la señal de salida es la misma que de entrada.

Circuitos Lógicos

Todos los circuitos lógicos digitales, desde el más simple contador hasta el
más sofisticado micro-procesador, son hechos interconectando
combinaciones de simples "bloques de construcción", llamados compuertas
lógicas (Logic gates).

Hay cuatro compuertas básicas, y ellas son diseñadas de acuerdo a su


función como SI, NO, Y, O, o sea, las cuatro expresiones sencillas mínimas
con las cuales se puede responder a situaciones de la vida real.
Cada una de estas compuertas básicas tiene una o más entradas, una sola
salida, y una pareja de terminales para conexión a la fuente de poder (pilas,
baterías, adaptador de corriente, etc.). En las compuertas bipolares, hechas
con la misma tecnología de los transistores corrientes PNP o NPN, conocidas

Presentado por YESENIA GONZALEZ céd 4-239-906


como compuertas TLL, el voltaje de la fuente de alimentación debe estar
entre 4.75 y 5.25 voltios, por lo que popularmente se trabaja con el punto
medio de este rango, o sea 5 voltios Vcc. Las compuertas hechas con
tecnología CMOS son más susceptibles a dañarse por la electricidad estática
debido al manipuleo mientras se instalan en el circuito a ensamblar, pero
luego permiten un rango bastante amplio en el voltaje de alimentación:
funcionan desde 3 Vcc hasta 15 Vcc.

Varias combinaciones de los BITS binarios 0 y 1 pueden ser aplicadas a las


entradas de una compuerta, asumiendo que un cierto voltaje bajo
representa al !cero! y un cierto voltaje alto equivale al bit "uno", esto es
llamado lógica positiva; en la lógica negativa se invierten las definiciones.

BIT: Es una sigla formada con las palabras "dígito binario", y se refiere a los
dos símbolos 0 y 1 utilizados en el sistema binario para calcular y medir. Por
simple conveniencia, para facilitar el paso de un sistema al otro, se adoptó el
bit "cero" como igual al número decimal "0", y el bit "uno" como igual al
número decimal "1"(se conservaron igual estos dos símbolos), pero las
combinaciones se leen diferentes. Veamos un ejemplo: La expresión
numérica 110 tiene en decimal 3 cifras y se lee "ciento diez"; tiene en
binario tres bits y se lee "uno-uno-cero".

En electrónica digital, más concretamente en el sistema numérico binario, no


se habla de números de "tantas cifras", como en el sistema decimal, sino
que se dice que es un WORD de "tantos bits". WORD significa "palabra" en
ingles, pero en este caso se emplea más bien como sinónimo de número, o
combinación de varios símbolos para expresar una cierta cantidad.

Aunque un word puede tener cualquier cantidad de bits, se ha popularizado

Presentado por YESENIA GONZALEZ céd 4-239-906


entre los especialistas de computadoras en uso de words con ocho bits;
estos son llamados sencillamente BYTES. Un word que tenga cuatro bits es
denominado NIBLE. Veamos un ejemplo:

0001011100101001 Es un word con dieciséis bits; es un word con dos bytes,


o sencillamente es un word con cuatro nibles.

00010111 00101001 Es un word igual al anterior, pero separados los bytes


para una mejor visualización. Igual que en el sistema decimal, los bits "cero"
al comienzo de un word (lado izquierdo) no representan ninguna cantidad,
pero se acostumbra colocarlos para facilitar el manejo en los circuitos
electrónicos de cómputo.

La compuerta que simula la condición "SI", tiene solamente un a entrada y


una salida. Transmite a la salida el mismo estado lógico "alto" o "bajo" que
haya en la entrada (bit 1 o bit 0), por lo cual es generalmente usada para
interconexión (INTERFACE) de circuitos lógicos no compatibles
electrónicamente entre sí (diferentes impedancias, otros voltajes o
corrientes, etc.). Se les conoce a estas compuertas con el nombre de
BUFFER, por su acción reforzadora, pero es bueno aclarar que dicho término
se aplica también a otras compuertas muy diferentes, para indicar que
tienen salida apta para INTERFACE. La compañía National semiconductor
vende un encapsulado con seis buffer "SI", referencia 7407, para ser
alimentado con los 5 Vcc típicos ara TLL, pero una salida de cada buffer
puede mover una carga que esté conectada a una fuente no mayor de 30
voltios y no consuma más de 40 miliamperios (la referencia 7417 tiene
salida hasta un máximo de 15 voltios, y los mismos 40 miliamperios de
capacidad de carga).

Presentado por YESENIA GONZALEZ céd 4-239-906


La compuerta que simula la condición lógica "NO", tiene la propiedad de
invertir a la salida la señal o nivel presente en la entrada. Se le utiliza
también para servir de interfase (interconexión) entre dos circuitos que
estén alimentados por fuentes de voltaje distinto.

Entrega un estado bajo en su terminal de salida cuando a su única entrada


llega una señal con voltaje dentro del rango establecido como "alto". La
anterior condición lo convierte en un BUFFER NEGADOR o simplemente
compuerta !NO" (NOT).

La compuerta "NO" invierte o complementa el estado lógico de su única


entrada, por lo que se le conoce también como INVERSOR. La función "NO"
es generalmente indicada por una barra o vínculo sobre el símbolo, para
indicar que una entrada o una salida ha sido invertida. Así, si A es 0 y B es
1, tendremos que A = B(con línea arriba de la b, y algunas veces escrita
como "no B").

La National Semiconductor tiene también en forma integrada, en un solo


encapsulado dual in line, seis buffer inversores, referencia 7406 o referencia
7416. Las salidas de los inversores 7406 soportan cargas conectadas a una
fuente de hasta 30 voltios y proporcionan 40 miliamperios en su estado
bajo. La referencia 7416 es solamente para un máximo de 15 voltios. En
ambos casos el voltaje Vcc, o sea su propia fuente de alimentación, no debe
ser menor de 4.75 ni mayor de 5.25.

la compuerta que simula la condición "Y" (AND) es un circuito con capacidad


para "decidir", con dos o más entradas. La única salida de la compuerta AND
es nivel lógico 0, a menos que todas sus entradas tengan nivel lógico 1.
Solamente cuando las entradas A y B y C... estén en "uno", la salida será

Presentado por YESENIA GONZALEZ céd 4-239-906


también "uno". La compuerta que simula la condición "0" (OR) es también
un circuito que hace decisiones, con dos o más entradas. Su salida es lógica
1 cuando cualquiera o todas sus entradas tienen un nivel lógico 1. Basta con
que las entradas A o B o C estén en 1, para que la salida pase a 1.

Simplificación de Circuitos Lógicos

Una vez que se obtiene la expresión booleana para un circuito lógico,


podemos reducirla a una forma más simple que contenga menos términos,
la nueva expresión puede utilizarse para implantar un circuito que sea
equivalente al original pero que contenga menos compuertas y conexiones.

El álgebra booleana (Algebra de los circuitos lógicos tiene muchas leyes o


teoremas muy útiles tales como:

1. Ley de Morgan:

o 1. A + B = A·B

2. A·B = A + B

2. Ley Distributiva:

o 3. A+(B·C) = (A+B)·(A+C)

4. A·(B+C) = A·B+A·C

Además de las leyes formales para las funciones AND y OR :

 5. A·0 = 0 ; A+0 = A

6. A·1 = A; A+1 = 1

Presentado por YESENIA GONZALEZ céd 4-239-906


7. A·A = A; A+A = A
8. A·A = 0; A+A = 1

Y la Ley de la Involución:

 9. A(negada) = A

Considerar la expresión booleana A·B + A·B + A·B = Y, un diagrama lógico


de ésta expresión aparece en la Figura 1. Observar que deben utilizarse seis
puertas para implementar este circuito lógico, que realiza la lógica detallada
en la tabla de verdad (Tabla 1)

Figura 1: Circuito lógico no simplificado

ENTRADAS SALIDA
B A Y
0 0 0
0 1 1
1 0 1
1 1 1
Tabla 1: Tabla de verdad de la función OR

Figura 2: Circuito lógico simplificado

Presentado por YESENIA GONZALEZ céd 4-239-906


Aplicando el álgebra booleana:

A·B + A·B + A·B = Y

RAZONES

= A·B + (A·B + A·B) , Propiedad asociativa

= A·B + B·(A+A) , 4. [A·(B + C) = A·B + A·C]

= A·B + B·1, 8. [A + A = 1]

= A·B + B, 6. [B·1 = B]

= B + A·B, Propiedad conmutativa

= (B + A)·(B + B) , 3. [A + (B·C) = (A + B)·(A + C)]

= (B + A)·1 , 8. [A + A = 1]

= B + A , 6. [A * 1 = A]

Concluimos entonces que una sola puerta OR de dos entradas realiza la


misma función (¡De hecho la tabla 1 corresponde a la función OR!).

RELACIONES DE EQUIVALENCIA Y RELACIONES DE ORDEN

Sea K un conjunto dado no vacío y R una relación binaria definida sobre K.


Se dice que R es una relación de equivalencia si cumple las siguientes
propiedades:

• Reflexividad: Todo elemento de K está relacionado consigo mismo.


Es decir,

• Simetría: Si un elemento de K está relacionado con otro, entonces


ese otro elemento también se relaciona con el primero. Es decir,

Presentado por YESENIA GONZALEZ céd 4-239-906


• Transitividad: Si un elemento de K está relacionado con otro, y ese
otro a su vez se relaciona con un tercero, entonces el primero estará
relacionado también con este último. Es decir,

Una relación de equivalencia R sobre un conjunto K puede denotarse con el


par ordenado .

Clases de Equivalencia

La relación de equivalencia define subconjuntos disjuntos en K llamados


clases de equivalencia de la siguiente manera: Dado un elemento , al
conjunto dado por todos los elementos relacionados con a

se le llama la clase de equivalencia asociada al elemento a. Al elemento a se


le llama representante de la clase.

Presentado por YESENIA GONZALEZ céd 4-239-906


Se llama orden al número de clases que genera una relación de
equivalencia; si éste es finito, se dice que la relación es de orden finito.

El concepto de clase de equivalencia tiene importancia en ciencia, dado un


conjunto de objetos o entidades abstractas (potencialmente infinitas),
pueden establecerse relaciones de equivalencia en base a algún criterio, las
clases resultantes son los "tipos" en los que se puede clasificar toda la gama
de objetos.

Una relación R en A, es una relación de equivalencia, si R es reflexiva,


simétrica y transitiva (RST).

• Se define clase de equivalencia del elemento a, como:

[a] = {x ∈ A / x R a}

[a] = {Los vértices desde donde se llega a a, en un solo paso}

• El conjunto de todas las clases de equivalencia de A, es el conjunto


A/R, denominado el conjunto cociente:

A/R = {[a] / a ∈A }

• Ejm.: A={0,1,2,3,4,5,6}
R={(x,y) ∈ A*A / (x-y) es divisible por 3}

R= {(0,0), (0,3), (0,6), (1,1), (1,4), (2,2), (2,5), (3,0), (3,3), (3,6),
(4,1),(4,4), (5,2), (5,5), (6,0), (6,3), (6,6)}

Presentado por YESENIA GONZALEZ céd 4-239-906


R={(x,y) ∈ A*A / (x-y) es divisible por 3}
El gráfico de R será:

3
0

Observar los 3 grupos que se


6
forman, en cada uno de ellos, los
elementos están totalmente
relacionados.
1 4 Estos grupos se denominan
“bloques de partición”, aquí hay
3 bloques de partición:
{0,3,6},{1,4} y {2,5}
2 5

• [0]={x ∈ A / (x-0) es divisible por 3}={0,3,6}


• [1]={x ∈ A / (x-1) es divisible por 3}={1,4}
• [2]={x ∈ A / (x-2) es divisible por 3}={2,5}
• [3]={x ∈ A / (x-3) es divisible por 3}={0,3,6}=[0]
• [4]={1,4} = [1]
• [5]={2,5} = [2]
• [6]= [3] = [0]
• A/R = {[0], [1], [2]} = {{0,3,6},{1,4},{2,5}}= CONJUNTO COCIENTE

• Teorema: Sea R una relación de equivalencia en A, con a, b ∈ A,


entonces:
• [a] = [b] ↔ a R b
• [a] ≠ [b] ↔ [a]∩[b] = Ø
• Partición: Una partición de un conjunto no vacío A, es una colección
P= {A1, A2, ..An}, de subconjuntos no vacíos de A, tales que:
• Ai∩Aj = Ø , si i ≠ j
• A1∪A2 ∪…∪An = A
Los subconjuntos Ai, son llamados bloques de partición.
• Teorema:
Concordancia entre Relaciones de equivalencia y Particiones
• Dada una relación de equivalencia R en A, entonces,
el conjunto cociente A/R es una partición de A.
• Dada una partición P de A, entonces se puede formar
una relación de equivalencia R, definida por:
x R y ↔ Ai ∈P, tal que: x∈Ai ∧ y∈Ai

Presentado por YESENIA GONZALEZ céd 4-239-906


Particiones

En el área de computación muchos algoritmos de búsqueda se basan en una


técnica que “particiona” de manera sucesiva un conjunto A en subconjuntos
cada vez más pequeños, haciendo que el procedimiento de búsqueda sea
más eficiente.

Definición de Partición de un conjunto. Una partición de un conjunto A


es una colección de subconjuntos de A, los cuales son no vacíos y disyuntos
entre sí cuya unión es A. Formalmente, una partición de un conjunto A es

una familia de subconjuntos no vacíos de A, con las siguientes


propiedades:

Cada conjunto se llama celda o bloque de la partición.

Ejemplo:

Sea . Cada una de las siguientes colecciones son


particiones de A.

Presentado por YESENIA GONZALEZ céd 4-239-906


Ejemplo:

Cada una de los siguientes conjuntos son particiones de .

• = el conjunto de números pares, = el conjunto de números


impares.

La siguiente definición de clase de equivalencia, nos servirá para mostrar


como las relaciones de equivalencia y las particiones son descripciones del
mismo concepto.

Definición Clase de equivalencia. Sean A un conjunto y R una relación de


equivalencia en A. Para cada , la clase de equivalencia de x con
respecto a R es el conjunto definido como sigue:

En otras palabras, es el conjunto de todos los elementos de A que están


relacionados con x.

Cuando solamente una relación de equivalencia R se esté considerando,


escribiremos en vez de .

Ejemplo:

Sea y consideremos la siguiente relación de equivalencia en A:

Entonces

Presentado por YESENIA GONZALEZ céd 4-239-906


Ejemplo:

Consideremos las siguientes relaciones de equivalencia en .

Dado , tenemos que:

Ejemplo:

Consideremos la relación de equivalencia congruencia módulo 5.

Dado , tenemos que:

Es decir, la clase de equivalencia del entero a es el conjunto de números y


para los cuales la diferencia es un múltiplo de 5. Así, por ejemplo,

Presentado por YESENIA GONZALEZ céd 4-239-906


Como se observa en este ejemplo,

Conjunto de números con residuo 0 cuando se dividen por 5.

Conjunto de números con residuo 1cuando se dividen por 5.

Conjunto de números con residuo 2 cuando se dividen por 5.

Conjunto de números con residuo 3 cuando se dividen por 5.

Conjunto de números con residuo 4 cuando se dividen por 5.

Además, se tiene que .

En general para todo para algún . Es decir cada entero


pertenece a exactamente uno de estos cinco conjuntos.

De manera más en general para la relación de equivalencia congruencia


módulo

n: , denotamos la clase de equivalencia que contiene


a como . Esto es,

Generalizando el caso n = 5 podemos concluir que dado un entero positivo


n,

Presentado por YESENIA GONZALEZ céd 4-239-906


=conjunto de números con residuo r cuando
se dividen por n.

Además s tiene que:

para todo .
Es decir cada entero pertenece a exactamente uno de estos n conjuntos. Por
lo tanto la colección de las clases de equivalencia de la relación congruencia
módulo n es una partición de con n elementos.

El resultado anterior se cumple en general para cualquier relación de


equivalencia: la colección de las clases de equivalencia de una relación de
equivalencia en un conjunto A forman una partición de A. Para demostrar
este resultado utilizaremos el siguiente teorema.

Teorema Supongamos que R una relación de equivalencia en un conjunto

. Entonces

Demostración:

Como es reflexiva entonces . Luego por definición de clase


de equivalencia, .

Hay que demostrar las dos implicaciones:

( i ) Supongamos que . Hay que probar que:

Presentado por YESENIA GONZALEZ céd 4-239-906


.

( ii )supongamos que .

por la parte . Por lo tanto . Entonces .

Demostraremos que:

De esta forma concluimos que

La parte (c) del teorema anterior afirma que las clases de equivalencias solo
se pueden relacionar de dos maneras: son idénticas o disyuntas.

Mostraremos en el siguiente teorema como una relación de equivalencia


particiona un conjunto.

Conjunto Cociente

Sea una relación de equivalencia definida en el conjunto K, llamaremos a


K/ el conjunto cociente de K por a la partición de K formada por todas
las clases de equivalencia determinadas en K por ~. Es decir, el conjunto

Presentado por YESENIA GONZALEZ céd 4-239-906


cociente es el conjunto de todas las clases de equivalencia que se puedan
formar con los elementos de K, mediante

El conjunto de todas las clases de equivalencia se denomina conjunto


cociente y se lo suele denotar como:

Tal como muestra la definición anterior el conjunto cociente es un


subconjunto del conjunto de partes de K.

Relaciones de Orden

Sea R una relación binaria en un conjunto A. Si R satisface las propiedades


reflexiva, antisimétrica y transitiva se dice que R es una relación de orden.
En este caso si a y b son elementos de A tales que aRb, lo denotaremos por
a · b.

Si · verifica la propiedad de que dados a y b en A, entonces a · b o b · a,


entonces la relación · se denomina de orden total.

Sean A y B dos conjuntos tales que B µ A y · una relación de orden en A.


Podemos entonces definir varios elementos notables de A:
a) Elemento minimal de A es todo aquel elemento a 2 A tal que si b · a
entonces a = b.
b) Elemento maximal de A es todo aquel elemento a 2 A tal que si a · b
entonces a = b.
c) Mínimo de A es el elemento a de A tal que a · b para todo b 2 A.
d) Máximo de A es el elemento a de A tal que b · a para todo b 2 A.
e) Cota inferior de B es cualquier elemento a 2 A tal que a·b para todo b 2 B.
f) Cota superior de B es cualquier elemento a 2 A tal que b·a para todo b2 B.
g) Ínfimo de B, es el máximo de las cotas inferiores de B.
h) Supremo de A, es el mínimo de las cotas superiores de B.

Presentado por YESENIA GONZALEZ céd 4-239-906


Relación de orden total

Sea A un conjunto dado, es una relación de orden total si y solo si todos


los elementos de A se relacionan entre sí, es decir,

• Ejemplo es totalmente ordenado. En efecto, es:


o Reflexivo: entonces (porque por definición, )

o Antisimétrico: si y entonces

o Transitivo: si y entonces

Relación de orden parcial

Sea A un conjunto dado, es una relación de orden parcial si y solo si al


menos un par de elementos de A se relacionan entre sí, es decir,

tal que .

• Ejemplo. Sea el conjunto X = {1,2,3} y el conjunto potencia de X,


definido por:

Entonces es parcialmente ordenado, pues sean

Pero

Nótese que las relaciones de orden total son un caso particular de las
relaciones de orden parcial.

Presentado por YESENIA GONZALEZ céd 4-239-906


Relación de orden densa

Véase también: Conjunto denso

Una relación de orden parcial ≤ sobre un conjunto X se dice densa (o


densa-en -sí-misma) si, para todo x e y en X tales que x < y (x ≤ y y x ≠
y), existe otro z en X tal que x < z < y.

• Ejemplo 1: Los números racionales con la ordenación habitual son un


conjunto densamente ordenado, al igual que los números reales. Si q1
< q2 entonces tenemos que q3 := (q1+q2)/2 satisface que: q1 < q3 <
q2.
• Ejemplo 2: Los números enteros por otro lado con la ordenación
habitual no son un conjunto densamente ordenado ya que entre un
número entero y su siguiente no existe un número intermedio.

GRUPOS Y TEORIAS ALGEBRAICAS DE LA CODIFICACION

Métrica de Hamming

En informática, el código de Hamming es un código detector y corrector de


errores que lleva el nombre de su inventor, Richard Hamming. En los datos
codificados en Hamming se pueden detectar errores en un bit y corregirlos,
sin embargo no se distingue entre errores de dos bits y de un bit (para lo
que se usa Hamming extendido). Esto representa una mejora respecto a los
códigos con bit de paridad, que pueden detectar errores en sólo un bit, pero
no pueden corregirlo.

Paridad

La paridad consiste en añadir un bit, denominado bit de paridad, que indique


si el número de los bits de valor 1 en los datos precedentes es par o impar.
Si un solo bit cambiara por error en la transmisión, el mensaje cambiará de

Presentado por YESENIA GONZALEZ céd 4-239-906


paridad y el error se puede detectar (nótese que el bit donde se produzca el
error puede ser el mismo bit de paridad). La convención más común es que
un valor de paridad de 1 indica que hay un número impar de unos en los
datos, y un valor de paridad de 0 indica que hay un número par de unos en
los datos.

La comprobación de paridad no es muy robusta, dado que si cambia de


forma uniforme más de un solo bit, el bit de paridad será válido y el error no
será detectado. Por otro lado, la paridad, aunque puede detectar que hay
error, no indica en qué bit se cometió. Los datos se deben desechar por
entero y volverse a transmitir. En un medio ruidoso, una transmisión
correcta podría tardar mucho tiempo o incluso, en el peor de los casos, no
darse nunca. El chequeo de paridad, aunque no es muy bueno, usa un único
bit, por lo que produce muy poca sobrecarga, y además permite la
corrección de ese bit si es conocida su posición.

Códigos de Hamming

Si se añaden junto al mensaje más bits detectores-correctores de error y si


esos bits se pueden ordenar de modo que diferentes bits de error producen
diferentes resultados, entonces los bits erróneos podrían ser identificados.
En un conjunto de siete bits, hay sólo siete posibles errores de bit, por lo
que con tres bits de control de error se podría especificar, además de que
ocurrió un error, en qué bit fue.

Hamming estudió los esquemas de codificación existentes, incluido el de dos


entre cinco, y generalizó sus conclusiones. Para empezar, desarrolló una
nomenclatura para describir el sistema, incluyendo el número de los bits de
datos y el de los bits detectores-correctores de error en un bloque. Por
ejemplo, la paridad incluye un solo bit para cualquier palabra de datos, así

Presentado por YESENIA GONZALEZ céd 4-239-906


que las palabras del Código ASCII que son de siete bits, Hamming las
describía como un código (8.7), esto es, un total de 8 bits de los cuales 7
son datos. En el ejemplo anterior de la repetición, sería un código (3.1),
siguiendo la misma lógica. La relación de la información es el segundo
número dividido por el primero, por nuestro ejemplo de la repetición, 1/3.

Hamming también estudió los problemas que surgían al cambiar dos o más
bits a la vez y describió esto como "distancia" (ahora llamada distancia de
Hamming en su honor). La paridad tiene una distancia de 2, dado que
cualquier error en dos bits no será detectado. La repetición (3.1)tiene una
distancia de 3, pues son necesarios el cambio simultáneo de tres bits para
obtener otra palabra de código. La repetición (4.1) (cada bit se repite cuatro
veces) tiene una distancia de 4, así que el cambio de dos bits en el mismo
grupo quedará sin definir.

Hamming estaba interesado en solucionar simultáneamente dos problemas:


aumentar la distancia tanto como sea posible, a la vez que se aumentan al
máximo los bits de información. Durante los años 40 desarrolló varios
esquemas de codificación que mejoraban notablemente los códigos
existentes. La clave de todos sus sistemas era intercalar entre los bits de
datos los de paridad.

El algoritmo de Hamming (7.4) puede corregir cualquier error de un solo bit,


pero cuando hay errores en más de un bit, la palabra transmitida se
confunde con otra con error en un sólo bit, siendo corregida, pero de forma
incorrecta, es decir que la palabra que se corrige es otra distinta a la
original, y el mensaje final será incorrecto sin saberlo. Para poder detectar
(aunque sin corregirlos) errores de dos bits, se debe añadir un bit más, y el
código se llama Hamming extendido. El procedimiento para esto se explica
al final.

Presentado por YESENIA GONZALEZ céd 4-239-906


El algoritmo es el siguiente:

1. Todos los bits cuya posición es potencia de dos se utilizan como bits
de paridad (posiciones 1, 2, 4, 8, 16, 32, 64, etc.).
2. Los bits del resto de posiciones son utilizados como bits de datos
(posiciones 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, etc.).
3. Cada bit de paridad se obtiene calculando la paridad de alguno de
los bits de datos. La posición del bit de paridad determina la secuencia
de los bits que alternativamente comprueba y salta, a partir de éste,
tal y como se explica a continuación.

• Posición 1: salta 0, comprueba 1, salta 1, comprueba 1,


etc.
• Posición 2: salta 1, comprueba 2, salta 2, comprueba 2,
etc.
• Posición 4: salta 3, comprueba 4, salta 4, comprueba 4,
etc.
• Posición 8: salta 7, comprueba 8, salta 8, comprueba 8,
etc.
• Posición 16: salta 15, comprueba 16, salta 16, comprueba
16, etc.
• Regla general para la posición n es: salta n-1 bits,
comprueba n bits, salta n bits, comprueba n bits...
• Y así sucesivamente.

En otras palabras, el bit de paridad de la posición 2k comprueba los bits en


las posiciones que tengan al bit k en su representación binaria. Dicho a la
inversa, el bit 13, por ejemplo, es chequeado por los bits 8, 4 y 1, al ser
estos los de su representación binaria: 13=1101(2); 8=1000(2); 4=0100(2);
1=0001(2).

Presentado por YESENIA GONZALEZ céd 4-239-906


Así, por ejemplo, para los primeros términos se tiene:

• En la Posición 1 (2^0 = 1), comprobaríamos los bits: 3, 5,


7, 9, 11, 13...
• En la Posición 2 (2^1 = 2), los bits: 3, 6, 7, 10, 11, 14,
15...
• En la Posición 4 (2^2 = 4), los bits: 5, 6, 7, 12, 13, 14,
15, 20, 21, 22, 23...
• En la Posición 8 (2^3 = 8) tendríamos: 9, 10, 11, 12, 13,
14, 15, 24-31...

Siguiendo el algoritmo hasta completar la nueva cadena.

Para cualquier entero positivo m>=3, existe un código Hamming con los
siguientes parámetros:

Longitud del Código:</TD n=2m-1

Número de símbolos de información:</TD k=2m-m-1

Número de símbolos de comprobación de paridad:</TD n-k=m

Capacidad de corrección de errores:</TD t=1(dmin=3)

La matriz de comprobación de paridad H de este código consta de todas las


m-tuplas no nulas como columnas. En forma sistemática, las columnas de H
están ordenadas de la siguiente forma: H=[ImQ], donde Im es una matriz
identidad m x m y la sub matriz Q consta de 2m-m-1 columnas, las cuales
son las m-tuplas de peso 2 o más. Estas columnas pueden ser colocadas en
cualquier orden sin afectar a la propiedad de distancia y distribución de peso
del código. En forma sistemática, la matriz generadora del código es G=[QT
I2m-m-1] , donde QT es la traspuesta de Q y I2m-m-1 es una matriz
identidad de orden 2m-m-1. Como las columnas de H son no nulas y

Presentado por YESENIA GONZALEZ céd 4-239-906


distintas, dos columnas no pueden sumar cero. Se sigue que la mínima
distancia de un código Hamming es al menos 3. Como H consta de todas las
m-tuplas no nulas como columnas, el vector suma de dos columnas
cualesquiera, hi y hj, debe ser también una columna de H, hl. Así hi+ hj+
hl= 0. De aquí se sigue que la mínima distancia de un código Hamming es
exactamente 3. Así, el código es capaz de corregir todos los patrones de
error con un error simple o de detectar todos los patrones de error de dos
errores o menos. Si formamos una matriz típica para el código Hamming de
longitud 2m-1, se pueden usar todas las (2m-1)-tuplas de peso 1 como
líderes de coconjunto. El número de (2m-1)-tuplas de peso 1 es 2m-1. Como
n-k=m, el código tiene 2m coconjuntos. Así, el vector 0 y las (2m-1)-tuplas
de peso 1 forman todos los líderes de los coconjuntos de la matriz típica.
Esto nos dice que un código Hamming corrige solamente los patrones de
error simple y ningún otro. Esta es una construcción muy interesante. Un
código corrector de errores de peso t se llama código perfecto si su matriz
típica tiene todos los patrones de error de peso t o menor y ningún otro
como líderes de coconjunto. Así, los códigos Hamming forman una clase de
códigos perfectos de corrección de errores simples. Podemos borrar
cualesquiera l comunas de la matriz de comprobación de paridad H de un
código Hamming. Esto da como resultado una matriz H' de orden m x (2m-l-
1). Usando H' como matriz de comprobación de paridad, obtenemos un
código Hamming recortado con los siguientes parámetros:

Longitud del Código:</TD n=2m-1

Número de símbolos de información:</TD k=2m-m-1

Número de símbolos de comprobación de paridad:</TD n-k=m

Distancia mínima:</TD dmin=3

Presentado por YESENIA GONZALEZ céd 4-239-906


Si borramos las columnas apropiadas de H, obtenemos un código Hamming
recortado de distancia mínima 4. Por ejemplo, si borramos de la sub matriz
Q todas las columnas de peso impar, obtenemos una matriz de peso m x
2m-1: H'=[Im Q'] ,donde Q' consta de 2m-1-m columnas de peso par. Como
todas las columnas de H' tiene peso par, no hay tres columnas que sumen
cero. No obstante, para una columna hi de peso 3 en Q', existen tres
columnas hj, hl, hs en Im tal que hi + hl + hj + hs = 0. Así, el código
Hamming recortado con H' como matriz de comprobación de paridad tiene
distancia mínima exactamente 4.

El código Hamming recortado de distancia 4 puede ser usado para corregir


todos los patrones de error simple y simultáneamente detectar todos los
patrones de error doble. Cuando un error simple ocurre durante la
transmisión de un vector código, el síndrome resultante es distinto de cero y
contiene un número par de unos. No obstante, cuando ocurre un error doble,
el síndrome es también distinto de cero, pero consta de un número impar de
unos. Basándonos en estos hechos, la decodificación puede ser realizada de
la siguiente manera:

Si el síndrome s es cero, asumimos que el error no existió. Si s es distinto de


cero y consta de un número par de unos, asumimos que el error ocurrido fue
un error simple. El patrón de error del error simple que corresponde a s se
suma al vector recibido para la corrección de errores. Si s es distinto de cero
y contiene un número impar de unos, se ha detectado un patrón de error no
corregible.

Matriz generadora

Un código lineal (n,k) esta completamente definido por las k filas de la


matriz generadora G.

Presentado por YESENIA GONZALEZ céd 4-239-906


Ejemplo

El código lineal (7,4) dado en la tabla 1 tiene la siguiente matriz como matriz
generadora:

Sea u = (1 1 0 1) el mensaje que hay que codificar, su palabra código


correspondiente será:

v = u*G = (0 0 0 1 1 0 1)

Forma sistemática.

Una propiedad deseable en un código lineal es una estructura sistemática de


las palabras código como la mostrada en la siguiente figura, donde una
palabra código se divide en dos partes: la parte del mensaje y la parte de
redundancia. La parte del mensaje consiste de k bits de información
inalterada ( o mensaje) y la parte de redundancia consiste de de n - k bits
de comprobación de paridad, los cuales son una suma lineal de los bits de
información. A un código lineal de bloque con esta estructura se le
llama código lineal sistemático de bloque.

El código (7,4) dado en la tabla 1 es un código sistemático, los cuatro bits


que están más a la derecha de cada palabra código son idénticos a los bits
correspondientes de información.

Forma sistemática de una palabra código:

Presentado por YESENIA GONZALEZ céd 4-239-906


Un código lineal (n,k) sistemático queda completamente definido por una
matriz G k x n de la siguiente forma:

Esto nos muestra que los k primeros dígitos por la derecha de una palabra
código v son idénticos a los dígitos de información u0, u1,..., uk-1 que hay
que codificar, y que los n - k dígitos de redundancia que están a la derecha,
son sumas lineales de los de información.

Ejemplo

Sea u = ( 1 0 1 1 ), el mensaje que hay que codificar, y G la matriz de


abajo. Entonces podemos obtener v de la siguiente forma:

Presentado por YESENIA GONZALEZ céd 4-239-906


v=(1001011)

Además, podemos comprobar:

v6 = u3
v5 = u2
v4 = u1
v3 = u0
v2 = u1 + u2 + u3
v1 = u0 + u1 + u2
v0 = u0 + u2 + u3

Matriz H: Esta matriz H es la matriz de comprobación de paridad del


código.

Si la matriz generadora de un código lineal (n,k) está en la forma


sistemática, la matriz de comprobación de paridad tiene la siguiente forma:

Presentado por YESENIA GONZALEZ céd 4-239-906


H = [ In-k PT ] =

Donde PT es la traspuesta de la matriz P.

Esto implica que G HT = 0. Por lo tanto, la matriz H es una matriz de


comprobación de paridad del código lineal generado por la matriz G.

Códigos de grupo

Un grupo de código es una agrupación lógica de código que tiene una


condición concreta para la pertenencia. Todo código que cumpla la condición
de pertenencia se incluye en el grupo. Los grupos de código tienen conjuntos
de permisos asociados que se evalúan durante la concesión de la directiva.
Los administradores configuran la directiva de seguridad administrando los
grupos de código y sus conjuntos de permisos asociados.

ELEMENTOS DE INFORMÁTICA TEORICA. GRAMÁTICA, LENGUAJES Y


MÁQUINAS.

Máquinas de Estados Finitos

Presentado por YESENIA GONZALEZ céd 4-239-906


Se denomina máquina de estados a un modelo de comportamiento de un
sistema con entradas y salidas, en donde las salidas dependen no sólo de las
señales de entradas actuales sino también de las anteriores. Las máquinas
de estados se definen como un conjunto de estados que sirve de
intermediario en esta relación de entradas y salidas, haciendo que el
historial de señales de entrada determine, para cada instante, un estado
para la máquina, de forma tal que la salida depende únicamente del estado
y las entradas actuales.

Una máquina de estados se denomina máquina de estados finitos (FSM


por finite state machine) si el conjunto de estados de la máquina es finito,
este es el único tipo de máquinas de estados que podemos modelar en un
computador en la actualidad; debido a esto se suelen utilizar los términos
máquina de estados y máquina de estados finitos de forma intercambiable.
Sin embargo un ejemplo de una máquina de estados infinitos seria un
computador cuántico esto es debido a que los Qubit que utilizaría este tipo
de computadores toma valores continuos, en contraposición los bits toman
valores discretos (0 ó 1). Otro buen ejemplo de una máquina de estados
infinitos es una Máquina universal de Turing la cual se puede definir
teóricamente con una "cinta" o memoria infinita.

La representación de una máquina de estados se realiza mediante un


Diagrama de estados, sin embargo también es posible utilizar un Diagrama
de flujo.

Es posible clasificar las máquinas de estados en aceptoras o transductoras:

• Aceptoras (también llamadas reconocedoras o discriminadoras):


Son aquellas en donde la salida es binaria (si/no), depende
únicamente del estado y existe un estado inicial. Puede decirse,
entonces, que cuando la máquina produce una salida "positiva" (es

Presentado por YESENIA GONZALEZ céd 4-239-906


decir, un "si"), es porque ha "reconocido" o "aceptado" la secuencia de
entrada. En las máquinas de estados aceptoras, los estados con salida
"positiva" se denominan estados finales.

• Transductoras: Son las más generales, que convierten una secuencia


de señales de entrada en una secuencia de salida, pudiendo ésta ser
binaria o más compleja, depender de la entrada actual (no sólo del
estado) y pudiendo también prescindirse de un estado inicial.

La bibliografía a veces llama autómata finito a las aceptoras, mientras que


en otros casos se emplea autómata como sinónimo de máquina de estados
sin importar su tipo.

Siempre que hagamos


el diseño de un circuito
con autómatas
secuenciales finitos
podremos diferenciar en
él los siguientes
elementos:

• Una memoria que


permite almacenar el estado actual del autómata.

• Dos circuitos combinacionales, uno para calcular el estado siguiente


del autómata y el otro para hallar la salida.

Un diagrama de bloques del circuito sería el siguiente:

Básicamente existen dos tipos de autómatas finitos: el autómata de Mealy


y el autómata de Moore.

Autómatas de Mealy

Presentado por YESENIA GONZALEZ céd 4-239-906


En un Autómata de Mealy, tanto la salida del autómata como su estado
siguiente, en un instante determinado, depende tanto del estado en el que
se encuentra el autómata en ese instante como de la entrada ó entradas
binarias introducidas.

Esto implica que un autómata de Mealy, estando en un determinado estado,


puede evolucionar hacia estados siguientes distintos y producir salidas
distintas si se introduce una ó varias entradas binarias distintas.

Un ejemplo en el que podemos ver los diferentes elementos que componen


un diagrama de Transición de Estados de un Autómata de Mealy sería el
siguiente:

Presentado por YESENIA GONZALEZ céd 4-239-906


En el podemos distinguir los siguientes elementos:

• Estados: que se pueden definir como las posibles situaciones a las


que puede llegar el autómata.

• Transiciones: son los eventos producidos por las entradas y que


producirán el cambio de un estado a otro, en el sentido indicado por
las flechas.

Un ejemplo de cómo debe leerse el diagrama para su comprensión sería el


siguiente: desde el estado Q0, con entradas 11, se pasa al estado Q1 y
produce salida 0; desde el estado Q1, con entradas 00 se pasa al estado Q0,
y la salida será igual a "1", y así para todas las posibles transiciones.

Para que el autómata sea determinista de cada estado deben de salir 2


elevado a n transiciones donde n es el número de entradas.

Como vemos en el DTE (Diagrama de Transición de Estados), la salida


depende del estado en que nos encontremos y del valor de las entradas.

Autómatas de Moore

Son aquellos en los cuales el estado siguiente, en un instante determinado,


depende tanto del estado en el que se encuentra el autómata como de la
entrada o entradas binarias introducidas, pero la salida en ese mismo
instante sólo depende del estado en el que se encuentra el autómata.

Esto implica que un autómata de Moore, estando en un determinado estado,

Presentado por YESENIA GONZALEZ céd 4-239-906


produce siempre la misma salida, independientemente de cuál sea la
entrada ó entradas de datos en ese estado.

Un ejemplo de un Diagrama de Estados de un Autómata de Moore sería el


siguiente:

Como vemos en el DTE la salida depende del estado en que nos


encontremos pero no del valor de la entrada ó entradas de ese estado.

El diagrama debe de interpretarse de la siguiente forma: desde el estado 00


(en el cual siempre se da salida 0) y con entrada E0=1 se pasa al estado 01
(en el que siempre tenemos salida 0), una vez que el sistema a evolucionado
a este nuevo estado y con entrada E0=1 se pasa al estado 10 con salida 0),
y así para todas las posibles transiciones.

Al igual que el autómata de Mealy de cada estado debe salir 2 elevado a n


transiciones donde n es el número de entradas.

Algunos puntos prácticos que diferencian a ambos autómatas son los


siguientes:

• En Mealy la salida es obtenida antes que en Moore.

Presentado por YESENIA GONZALEZ céd 4-239-906


• Mealy es más ágil y nervioso que Moore, que es más ordenado y
tranquilo.
• Los diseñadores tienen a Mealy por peligroso, ya que tiene cierto
carácter asíncrono.
• Los estados en Mealy suelen o pueden ser más abstractos que en
Moore.
• Mealy suele o puede tener menos estados que Moore, por tanto su
implementación resulta más económica.
• Suele ser más cómodo obtener el DTE de Moore que el de Mealy, pero
como he dicho antes suele ser una cuestión de gustos. En el ejemplo
práctico que vamos hacer utilizaremos a Moore.

Una vez obtenida las funciones de salida simplificadas, se construye el


circuito y se simula. Lo podemos hacer con Proteus, pero existe otro IDE que
es perfecto por su sencillez para este tipo de circuitos. Se trata logisim, que
además se puede descargar de forma gratuita desde la página del autor, el
circuito terminado sería el siguiente:

Presentado por YESENIA GONZALEZ céd 4-239-906


Máquinas de Equivalencia e indistinguibilidad

Sea una máquina, ya sea de Mealy o de Moore.

Extendemos la función de transición a una función

, haciendo, para cada estado :

Así pues, para cada palabra , es el estado al que se llega cuando,


a partir del estado q, se va aplicando, uno a uno, cada uno de los símbolos
de , de izquierda a derecha. De manera similar se puede extender la
función de respuesta a todo el diccionario . Si M es una máquina de

Mealy, definimos , haciendo, para cada estado y

para cada palabra , donde,

en otras palabras, se tiene

Si M es una máquina de Moore, la función de respuesta

depende únicamente del estado visitado: para cada estado

Presentado por YESENIA GONZALEZ céd 4-239-906


En cualquier caso, sea en máquinas de Mealy o de Moore, la función

, donde q0 es el estado inicial, es la función de traducción


que realiza la máquina. Por las semánticas procedimentales introducidas, se

tiene que :

Dos máquinas M y N se dicen ser equivalentes, , si . En


otras palabras, dos máquinas son equivalentes si ambas traducen de
idéntica manera a cualquier palabra de entrada. Ya que las máquinas de
Moore son casos particulares de las máquinas de Mealy, se tiene que toda
máquina de Moore es equivalente a una de Mealy. Veamos que el recíproco
también se cumple:

Proposición 1.1 Toda máquina de Mealy es equivalente a una de Moore:

Para cada máquina de Mealy existe una

máquina de Moore tal que .

En efecto, dada una máquina de Mealy ,


realicemos la siguiente construcción:
estados:

sea . Se ``desdobla'' cada estado ''viejo''

en estados ``nuevos'' de la forma (q,t),

Presentado por YESENIA GONZALEZ céd 4-239-906


transición:

sea , donde tran y res son las


funciones de transición y de respuesta ``viejas'';
respuesta:

sea ;y
estado inicial:

sea .
Se ve directamente que la máquina de Moore construida es equivalente a la
de Mealy dada.

Ejemplo Consideremos la máquina de Mealy del ejemplo 2. anterior que

``reconoce a repeticiones finales de un mismo símbolo en ''. Ahí, la


máquina tiene transición y respuesta,

La máquina de Moore equivalente consiste de 7=1+6 estados

y sus correspondientes transición y respuesta son

Presentado por YESENIA GONZALEZ céd 4-239-906


Observamos aquí que los estados no aparecen en la imagen de
la función de transición nueva. Por tanto, los restantes cuatro estados, junto
con el inicial, definen una máquina de Moore de 5 estados equivalente a la
máquina de Mealy dada.

En lo que resta de esta sección, consideraremos únicamente máquinas de

Moore. Sea una máquina de Moore. Se dice

que es una máquina-(n,m,k) si es el número de estados,

es el número de símbolos de entrada y es el


número de símbolos de salida, que son efectivamente asumidos bajo la

función de respuesta res. Sea la función que, para un


estado q y una palabra , da el último símbolo de respuesta cuando se
aplica a partir de q. Diremos que dos estados q1, q2 son indistinguibles,

, si para cualquier palabra se tiene .


Intuitivamente, dos estados son indistinguibles si no se los puede distinguir
mediante una sucesión de estímulos, pues ambos estados ofrecen mismas
respuestas ante mismas entradas. Los estados son distinguibles si para

alguna palabra se tiene , y en tal caso, se dice que los


distingue.
Proposición 1.2 Cualesquiera dos estados distinguibles en una máquina-
(n,m,k) lo son mediante una palabra de longitud a lo sumo n-k.

En efecto, para cada sea Ii el conjunto de parejas de estados que no


pueden ser distinguidos por palabras de longitud i,

Presentado por YESENIA GONZALEZ céd 4-239-906


Ii es una relación de equivalencia. Sea el índice de la relación Ii. Ya que la

sucesión de relaciones es decreciente, o sea,

se tiene que la correspondiente sucesión de índices es creciente,

(5)

Naturalmente, donde es el índice de la

relación `` ''. Por tanto, necesariamente, , y, de hecho,

. De aquí puede verse que las desigualdades intermedias en


la serie de relaciones 3.1 son estrictas, es decir

y, en particular, .
Por tanto, el número de relaciones distintas de la forma Ii está mayorizado

por la desigualdad , quod erat demonstratum.

La proposición anterior proporciona un algoritmo elemental para calcular, de

manera exhaustiva, al cociente :


1.

Sean , y las cardinalidades de


los conjuntos de símbolos de entrada, estados y símbolos de salida
asumidos.
2.

Presentado por YESENIA GONZALEZ céd 4-239-906


Sea el número de palabras de longitud a lo más
.
3.

Fórmese la matriz tal que .


4. Dos estados son indistinguibles entre sí si los correspondientes vectores
columnas en F coinciden.
Ejemplo. Residuos módulo 4: Una máquina que reconoce números
binarios congruentes con 2 o con 4, módulo 4, se muestra en la figura (3.4).

Figure 3.4: Reconocedor de números binarios congruentes con 2 o 4


módulo 4.

Se tiene , y , luego k=24-


2+1
-1=7. La tabla para reconocer estados indistinguibles queda:

Presentado por YESENIA GONZALEZ céd 4-239-906


Por tanto, las parejas y constan de estados
indistinguibles entre sí.

Se ve directamente que la relación `` '' es de equivalencia en el

conjunto de estados Q. Por tanto, el cociente es una partición de Q.


Más aún, si dos estados son indistinguibles, lo son también los estados a los
que transitan bajo cualquier estímulo,

en otras palabras, la noción de indistinguibilidad es congruente con las


transiciones de la máquina .

Observación 1.1 El espacio cociente puede ser dotado de una


estructura de máquina de Moore.
En efecto, la construcción es la siguiente:
Estados:

clases de equivalencia , con ,


Transición:

, o sea, la clase de indistinguibilidad de q


transita, bajo e a la clase del estado al que transita q. Esta definición
tiene sentido pues la indistinguibilidad es congruente con las
transiciones,

Presentado por YESENIA GONZALEZ céd 4-239-906


Respuesta:

, la cual función también está bien definida, y


Estado inicial:

, es decir, el nuevo estado inicial es la clase de equivalencia


del estado inicial original. En esta clase están incluidos todos los
estados indistinguibles respecto a q0.
Así por ejemplo, la máquina cociente del último ejemplo es la siguiente:

Observación 1.2 La máquina cociente tiene un número de estados que no


excede al de la máquina dada. De hecho, si hubiera una pareja de estados
indistinguibles entonces el número de estados de la máquina cociente es
estrictamente menor. Además, la máquina cociente es equivalente a la
máquina dada.

En efecto, veamos que para todo , . Para se


tiene

Ahora, para y , al suponer que , se tiene

Presentado por YESENIA GONZALEZ céd 4-239-906


Redes de Petri

Una Red de Petri es una representación matemática de un sistema


distribuido discreto. Las redes de Petri fueron definidas en los años 1960 por
Carl Adam Petri. Son una generalización de la teoría de autómatas que
permite expresar eventos concurrentes.

Una red de Petri está formada por lugares, transiciones y arcos dirigidos, así
como por fichas que ocupan posiciones. Los arcos conectan un lugar a una
transición o una transición a un lugar. No puede haber arcos entre lugares ni
entre transiciones. Los lugares contienen un número cualquiera de fichas.
Las transiciones se disparan, es decir consumen fichas de una posición de
inicio y producen fichas en una posición de llegada. Una transición está
habilitada si tiene fichas en todas sus posiciones de entrada.

En su forma más básica, las fichas que circulan en una red de Petri son
todas idénticas. Se puede definir una variante de las redes de Petri en las
cuales las fichas pueden tener un color (una información que las distingue),
un tiempo de activación y una jerarquía en la red.

La mayoría de los problemas sobre redes de Petri son decidibles, tales como
el carácter acotado y la cobertura. Para resolverlos se utiliza un árbol de
Karp-Miller. Se sabe que el problema de alcance es decidible, al menos en
un tiempo exponencial.

Presentado por YESENIA GONZALEZ céd 4-239-906


Mediante una red de Petri puede modelizarse un sistema de evolución en
paralelo compuesto de varios procesos que cooperan para la realización de
un objetivo común.

La presencia de marcas en una ficha se interpreta habitualmente como


presencia de recursos. El franqueo de una transición (la acción a ejecutar) se
realiza cuando se cumplen unas determinadas precondiciones, indicadas por
las marcas en las fichas (hay una cantidad suficiente de recursos), y la
transición (ejecución de la acción) genera unas postcondiciones que
modifican las marcas de otras fichas (se liberan los recursos) y así se
permite el franqueo de transiciones posteriores.

Definición: Una red de Petri es un conjunto formado por R =


{P,T,Pre,Post}, dónde P es un conjunto de fichas de cardinal n, T un
conjunto de transiciones de cardinal m, Pre la aplicación de incidencia previa
que viene definida como

y Post la aplicación de incidencia posterior que viene definida como

Definición: Una red marcada es el conjunto formado por {R,M} donde R es


una Red de Petri como la definida, M es una aplicación denominada marcado
y

Se asocia a cada ficha un número natural, denominado marca. Las marcas


para una ficha se reúnen en columnas.

Estructura de una red de Petri.

Presentado por YESENIA GONZALEZ céd 4-239-906


Las PN se componen de cuatro partes:

• Un conjunto de nodos.

• Un conjunto de transiciones.

• Una función de entrada y

• Una función de salida.

Las funciones de entrada y salida relacionan a los nodos y a las transiciones.


La función de entrada es un mapeo de una transición tj a una colección de
nodos conocidos como los nodos de entrada de una transición. La estructura
de una PN es definida por los nodos, las transiciones, la función de entrada y
la función de salida.

Definición: La estructura de la PN P=(P,T,I,O) donde:} P={p1,p2,…,pn} es


un conjunto finito de nodos, con n³ 0. T={t1,t2,…,tm} es un conjunto finito
de transiciones con m³ 0. PÇ T= Æ I,O: T ® P

Un nodo pi es un nodo de entrada de la transición tj sí pi Î I(tj); pi es un


nodo de salida sí pi Î O(tj). Las entradas y salidas de una transición son
conjuntos que tienen elementos repetidos o múltiples ocurrencias de nodos
(bags). La multiplicidad de un nodo de entrada pi para una transición tj es el
número de ocurrencias del nodo en el bag de entrada de la transición.
Escribimos esto como: #(pi,I(tj)). De igual forma para la salida lo cual
escribimos: #(pi,O(tj)).

Ejemplo:
P=(P,T,I,O)
P={p1,p2,p3, p4, p5} T={t1,t2,t3, t4, t5}
I(t1) ={p1} O(t1)={p2, p3, p5}
I(t2) ={p2, p3, p5} O(t2)={p5}
I(t3) ={p3} O(t3)={p4}

Presentado por YESENIA GONZALEZ céd 4-239-906


I(t4) ={} O(t4)={p2, p3}
I(t5) ={p4} O(t5)={p2, p3}
Donde:
#(p3,I(t2))=1 #(p5,O(t1))=1

Una marcaU es una característica de la PN, marca U es una asignación de


tokens a la PN. Un token es un concepto primitivo de una PN, un número de
ellos reside en los nodos y se mueve entre ellos; los tokens son la parte
dinámica de la PN, su número puede variar entre nodos y son los que
determinan la situación de la red en un momento determinado.
Definición: Una marca U de una PN P=(P,T,I,O) es una función U: P ® N.

Es decir el nodo pi tiene U(pi) tokens. La PN puede ser considerada también


como un modelo de flujo de información, en donde el comportamiento
dinámico de los tokens representan el flujo. Dicho de otra manera la
información depende de lo que la PN esta modelando.

Representación gráfica de una red de Petri.

La representación gráfica de una PN es importante porque al observar el


modelo del sistema en forma gráfica y observar como cambia de un estado a
otro puede mantener la atención y dar una perspectiva más clara a quién
esté analizando el problema.

Definición: Una gráfica G de una PN P=(P,T,I,O) es una gráfica múltiple


bipartita dirigida G=(V,A) donde V={ v1, v2, …, vn} es un conjunto de
vértices y A={ a1, a2, …, an} es un conjunto de arcos dirigidos ai=(vj,vk)
con vj, vk Î V, V=PÈ T para cada ai Î A se cumple aj=(vj,vk) Þ vj Î P, vk Î T,
ó vj Î T, vk Î P.

Presentado por YESENIA GONZALEZ céd 4-239-906


Un circulo O representa un nodo; una barra | representa una transición. Los
arcos o curvas conectan los nodos y las transiciones, si un arco va de un
nodo a una transición, el nodo será una entrada y si el arco va de una
transición a un nodo, el nodo será una salida de esa transición. Los tokens
son representados por pequeños puntos.

Ahora consideremos la PN vista anteriormente:


P=(P,T,I,O)
P={p1,p2,p3, p4, p5} T={t1,t2,t3, t4, t5}
I(t1) ={p1} O(t1)={p2, p3, p5}
I(t2) ={p2, p3, p5} O(t2)={p5}
I(t3) ={p3} O(t3)={p4}
I(t4) ={} O(t4)={p2, p3}
I(t5) ={p4} O(t5)={p2, p3}
Donde:
#(p3,I(t2))=1 #(p5,O(t1))=1

Reglas de disparo para una PN.

La ejecución en una PN es controlada por el número y distribución de los


tokens que tiene. Los tokens presentes en los nodos controlan la ejecución
de las transiciones de la red. Una PN se activa disparando transiciones. Una
transición es disparada removiendo tokens de los nodos de entrada y
creando tokens de salida. De aquí podemos obtener la primera condición de
disparo en una transición: todos los nodos de entrada de la transición, deben
tener al menos el mismo número de tokens, que de arcos que van hacia la
transición, para que ésta sea disparada, cuando la transición cumpla esta
condición se dice que es una transición ENABLED.
Definición: Una transición tj Î T en una PN P=(P,T,I,O) con una marca U es

Presentado por YESENIA GONZALEZ céd 4-239-906


ENABLED si para todo pj Î P, U(pj)>=#( pj,I(tj)).
Por ejemplo una transición t3 con I(t3)={p3} y O(t3)={p4} es ENABLED
sólo cuando p3 tiene al menos un token. Cuando t3 es disparada sólo un
token es quitado a p3 y un token es depositado en p4 (sí tuviera más nodos
de salida, depositaria un token en cada uno de ellos). Es decir por cada arco
de salida es liberado un token.

Consideremos la siguiente PN:

Sólo 3 transiciones están en un estado ENABLED t1, t3, t4. La transición t2


no puede ser disparada porque no hay tokens en el nodo p2, el cual es
entrada de ella. Dado que t1, t3 y t4 son ENABLED cualquiera de ellas puede
ser disparada. Podemos asociar de manera natural un vector u enlistando los
valores de U. Así para la PN mostrada tenemos u=(1,0,2,1,0). Sí la
transición t4 es disparada, remueve tokens de cada entrada y los deposita
en cada salida, entonces remueve un token de p4 y deposita un token en p2
e incrementa el número de tokens en p3 de dos a tres; el vector u sería
(1,1,3,0,0) y el estado de la red se mueve a como se muestra en la
siguiente figura.

Las transiciones pueden seguir disparándose indefinidamente hasta llegar a


un estado deseado o hasta que ninguna pueda ser disparada.

De lo anterior surgen dos preguntas:

¿Cómo decidimos que transición debe dispararse?

¿Porqué no podemos disparar dos transiciones al mismo tiempo?


Decidir que transición debe dispararse depende de nuestro modelo y sí
podemos disparar más de una transición en un mismo instante entonces
estamos hablando de paralelismo.

Presentado por YESENIA GONZALEZ céd 4-239-906


Pensemos en un ejemplo concreto: queremos sumar cuatro números
cualesquiera por medio de una PN. Dependiendo de cada número se ponen
tantos tokens en los nodos correspondientes p1, p2, p3 y p4. Los primeros
resultados parciales se almacenan en p5, y los últimos en p6, una transición
para cada nodo es la que se encarga de quitar unidades en los sumandos y
poner unidades en el resultado, cuando se efectúan las dos sumas, se realiza
una tercera suma, la realizan t5 y t6, su resultado se pone en p7. El orden
en el que se realizan las operaciones no es un orden secuencial ya que la
primer suma puede ocurrir indistintamente de las sumas anteriores.

Redes de Petri Coloreadas

Las redes de Petri coloreadas (CPN) pertenecen a la familia de las PN, la


diferencia viene marcada por las consideraciones en CPN de colores y de
funciones lineales asociadas a sus arcos. Los tokens de color pueden
representar un atributo o distintivo, si es necesario definir dos atributos
entonces surge la idea de colores compuestos. Una transición en CPN está
en estado ENABLED si todos sus nodos de entrada contienen un número de
colores igual o mayor que los definidos por fi<c> donde fi es una función
lineal asociada al nodo pi con la transición tj. Entonces además del concepto
de color, estas redes manejan una función asociada para los elementos de
las funciones I,O de la PN.

Es fácil ver en una Red las transiciones que están ENABLED y observar que a
veces son más de dos transiciones las que se pueden disparar, en la
siguiente figura notamos que t1 y t2 pueden dispararse, pero si t1 es
disparada, t2 dejará de ser ENABLED y si disparamos t2, no podremos

Presentado por YESENIA GONZALEZ céd 4-239-906


disparar t1. Esto es conocido como un conflicto y nos ayuda a modelar
problemas de sincronización.

Extensiones al Modelo de Redes de Petri

Un arco inhibidor es otro componente de una PN, éste va de un nodo a una


transición y es representado con un pequeño circulo al final del arco. La
transición que tiene arcos inhibidores no puede dispararse si el nodo de
entrada contiene por lo menos tantos tokens como la multiplicidad del arco
inhibidor. Así por ejemplo la siguiente figura disparará cuando p1 tenga un
token, y p2 no tenga tokens.

En general las extensiones a la teoría de PN dependen del modelo o la


aplicación donde se estén usando.

Redes de Petri Temporales.

Este tipo de redes son las que consideran el tiempo en el modelo. Es una
consideración importante ya que los sistemas reales casi siempre es
indispensable considerarlo en la sincronización de los procesos.
El modelo más simple es el que asigna duración a:

1. Los nodos, en el sentido de que una condición es verdadera para una


cierta cantidad de tiempo.

2. La transición, en el sentido de que un evento toma una cierta cantidad


de tiempo en ocurrir.

Cuando la duración de los eventos no son fijos, o no pueden ser expresados


con valores nominales, simplemente se estiman límites dentro de los cuales
el evento puede ocurrir.

Presentado por YESENIA GONZALEZ céd 4-239-906


Alfabetos y lenguajes. Gramáticas formales

Alfabetos, cadenas y lenguajes


Definición 1 Un alfabeto es un conjunto finito no vacío de símbolos y se
denota como .

La pertenencia de un símbolo a un alfabeto se denota como .


Ejemplo: Podemos representar el alfabeto de las letras minúsculas que
utiliza el idioma español, el cual contiene los 27 símbolos siguientes:

y sabemos que la letra pertenece a este alfabeto, lo cual denotaremos

como .

Ya sabemos que los alfabetos son conjuntos, por lo que, todas las
operaciones de conjuntos se pueden aplicar a los alfabetos también. Sean

alfabetos, y ya que los alfabetos son conjuntos finitos, no

vacíos, la unión de un número finito de ellos resulta en un conjunto

no vacío y finito, esto es, si y

La unión de un número arbitrario finito de alfabetos resultará en un conjunto

finito y no vacío, es más, si y , son conjuntos no vacíos, entonces

son conjuntos finitos, no vacíos, y por lo tanto


serán considerados alfabetos válidos.

Presentado por YESENIA GONZALEZ céd 4-239-906


Definición 2
Una cadena o palabra es una secuencia finita de símbolos que pertenecen a
un alfabeto y comúnmente se denota con la letra . La cadena vacía se
denota como y es una secuencia vacía de símbolos tomados de cualquier
alfabeto .

Sí el alfabeto es el español, algunas cadenas pueden ser , y


. Dada la definición anterior, cualquier palabra que contenga los
símbolos del alfabeto es una cadena válida, sin importar si esta tiene o no
significado alguno.

Si es cualquier cadena, su longitud se denota como , la longitud de una


cadena es el número de símbolos que contiene, por ejemplo, si tenemos la

cadena sobre el alfabeto español, . La cadena vacía no

tiene símbolos, por lo que

Definición 3
Un lenguaje es un conjunto de cadenas sobre un alfabeto definido, éstas
pueden ser cualquier cadena , que cumpla con lo siguiente, esta formada

por los símbolos donde .

El lenguaje vacío es aquel que no contiene cadenas y no es lo mismo que el

lenguaje formado por la cadena vacía , éste lenguaje se denota de la

misma manera que el conjunto vacío,

Presentado por YESENIA GONZALEZ céd 4-239-906


Sí se tiene una cadena sobre un alfabeto y es el lenguaje compuesto

por algunas de las cadenas sobre el alfabeto y , entonces diremos


que es un miembro de .

Definición 4 Un lenguaje universal sobre algún alfabeto , o cerradura de


, es el lenguaje que contiene todas las cadenas que es posible formar con
los símbolos de y se denota como .

Ejemplo: Sea , entonces


Podemos observar que para cualquier alfabeto , es infinito, ya que los
alfabetos son conjuntos no vacíos.

Jerarquía de Chomsky

En lingüística la jerarquía de Chomsky es una


clasificación jerárquica de distintos tipos de
gramáticas formales que generan lenguajes
formales. Esta jerarquía fue descrita por Noam
Chomsky en 1956.

La Jerarquía de Chomsky consta de cuatro


niveles:

• Gramáticas de tipo 0 (sin restricciones),


que incluye a todas las gramáticas
formales. Estas gramáticas generan todos los lenguajes capaces de ser
reconocidos por una máquina de Turing. Los lenguajes son conocidos
como lenguajes recursivamente enumerables. Nótese que esta
categoría es diferente de la de los lenguajes recursivos, cuya decisión
puede ser realizada por una máquina de Turing que se detenga.

Presentado por YESENIA GONZALEZ céd 4-239-906


• Gramáticas de tipo 1 (gramáticas sensibles al contexto) generan los
lenguajes sensibles al contexto. Estas gramáticas tienen reglas de la

forma con A un no terminal y α, β y γ cadenas de


terminales y no terminales. Las cadenas α y β pueden ser vacías, pero
γ no puede serlo. La regla está permitida si S no aparece en la
parte derecha de ninguna regla. Los lenguajes descritos por estas
gramáticas son exactamente todos aquellos lenguajes reconocidos por
una máquina de Turing determinista cuya cinta de memoria está
acotada por un cierto número entero de veces sobre la longitud de
entrada, también conocidas como autómatas linealmente acotados.

• Gramáticas de tipo 2 (gramáticas libres del contexto) generan los


lenguajes independientes del contexto. Las reglas son de la forma

con A un no terminal y γ una cadena de terminales y no


terminales. Estos lenguajes son aquellos que pueden ser reconocidos
por un autómata con pila.

• Gramáticas de tipo 3 (gramáticas regulares) generan los lenguajes


regulares. Estas gramáticas se restringen a aquellas reglas que tienen
en la parte izquierda un no terminal, y en la parte derecha un solo
terminal, posiblemente seguido de un no terminal. La regla
también está permitida si S no aparece en la parte derecha de ninguna
regla. Estos lenguajes son aquellos que pueden ser aceptados por un
autómata finito. También esta familia de lenguajes pueden ser
obtenidas por medio de expresiones regulares.

Nótese que el conjunto de gramáticas correspondiente a los lenguajes


recursivos no es un miembro de la jerarquía.

Cada lenguaje regular es a su vez libre del contexto, asimismo un lenguaje


libre del contexto es también dependiente del contexto, éste es recursivo y a
su vez, recursivamente enumerable. Las inclusiones son, sin embargo,

Presentado por YESENIA GONZALEZ céd 4-239-906


propias, es decir, existen en cada nivel lenguajes que no están en niveles
anteriores.

Normas de producción de
Tipo Lenguaje Autómata
gramáticas

recursivamente enumerable
0 Máquina de Turing (MT) Sin restricciones
(LRE)

dependiente del contexto Autómata linealmente


1 αAβ → αγβ
(LSC) acotado

independiente del contexto


2 Autómata con pila A→γ
(LLC)

A → aB
3 regular (RL) Autómata finito
A→a

El Concepto de Lenguaje Regular

Un lenguaje regular es un tipo de lenguaje formal que satisface las


siguientes propiedades:

Puede ser reconocido por:

• un autómata finito determinista


• un autómata finito no determinista
• un autómata finito alterno
• una máquina de Turing de solo lectura

Es generado por:

• una gramática regular


• una gramática de prefijos

Es descrito por:

• una expresión regular

Presentado por YESENIA GONZALEZ céd 4-239-906


Lenguajes regulares sobre un alfabeto

Un lenguaje regular sobre un alfabeto Σ dado se define recursivamente


como:

• El lenguaje vacío es un lenguaje regular


• El lenguaje cadena vacía {ε} es un lenguaje regular
• Para todo símbolo a ∈ Σ {a} es un lenguaje regular
• Si A y B son lenguajes regulares entonces A ∪ B (unión), A•B
(concatenación) y A* (clausura o estrella de Kleene) son lenguajes
regulares
• Si A es un lenguaje regular entonces (A) es el mismo lenguaje regular
• No existen más lenguajes regulares sobre Σ

Todo lenguaje formal finito constituye un lenguaje regular. Otros


ejemplos típicos son todas las cadenas sobre el alfabeto {a, b} que
contienen un número par de aes o el lenguaje que consiste en varias aes
seguidas de varias bes.

Si un lenguaje no es regular requiere una máquina con al menos una


complejidad de Ω(log log n) (donde n es el tamaño de la entrada). En la
práctica la mayoría de los problemas no regulares son resueltos con una
complejidad logarítmica.

Un lenguaje formal infinito puede ser regular o no regular. El lenguaje L =


{an, n > 0} es regular porque puede ser representado, por ejemplo,
mediante la expresión regular a+. El lenguaje L= {an bn, n > 0} es un
lenguaje no regular dado que no es reconocido por ninguna de las formas
de representación anteriormente enumeradas.

Propiedades de cierre

Presentado por YESENIA GONZALEZ céd 4-239-906


Los lenguajes regulares son cerrados con las siguientes operaciones, de
modo que si L y P son lenguajes regulares los siguientes lenguajes
también serán regulares:

• El complemento de L
• La clausura o estrella de Kleene L* de L
• El homomorfismo φ(L) de L
• La concatenación L'P de L y P
• La unión L ∪ P de L y P
• La intersección L ∩ P de L y P
• La diferencia L \ P de L y P
• El reverso LR de L

Decidir cuándo un lenguaje es regular

Para situar los lenguajes regulares en la jerarquía de Chomsky hay que


notar que todo lenguaje regular es también un lenguaje libre de contexto,
aunque la afirmación contraria no es cierta, por ejemplo: el lenguaje que
contiene el mismo número de aes y de bes es libre de contexto pero no
regular. Para probar que un lenguaje de este tipo no es regular se usa el
teorema de Myhill-Nerode, o el lema de bombeo por ejemplo.

Hay dos aproximaciones puramente algebraicas para definir lenguajes


regulares. Si Σ es un alfabeto finito y Σ* es un monoide libre consistente
en todas las cadenas sobre Σ, f: Σ* → M es un monoide simétrico donde M
es un monoide finito y S es un subconjunto de M entonces el conjunto f-
1
(S) es regular. Todo lenguaje regular se presenta de esta manera.

Si L es un subconjunto de Σ*, se define la relación equivalente ~ en Σ*


de la siguiente manera: u ~ v significa

uw ∈ L si y solo si vw ∈ L para todo w ∈ Σ*

Presentado por YESENIA GONZALEZ céd 4-239-906


El lenguaje L es regular si y solo si el número de clases de equivalencia
de ~ es finito; si este es el caso, este número es igual al número de
estados del autómata determinista mínimo que reconocerá L.

Lenguajes finitos

Un subconjunto especial de los lenguajes regulares es el de los lenguajes


finitos, aquellos que solo contienen un número finito de palabras. Estos
son lenguajes obviamente regulares y uno podría crear expresiones
regulares que serían la unión de todas las palabras del lenguaje que
definirían dicho lenguaje.

Lenguajes y Expresiones Regulares

En aritmética, usamos las operaciones + y × para construir expresiones


tales como (4 + 1) × 5

De manera similar, usamos operaciones regulares para construir


expresiones que describen lenguajes, las cuales se denominan
expresiones regulares. Un ejemplo es: (0 ∪ 1)0∗

El valor de la expresión aritmética es 25. El valor de una expresión


regular es un lenguaje. En este caso el lenguaje consiste en todas las
palabras que empiezan con 1 o 0 seguido por cualquier número (finito) de
0 s. Otro ejemplo de una expresión regular es (0 ∪ 1)∗

Empieza con el lenguaje (0 ∪ 1) y se aplica la operación *. El valor de


esta expresión son todas las palabras posibles de 0 s y 1s.

Lenguajes Regulares

Para un alfabeto § dado, los lenguajes regulares constituyen el menor


conjunto de lenguajes sobre § que es cerrado respecto a las operaciones

Presentado por YESENIA GONZALEZ céd 4-239-906


de concatenación, la cerradura de Kleene y la unión de lenguajes y
además contiene el lenguaje ? y los lenguajes unitarios {a} para a ∈ §.

Definición 4 Sea § un alfabeto. El conjunto de lenguajes regulares sobre §


se define recursivamente como sigue:

1. ? y {"} son lenguajes regulares

2. Para toda a ∈ §, {a} es un lenguaje regular.

3. Si L y M son lenguajes regulares, entonces L ∪M, LM, L∗ son lenguajes

regulares.

4. Ningún otro lenguaje sobre § es regular.

Ejemplo 4 Dado § = {a, b}, las siguientes afirmaciones son verdaderas:

? y {"} son lenguajes regulares.

{a} y {b} son lenguajes regulares.

{a, b} es un lenguaje regular.

{ab} es regular.

{ai|i ≥ 0} es regular.

Podemos simplificar la representación de un lenguaje regular por medio


de una abreviatura llamada expresión regular. Convenimos en escribir a
en lugar del lenguaje unitario {a}. Por tanto

a ∪ b denota {a, b} = {a} ∪ {b}

ab denota {ab}

Presentado por YESENIA GONZALEZ céd 4-239-906


a∗ denota {a}∗

a+ denota {a}+

Además se establece un orden en los operadores, primero la clausura de


Kleene

(*), luego la concatenación y por último la unión. En algunos casos esto


simplifica la expresión. Por ejemplo, una expresión {a} ∪ ({b}∗{c}), se
reduce a la expresión regular a ∪ b∗c. De este modo, si se realiza la
unión previa a la concatenación, se deben usar paréntesis; así (a ∪ b)c
indica que se realiza la unión de {a} y {b} y el resultado se concatena
con {c} a la derecha. Si escribimos a ∪ bc debe ser leído: se concatena
{b} y {c} en ese orden y el resultado se une con {a}.

Definición Formal de una Expresión Regular

Definición 5 Definimos las expresiones regulares de manera recursiva:

1. ? y " son expresiones regulares.

2. a es una expresión regular para toda a ∈ §.

3. Si r y s son expresiones regulares, entonces r ∪ s, rs, r∗ son


expresiones regulares.

Ninguna otra secuencia de símbolos es una expresión regular.


Comparando las definiciones de lenguajes regulares y expresiones regulares
se deduce que toda expresión regular sobre § denota un lenguaje regular
sobre §.
Por ejemplo el lenguaje de todas las palabras sobre {a, b, c} que no tienen
ninguna subcadena ac se denota mediante la expresión regular c∗(a ∪
bc∗)∗.

Presentado por YESENIA GONZALEZ céd 4-239-906


Cuando sea necesario distinguir entre una expresión regular r y el lenguaje
denotado por la misma, usaremos L(r) para identificar dicho lenguaje. Así, si
se afirma w ∈ r, esto significa que w ∈ L(r). Si r y s son expresiones sobre
el mismo alfabeto y si L(r) = L(s), entonces se dice que r y s son
equivalentes.
En el caso que r y s sean equivalentes se puede escribir r = s. también se
puede usar r ⊆ s en el caso que L(r) ⊆ L(s). En la definición de la cerradura
estrella se obtiene que ?∗ = {"}, y en términos de expresiones regulares se
tiene que ?∗ = ".

Obsérvese que hay muchas expresiones regulares que denotan el mismo


lenguaje.

Por ejemplo (a∗b)∗ y "∪(a∪b)∗b denotan el mismo lenguaje: el lenguaje de


todas las palabras con 0 o más a s y b s, que son la palabra vacía o las que
tienen una b al final. De este modo (a∗b)∗ = " ∪ (a ∪ b)∗b. Se pueden
simplificar expresiones regulares reemplazándolas por otras equivalentes
pero menos complejas.

ELEMENTOS DE COMPLEJIDAD ALGORITMICA. SESIONES

La complejidad algorítmica representa la cantidad de recursos (temporales)


que necesita un algoritmo para resolver un problema y por tanto permite
determinar la eficiencia de dicho algoritmo.

Los criterios que se van a emplear para evaluar la complejidad algorítmica


no proporcionan medidas absolutas sino medidas relativas al tamaño del
problema.

Presentado por YESENIA GONZALEZ céd 4-239-906


En la ciencia de la computación los algoritmos son más importantes que los
LP o que las computadoras; la solución de un problema haciendo uso de las
computadoras requiere por una parte un algoritmo o método de resolución y
por otra un programa o codificación del algoritmo en un LP. Ambos
componentes tienen importancia; pero la del algoritmo es absolutamente
indispensable; sabemos que un algoritmo es una secuencia de pasos para
resolver un problema, sus características son:

1. Independiente: Del LP y de la máquina.

2. Definido: De pasos claros y concretos.

3. Finito: En el número de pasos que usará.

4. Preciso: Cada paso arroja un cálculo correcto.

5. Recibe datos: Debe poseer datos de entrada.

Debemos saber que una solución es un conjunto único, pero no es el único


conjunto de pasos que entregan la solución, existen muchas alternativas de
solución y estas alternativas pueden diferir por:

o Número de pasos

o Estructuras

Ahora que sabemos que existen muchas alternativas de solución para un


problema, debemos seleccionar el algoritmo más eficiente, el mejor conjunto
de pasos, el que tarde menos en ejecutarse, que tenga menos líneas de
código.

Esta selección puede ser ejecutada a simple vista con sólo observar la
cantidad de líneas del programa, pero cuando el programa crece se requiere

Presentado por YESENIA GONZALEZ céd 4-239-906


una medición más exacta y apropiada, para esto se realizan ciertas
operaciones matemáticas que establecen la eficiencia teórica del programa,
al estudio de estos casos se denomina Complejidad Algorítmica.

COMPLEJIDAD ALGORÍTMICA

o Un algoritmo será mas eficiente comparado con otro, siempre


que consuma menos recursos, como el tiempoy espacio de memoria
necesarios para ejecutarlo.
o La eficiencia de un algoritmo puede ser cuantificada con las
siguientes medidas de complejidad:

1. Complejidad Temporal o Tiempo de ejecución: Tiempo de


cómputo necesario para ejecutar algún programa.

2. Complejidad Espacial: Memoria que utiliza un programa para su


ejecución, La eficiencia en memoria de un algoritmo indica la cantidad
de espacio requerido para ejecutar el algoritmo; es decir, el espacio en
memoria que ocupan todas las variables propias al algoritmo. Para
calcular la memoria estática de un algoritmo se suma la memoria que
ocupan las variables declaradas en el algoritmo. Para el caso de la
memoria dinámica, el cálculo no es tan simple ya que, este depende de
cada ejecución del algoritmo.

o Este análisis se basa en las Complejidades Temporales, con este


fin, para cada problema determinaremos una medida N, que
llamaremos tamaño de la entrada o número de datos a procesar por
el programa, intentaremos hallar respuestas en función de dicha N.
o l concepto exacto que cuantifica N dependerá de la naturaleza
del problema, si hablamos de un array se puede ver a N como el
rango del array, para una matriz, el número de elementos que la
componen; para un grafo, podría ser el número de nodos o arcos que

Presentado por YESENIA GONZALEZ céd 4-239-906


lo arman, no se puede establecer una regla para N, pues cada
problema acarrea su propia lógica y complejidad.

Tiempo de Ejecución

o El tiempo de Ejecución de un programa se mide en función de N,


lo que designaremos como T(N).
o Esta función se puede calcular físicamente ejecutando el
programa acompañados de un reloj, o calcularse directamente sobre
el código, contando las instrucciones a ser ejecutadas y multiplicando
por el tiempo requerido por cada instrucción. Así, un trozo sencillo de
código como:

S1;

for(x = 0; x < N; x++)

S2;

Demanda: T(N) = t1 + t2 * N

Donde t1 es el tiempo que lleva ejecutar la serie S1 de sentencias, y t2


es el que lleva la serie S2.

o Habitualmente todos los algoritmos contienen alguna sentencia


condicional o selectiva, haciendo que las sentencias ejecutadas
dependan de la condición lógica, esto hace que aparezca más de un
valor para T(N), es por ello que debemos hablar de un rango de
valores:

Tmin(N) ≤ T(N) ≤ Tmax(N)

Presentado por YESENIA GONZALEZ céd 4-239-906


o Estos extremos son llamados "el peor caso" y "el mejor caso" y
entre ambos se puede hallar "el caso promedio" o el más frecuente,
siendo este el más difícil de estudiar; nos centraremos en el " el peor
caso" por ser de fácil cálculo y se acerca a "el caso promedio",
brindándonos una medida pesimista pero fiable.
o

o Toda función T(N) encierra referencias al parámetro N, y a una


serie de constantes Ti dependientes de factores externos al algoritmo.
Se tratará de analizar los algoritmos dándoles autonomía frente a
estos factores externos, buscando estimaciones generales
ampliamente válidas, a pesar de ser demostraciones teóricas.

Asintotas

o El análisis de la eficiencia algorítmica nos lleva a estudiar el


comportamiento de los algoritmos frente a condiciones extremas.
Matemáticamente hablando, cuando Ntiende al infinito ¥ , es un
comportamiento asintótico.
o Sean g(n) diferentes funciones que determinan el uso de
recursos, pudiendo existir infinidad de funciones g.
o Estas funciones g serán congregadas en familias, usando como
criterio de agrupación su comportamiento asintótico, este
comportamiento asintótico es similar cuando los argumentos toman
valores muy grandes.
o Una familia de funciones que comparten un mismo
comportamiento asintótico será llamada un Orden de Complejidad.
Estas familias se designan con O( ).
o Para cada uno de estos conjuntos se suele identificar un
miembro f(n) que se utiliza como representante de la familia,

Presentado por YESENIA GONZALEZ céd 4-239-906


hablándose del conjunto de funciones g que son del orden de f(n),
denotándose como:

g É O(f(n)), g esta incluído en f(n)

o Frecuentemente no es necesario conocer el comportamiento


exacto, basta conocer una cota superior, es decir, alguna función que
se comporte ‘aún peor’.
o El conjunto O(f(n)) es el de las funciones de orden de f(n), que
se define como:

O(f(n)n0, ≥ n ∀ )= { g | $ k Î Â +, $ n0 Î À tales que, g(n) £ kf(n) }

O(f(n)) esta formado por aquellas funciones g(n) que crecen a un ritmo
menor o igual que el de f(n).

De las funciones g que forman este conjunto O(f(n)) se dice que están
dominadas asintóticamente por f, en el sentido de que para N
suficientemente grande, y salvo una constante multiplicativa k, f(n) es
una cota superior de g(n).

Ejemplo: Se puede comprobar que la función g(n) = 3n3 + 2n2, es de


O(n3)

Aplicando la definición dada anteriormente:

g(n)= 3 n3 + 2n2

f(n)= n3

n0= 0

k=5

Se tiene: 3n3 + 2n2 £ 5n3 ∀ , n 0 ≥

Presentado por YESENIA GONZALEZ céd 4-239-906


n g( ) kf( )

0 0 0

1 5 5

2 32 40

3 99 135

o El tiempo de ejecución es proporcional, se multiplica por una


constante a alguno de los tiempos de ejecución anteriormente
propuestos, además de la suma de algunos términos más pequeños.
Así, un algoritmo cuyo tiempo de ejecución sea T = 3n2 + 6n se
puede considerar proporcional a n2. En este caso se puede asegurar
que el algoritmo es del orden de n2, y se escribe O(n2)
o La notación O( ) ignora los factores constantes, desconoce si se
hace una mejor o peor implementación del algoritmo, además de ser
independiente de los datos de entrada del algoritmo. Es decir, la
utilidad de aplicar esta notación a un algoritmo es encontrar el límite
superior de su tiempo de ejecución ‘el peor caso’.

Órdenes de Complejidad

o La familia O(f(n)) define un Orden de Complejidad. Elegiremos


como representante de este Orden de Complejidad a la función f(n)
más sencilla perteneciente a esta familia.
o Las funciones de complejidad algorítmica más habituales en las
cuales el único factor del que dependen es el tamaño de la muestra
de entrada n, ordenadas de mayor a menor eficiencia son:

O(1) Orden constante

O(log n) Orden logarítmico

Presentado por YESENIA GONZALEZ céd 4-239-906


O(n) Orden lineal

O(n log n) Orden cuasi-lineal

O(n2) Orden cuadrático

O(n3) Orden cúbico

O(na) Orden polinómico

O(2n) Orden exponencial

O(n!) Orden factorial


o Se identifica una Jerarquía de Ordenes de Complejidad que
coincide con el orden de la tabla mostrada; jerarquía en el sentido de
que cada orden de complejidad inferior tiene a las superiores como
subconjuntos.
 O(1): Complejidad constante. Cuando las instrucciones se
ejecutan una vez.
 O(log n): Complejidad logarítmica. Esta suele aparecer en
determinados algoritmos con iteración o recursión no estructural,
ejemplo la búsqueda binaria.
 O(n): Complejidad lineal. Es una complejidad buena y
también muy usual. Aparece en la evaluación de bucles simples
siempre que la complejidad de las instrucciones interiores sea
constante.
 O(n log n): Complejidad cuasi-lineal. Se encuentra en
algoritmos de tipo divide y vencerás como por ejemplo en el
método de ordenación quicksort y se considera una buena
complejidad. Si n se duplica, el tiempo de ejecución es ligeramente
mayor del doble.

Presentado por YESENIA GONZALEZ céd 4-239-906


 O(n2): Complejidad cuadrática. Aparece en bucles o ciclos
doblemente anidados. Si n se duplica, el tiempo de ejecución
aumenta cuatro veces.

 O(n3): Complejidad cúbica. Suele darse en bucles con


triple anidación. Si nse duplica, el tiempo de ejecución se multiplica
por ocho. Para un valor grande de n empieza a crecer
dramáticamente.
 O(na): Complejidad polinómica (a> 3). Si a crece, la
complejidad del programa es bastante mala.
 O(2n): Complejidad exponencial. No suelen ser muy útiles
en la práctica por el elevadísimo tiempo de ejecución. Se dan en
subprogramas recursivos que contengan dos o más llamadas
internas. N

Algoritmos Polinomiales: Aquellos que son proporcionales a na. Son


en general factibles o aplicables, los problemas basados en estos
algoritmos son solucionables.

Presentado por YESENIA GONZALEZ céd 4-239-906


Algoritmos Exponenciales: Aquellos que son proporcionales a kn ∀ , k
En general no son factibles salvo un tamaño de entrada.2 ≥ n
exageradamente pequeño, pero generalmente pertenecen a un universo
de problemas de los cuales el cómputo se hace imposible. N

Reglas de la Notación Asintótica

Si T1(n) y T2(n) son las funciones que expresan los tiempos de


ejecución de dos fragmentos de un programa, y se acotan de forma
que se tiene:

T1(n) = O(f1(n)) y T2(n) = O(f2(n))

Se puede decir que:

T1(n) + T2(n) = O(max(f1(n), f2(n)))

Regla de la suma

Regla del producto

Si T1(n) y T2(n) son las funciones que expresan los tiempos de


ejecución de dos fragmentos de un programa, y se acotan de forma que
se tiene:

T1(n) = O(f1(n)) y T2(n)=O(f2(n))

Se puede decir que:

T1(n) T2(n) = O(f1(n) f2(n))

IMPORTANCIA DE LA EFICIENCIA

o ¿Que utilidad tiene diseñar algoritmos eficientes si las


computadoras procesan la información cada vez más rápido?

Bien; para demostrar la importancia de la elaboración de algoritmos


eficientes, se plantea el siguiente problema:

Presentado por YESENIA GONZALEZ céd 4-239-906


o Contamos con una computadora capaz de procesar datos en 10-
4 seg. En esta computadora se ejecuta un algoritmo que lee registros
de una base de datos, dicho algoritmo tiene una complejidad
exponencial 2n, ¿Cuánto tiempo se tardará en procesar una entrada
n de datos?

n TIEMPO

10 » 1 décima de segundo

20 » 2 minutos

30 > 1 día

40 > 3 años

50 = 3 570 años

100 = 4,019,693,684,133,150
milenios

o Ahora se tiene la misma computadora capaz de procesar datos


en 10-4 seg. Pero se ejecuta un algoritmo que hace el mismo trabajo
antes citado, pero este algoritmo tiene una complejidad cúbica n3,
¿Cuánto tiempo se tardará en procesar una entrada n de datos?

n TIEMPO

10 = 1 décima de segundo

20 = 8 décimas de segundo

100 = 1.7 minutos

200 = 13.3 minutos

Presentado por YESENIA GONZALEZ céd 4-239-906


1000 » 1 día

o Se puede concluir, que solo un algoritmo eficiente, con un orden


de complejidad bajo, puede tratar grandes volumen de datos, se
razona que un algoritmo es:
o Muy eficiente si su complejidad es de orden log n
o Eficiente si su complejidad es de orden na
o Ineficiente si su complejidad es de orden 2n
o Se considera que un problema es tratable si existe un algoritmo
que lo resuelve con complejidad menor que 2n, y que es intratable o
desprovisto de solución en caso contrario.

ESTIMACIÓN DE LA COMPLEJIDAD EN ALGORITMOS NO


RECURSIVOS

•Asignaciones y expresiones simples (=)

El tiempo de ejecución de toda instrucción de asignación simple, de la


evaluación de una expresión formada por términos simples o de toda
constante es O(1).

•Secuencias de instrucciones (;)

El tiempo de ejecución de una secuencia de instrucciones es igual a la


suma de sus tiempos de ejecución individuales. Para una secuencia de
dos instrucciones S1 y S2 el tiempo de ejecución esta dado por la suma
de los tiempos de ejecución de S1 y S2:

T(S1 ; S2) = T(S1) + T(S2)

Aplicando la regla de la suma:

O(T(S1 ; S2)) = max(O( T(S1), T(S2) ))

•Instrucciones condicionales (IF, SWITCH-CASE)

Presentado por YESENIA GONZALEZ céd 4-239-906


El tiempo de ejecución para una instrucción condicional IF-THEN es el
tiempo necesario para evaluar la condición, más el requerido para el
conjunto de instrucciones que se ejecutan cuando se cumple la
condición lógica.

T(IF-THEN) = T(condición) + T(rama THEN)

Aplicando la regla de la suma:

O(T(IF-THEN)) = max(O( T(condición), T(rama THEN) ))

El tiempo de ejecución para una instrucción condicional de tipo IF-


THEN-ELSE resulta de evaluar la condición, más el máximo valor del
conjunto de instrucciones de las ramas THEN y ELSE.

T(IF-THEN-ELSE) = T(condición) + max(T(rama THEN), T(rama ELSE))

Aplicando la regla de la suma, su orden esta dada por la siguiente


expresión:

O(T(IF-THEN-ELSE)) = O( T(condición)) + max(O(T(rama THEN)),


O(T(rama ELSE)) )

Aplicando la regla de la suma:

O(T(IF-THEN-ELSE)) = max(O( T(condición)), max(O(T(rama THEN)),


O(T(rama ELSE)) ))

El tiempo de ejecución de un condicional múltiple (SWITCH-CASE) es el


tiempo necesario para evaluar la condición, más el mayor de los tiempos
de las secuencias a ejecutar en cada valor condicional.

•Instrucciones de iteración (FOR, WHILE-DO, DO-WHILE)

El tiempo de ejecución de un bucle FOR es el producto del número de


iteraciones por la complejidad de las instrucciones del cuerpo del mismo
bucle.

Presentado por YESENIA GONZALEZ céd 4-239-906


Para los ciclos del tipo WHILE-DO y DO-WHILEse sigue la regla anterior,
pero se considera la evaluación del número de iteraciones para el peor
caso posible. Si existen ciclos anidados, se realiza el análisis de adentro
hacia fuera, considerando el tiempo de ejecución de un ciclo interior y la
suma del resto de proposiciones como el tiempo de ejecución de una
iteración del ciclo exterior.

•Llamadas a procedimientos

El tiempo de ejecución esta dado por, el tiempo requerido para ejecutar


el cuerpo del procedimiento llamado. Si un procedimiento hace llamadas
a otros procedimientos "no recursivos", es posible calcular el tiempo de
ejecución de cada procedimiento llamado, uno a la vez, partiendo de
aquellos que no llaman a ninguno.

o Ejemplo: función no recursiva que halla el factorial de un


número n cualquiera

int factorial(int n) O(1)

int fact = 1; O(1)

for(int i = n; i > 0; i--) O(n)

fact = fact * i; O(1)

return fact; O(1)

Su complejidad es lineal O(n), debido a que se tiene un bucle FOR cuyo


número de iteraciones es n.

Presentado por YESENIA GONZALEZ céd 4-239-906


o Ejemplo: Si el bucle se repite un número fijo de veces, liberado
de n, entonces el bucle introduce una constante que puede ser
absorbida.

int y, z, k = 10; O(1)

for(int i = 0; i < k; i++) k * O(1)

y = y + i; O(1)

z = z + k; O(1)

Su complejidad es constante; es decir, O(1), debido a que se tiene un


bucle for independiente de n.

o Ejemplo: Dos bucles anidados dependientes de n.

for(int i = 0; i < n; i++) O(n)


{
for(int z = 0; z < n; z++) O(n)
{
if(vector[z] > vector[z + 1]) O(1)
{
aux = vector[z]; O(1)
vector[z] = vector[z + 1]; O(1)
vector[z + 1] = aux; O(1)
}
}
}
Tenemos O(n) * O(n) * O(1) = O(n2), complejidad cuadrática.
o Ejemplo: Dos bucles anidados, uno dependiente n y otro
dependiente del bucle superior.

Presentado por YESENIA GONZALEZ céd 4-239-906


for(int i = 0; i < n; i++) O(n)
{
for(int z = n; z < i; z--) O(n)
{
if(vector[z] < vector[z - 1]) O(1)
{
aux = vector[z]; O(1)
vector[z] = vector[z - 1]; O(1)
vector[z - 1] = aux; O(1)
}
}
}
Tenemos que el bucle exterior se ejecuta n veces Þ O(n), el bucle
interno se ejecuta n + … + 3 + 2 + 1 veces respectivamente, o sea (n *
(n+1))/2 Þ O(n).

O(n) * O(n) * O(1) = O(n2), complejidad cuadrática.

o Ejemplo: Bucles donde la evolución de la variable de control es


ascendente no lineal.

int c = 1; O(1)

while(c < n) O(log n)

if(vector[c] < vector[n]) O(1)

aux = vector[n]; O(1)

vector[n] = vector[c]; O(1)

vector[c] = aux; O(1)

Presentado por YESENIA GONZALEZ céd 4-239-906


}

c = c * 2;

Para este ejemplo al principio el valor de c es 1, al cabo de x iteraciones


será 2x Þ el número de iteraciones es tal que n £ 2x donde x es el
entero inmediato superior de n; x = log2 n iteraciones, Þ para este caso
es:

O(1) * O(log n) * O(1) = O(log n), complejidad logarítmica.

o Ejemplo: Bucles donde la evolución de la variable de control es


descendente no lineal.

int c = n; O(1)

while(c > 1) O(log n)

vector[c] = c; O(1)

c = c / 2; O(1)

Para este ejemplo al principio el valor de c es igual a n, al cabo de x


iteraciones será n*2-x Þ el número de iteraciones es tal que n*2-x £ n;
un razonamiento análogo nos lleva a log2 n iteraciones, Þ para este caso
es:

O(1) * O(log n) * O(1) = O(log n), complejidad logarítmica.

o Ejemplo: Bucles donde la evolución de la variable de control no


es lineal, junto a bucles con evolución de variable lineal.

Presentado por YESENIA GONZALEZ céd 4-239-906


int c, x; O(1)
for(int i= 0; i < n; i++) O(n)
{
c = i; O(1)
while(c > 0) O(log n)
{
x = x % c; O(1)
c = c / 2; O(1)
}
x = x + 2; O(1)
}
Tenemos un bucle interno de orden O(log n) que se ejecuta O(log n)
veces, luego el conjunto de ordenes es de orden:

O(1) * O(n) * O(log n) = O(n log n), complejidad cuasi-lineal.

Clases P, NP y NP-completos

Cuando nos enfrentamos a un problema concreto, habrá una serie de


algoritmos aplicables. Se suele decir que el orden de complejidad de un
problema es el del mejor algoritmo que se conozca para resolverlo. Así se
clasifican los problemas, y los estudios sobre algoritmos se aplican a la
realidad.

Estos estudios han llevado a la constatación de que existen problemas muy


difíciles, problemas que desafían la utilización de los ordenadores para
resolverlos. En lo que sigue esbozaremos las clases de problemas que hoy
por hoy se escapan a un tratamiento informático.

Presentado por YESENIA GONZALEZ céd 4-239-906


Clase P.-

Los algoritmos de complejidad polinómica se dice que son tratables en el


sentido de que suelen ser abordables en la práctica. Los problemas para los
que se conocen algoritmos con esta complejidad se dice que forman la clase
P. Aquellos problemas para los que la mejor solución que se conoce es de
complejidad superior a la polinómica, se dice que son problemas intratables.
Seria muy interesante encontrar alguna solución polinómica (o mejor) que
permitiera abordarlos.

Clase NP.-

Algunos de estos problemas intratables pueden caracterizarse por el curioso


hecho de que puede aplicarse un algoritmo polinómico para comprobar si
una posible solución es válida o no. Esta característica lleva a un método de
resolución no determinista consistente en aplicar heurísticos para obtener
soluciones hipotéticas que se van desestimando (o aceptando) a ritmo
polinómico. Los problemas de esta clase se denominan NP (la N de no-
deterministas y la P de polinómicos).

Clase NP-completos.-

Se conoce una amplia variedad de problemas de tipo NP, de los cuales


destacan algunos de ellos de extrema complejidad. Gráficamente podemos
decir que algunos problemas se hayan en la "frontera externa" de la clase
NP. Son problemas NP, y son los peores problemas posibles de clase NP.
Estos problemas se caracterizan por ser todos "iguales" en el sentido de que
si se descubriera una solución P para alguno de ellos, esta solución sería
fácilmente aplicable a todos ellos. Actualmente hay un premio de prestigio
equivalente al Nobel reservado para el que descubra semejante solución ...
¡y se duda seriamente de que alguien lo consiga!

Presentado por YESENIA GONZALEZ céd 4-239-906


Es más, si se descubriera una solución para los problemas NP-completos,
esta sería aplicable a todos los problemas NP y, por tanto, la clase NP
desaparecería del mundo científico al carecerse de problemas de ese tipo.
Realmente, tras años de búsqueda exhaustiva de dicha solución, es hecho
ampliamente aceptado que no debe existir, aunque nadie ha demostrado,
todavía, la imposibilidad de su existencia.

Antes de realizar un programa conviene elegir un buen algoritmo, donde por


bueno entendemos que utilice pocos recursos, siendo usualmente los más
importantes el tiempo que lleve ejecutarse y la cantidad de espacio en
memoria que requiera. Es engañoso pensar que todos los algoritmos son
"más o menos iguales" y confiar en nuestra habilidad como programadores
para convertir un mal algoritmo en un producto eficaz. Es asimismo
engañoso confiar en la creciente potencia de las máquinas y el
abaratamiento de las mismas como remedio de todos los problemas que
puedan aparecer.

En el análisis de algoritmos se considera usualmente el caso peor, si bien a


veces conviene analizar igualmente el caso mejor y hacer alguna estimación
sobre un caso promedio. Para independizarse de factores coyunturales tales
como el lenguaje de programación, la habilidad del codificador, la máquina
soporte, etc. se suele trabajar con un cálculo asintótico que indica como se
comporta el algoritmo para datos muy grandes y salvo algun coeficiente
multiplicativo. Para problemas pequeños es cierto que casi todos los
algoritmos son "más o menos iguales", primando otros aspectos como
esfuerzo de codificación, legibilidad, etc. Los órdenes de complejidad sólo
son importantes para grandes problemas.

Presentado por YESENIA GONZALEZ céd 4-239-906


Presentado por YESENIA GONZALEZ céd 4-239-906
CONCLUSIONES

Luego de la realización de nuestra investigación para concretizar el presente


trabajo concluimos que los diferentes temas tratados referentes a la
matemática discreta, son de total relevancia en la ejecución de todo lo
concerniente a las tecnologías de la información.

Hemos podido constatar el hecho de que el funcionamiento interno de cada


circuito integrado trabaja a base de la lógica digital la cual funda sus bases
en ésta matemática.

Presentado por YESENIA GONZALEZ céd 4-239-906


BIBLIOGRAFÍA

http://www.mastersierra.com/inf134/relacionesdeequivalenciaydeorden_arc
hivos/frame.htm
http://pisuerga.inf.ubu.es/cgosorio/ALeF/UD4/otros-af.pdf
http://www.alumnos.inf.utfsm.cl/~raraya/arq/material/Capitulo_3.pdf
http://www.lab.dit.upm.es/~lprg/material/apuntes/o/index.html
http://www.aquihayapuntes.com/automatas-secuenciales-finitos.html
http://www.monografias.com/trabajos4/matematica/matematica.shtml

Presentado por YESENIA GONZALEZ céd 4-239-906

You might also like