Вы находитесь на странице: 1из 18

Instituto Politcnico Nacional

Escuela Superior de Ingeniera Mecnica y Elctrica


Unidad Culhuacan

Nombres: Crdenas Aguilar No


Gonzlez Torres Jos Antonio
Ramrez Monroy Manuel

Grupo: 2CV6

Materia: Matemticas discretas

Prof. Jos Luis del Rio Valdez

Matemticas Discretas

Pgina 1

ndice

Grafos3

Arboles...4

Grafos dirigidos5

Lenguajes formales6

Gramticas y lenguajes.8

Tipos de datos11

Verificacin de programas...13

Computabilidad.14

Matemticas Discretas

Pgina 2

Grafo.
Un grafo es un conjunto, no vaco, de objetos llamados vrtices (o nodos) y una
seleccin de pares de vrtices, llamados aristas (edges en ingls) que pueden ser
orientados o no. Tpicamente, un grafo se representa mediante una serie de
puntos (los vrtices) conectados por lneas (las aristas).

Un grafo es una pareja de conjuntos G = (V, A), donde V es el conjunto de


vrtices, y A es el conjunto de aristas, este ltimo es un conjunto de pares de la
forma (u, v) tal que

, tal que

. Para simplificar, notaremos la

arista (u, v) como ab.


En teora de grafos, slo queda lo esencial del dibujo: la forma de las aristas no
son relevantes, slo importa a qu vrtices estn unidas. La posicin de los
vrtices tampoco importa, y se puede variar para obtener un dibujo ms claro.
Muchas redes de uso cotidiano pueden ser modeladas con un grafo: una red de
carreteras que conecta ciudades, una red elctrica o la red de drenaje de una
ciudad.
Subgrafo.
Un subgrafo de un grafo G es un grafo cuyos conjuntos de vrtices y aristas son
subconjuntos de los de G. Se dice que un grafo G contiene a otro grafo H si algn
subgrafo de G es H o es isomorfo a H (dependiendo de las necesidades de la
situacin). El subgrafo inducido de G es un subgrafo G' de G tal que contiene
todas las aristas adyacentes al subconjunto de vrtices de G.
Matemticas Discretas

Pgina 3

Definicin:
Sea G= (V, A). G= (V, A) se dice subgrafo de G si:
1- V

2- A'

3- (V, A) es un grafo
Si G=(V,A) es subgrafo de G, para todo v

G se cumple gr (G,v) gr (G,

v)
G2 es un subgrafo de G.

Grafos simples.
Un grafo es simple si slo 1 arista QUE une dos vrtices cualesquiera. Esto es
equivalente a decir que una arista cualquiera es la nica que une dos vrtices
especficos.
Un grafo que no es simple se denomina Multigrfica o Grafo mltiple.
rboles.
Un grafo que no tiene ciclos y que conecta a todos los puntos, se llama un rbol.
En un grafo con n vrtices, los rboles tienen exactamente n - 1 (aristas), y hay nn2

rboles posibles. Su importancia radica en que los rboles son grafos que

conectan todos los vrtices utilizando el menor nmero posible de aristas. Un


importante campo de aplicacin de su estudio se encuentra en el anlisis
filogentico, el de la filiacin de entidades que derivan unas de otras en un
proceso evolutivo, que se aplica sobre todo a la averiguacin del parentesco entre

Matemticas Discretas

Pgina 4

especies; aunque se ha usado tambin, por ejemplo, en el estudio del parentesco


entre lenguas.

Dgrafo.

Dgrafo (grafo dirigido): A cada arista se le asigna un orden en sus extremos, en el


dibujo se indica con una flecha. Los pares que forman los elementos de E estn
ordenados.

Es un grafo en el cual el conjunto de las aristas A esta formado por pares


ordenados del conjunto de vrtices V. Lo llamaremos tambin grafo dirigido.
Esto asigna un orden en los extremos de cada arista. Dicho orden se indica en el
diagrama con una flecha y llamaremos origen o inicial al primer vrtice de una
arista y fin o terminal al segundo.
Un grafo dirigido es un grafo cuyas aristas son todas dirigidas (arcos)

Aplicaciones: transporte, planicacin de tareas, cadena alimentar, calicacin de


sitios www, cadenas de dependencia. . .

Matemticas Discretas

Pgina 5

De la misma manera que los no dirigidos, les podemos notar: G = (V, A)


Un arco (v, w) diferente de (w, v) Si G es simple, |A| |V | (|V | 1) Muchos grafos
posibles con |V | aristas: 2 |V | (|V |1) El grafo inverso es el grafo que se obtiene
al cambiar la direccin de todos los arcos

Grado entrante g + (v): para un vrtice v, es el nmero de arcos que llevan

a este vrtice
Grado saliente g (v): para un vrtice, es el nmero de arcos que salen de

este vrtice
Una fuente es un vrtice v tal que g + (v) = 0 (no se puede alcanzar desde

cualquier otro vrtice)


Un pozo es un vrtice v tal que g (v) = 0 (no se puede alcanzar ningn
vrtice desde este)

Grafos dirigidos: representacin


Con matriz de adyacencia:
Ya no tenemos
simetra. . . Y AT
corresponde al
grafo inverso

Lenguajes formales.
En matemticas, lgica, y las ciencias computacionales, un lenguaje formal es un
conjunto de palabras (cadenas de caracteres) de longitud finita formadas a partir
de un alfabeto (conjunto de caracteres) finito.
Informalmente, el trmino lenguaje formal se utiliza en muchos contextos (en las
ciencias, en derecho, etc.) para referirse a un modo de expresin ms cuidadoso
Matemticas Discretas

Pgina 6

y preciso que el habla cotidiana. Hasta finales de la dcada de 1990, el consenso


general era que un lenguaje formal, en el sentido que trata este artculo, era en
cierto modo la versin lmite de este uso antes mencionado: un lenguaje tan
formalizado que poda ser usado en forma escrita para describir

mtodos

computacionales. Sin embargo, hoy en da, el punto de vista de que la naturaleza


esencial de los lenguajes naturales (sin importar su grado de formalidad en el
sentido informal antes descrito) difiere de manera importante de aquella de los
verdaderos lenguajes formales (en el sentido estricto de este artculo) gana cada
vez ms adeptos.
Algunos ejemplos varios de lenguajes formales:
El conjunto de todas las palabras sobre {a, b}
El conjunto {an: n es un nmero primo}
El conjunto de todos los programas sintcticamente vlidos en un determinado
lenguaje de programacin
El conjunto de entradas para las cuales una particular mquina de Turing se
detiene.
Los lenguajes formales pueden ser especificados en una amplia variedad de
maneras, como:
Cadenas producidas por una gramtica formal (ver Jerarqua de Chomsky)
Cadenas producidas por una expresin regular
Cadenas aceptadas por un autmata, tal como una mquina de Turing.
Varias operaciones pueden ser utilizadas para producir nuevos lenguajes a partir
de otros dados.
Supngase que L1 y L2 son lenguajes sobre un alfabeto comn.
Entonces:
Matemticas Discretas

Pgina 7

La concatenacin L1L2 consiste de todas aquellas palabras de la forma vw


donde v es una palabra de L1 y w es una palabra de L2
La interseccin L1&L2 consiste en todas aquellas palabras que estn contenidas
tanto en L1 como en L2
La unin L1|L2 consiste en todas aquellas palabras que estn contenidas ya sea
en L1 o en L2
El complemento ~L1 consiste en todas aquellas palabras producibles sobre el
alfabeto de L1 que no estn ya contenidas en L1
El cociente L1/L2 consiste de todas aquellas palabras v para las cuales existe
una palabra w en L2 tales que vw se encuentra en L1
La estrella L1* consiste de todas aquellas palabras que pueden ser escritas de
la forma W1W2...Wn donde todo Wi se encuentra en L1 y n 0. (Ntese que
esta definicin incluye a & psilon en cualquier L*)
La intercalacin L1*L1 consiste de todas aquellas palabras que pueden ser
escritas de la forma v1w1v2w2...vnwn son palabras tales que la concatenacin
v1...vn est en L1, y la concatenacin w1...wn est en L2

Gramticas y Lenguajes.

Gramticas.
Una gramtica para estructura de expresiones G es una 4-ada (V, S, vo) donde V
es un conjunto finito, S es un subconjunto de V V S0, y a es una relacin finita
en * V. La idea es que S es, como ya se ha analizado, el conjunto de todas las
palabras permitidas en el lenguaje, y V consta de S adems de algunos otros
smbolos. El elemento 0 v de V es un punto de partida para las sustituciones, que
sern analizadas en breve. Por ltimo la relacin
Matemticas Discretas

Pgina 8

a sobre V* especifica los

reemplazos permisibles, en el sentido de que, si wa w se puede reemplazar wcon


w siempre que aparezca la cadena w, ya sea sola o como subcadena de alguna
otra cadena.
Tradicionalmente, a la proposicin wa w se le llama produccin de G. Entonces, w
y w son los lados izquierdos y derecho de la produccin, respectivamente.
Supngase que ninguna produccin de G tiene a la cadena vaca como lado
izquierdo. Es la a relacin de produccin de G.
Esto parecera complicado, pero en realidad es una idea sencilla, como muestran
los siguientes ejemplos.
Si G = (V, S, vo o) es una gramtica para la estructura de oraciones, S es el
conjunto de smbolos terminales y N = V S es el conjunto de smbolos no
termina obsrvese que V = S N
Ejemplo 1. Sea

S = {Juan, Julia, maneja, corre, descuidadamente, rpido,

frecuentemente), N = {oracin, sujeto, predicado, verbo, adverbio) y sea V=S N.


Sea

0 v =oracin, y supngase

que la relacin a en V* queda descrita

enumerando todas las producciones como sigue.


Oracin a sujeto predicado
Sujeto a Juan
Sujeto a Julia
Predicado a verbo adverbio
Verbo a maneja
Verbo a corre
Adverbio a descuidadamente
Adverbio a rpido
Adverbio a frecuentemente
Matemticas Discretas

Pgina 9

El conjunto S contiene todas las palabras permitidas en el lenguaje; N consta de


las palabras que describen partes de la oracin, pero que en realidad no estn
contenidas en el lenguaje.
Se afirma que la oracin Julia maneja frecuentemente, que ser denotada por w,
es una oracin permisible o con sintaxis correcta, de acuerdo con las reglas de
este lenguaje. Para demostrar esto, considrese la siguiente serie de cadenas en
V*. Oracin.
Sujeto predicado
Julia predicado
Julia verbo

adverbio

Julia maneja adverbio


Julia maneja frecuentemente
Ahora bien, cada una de las cadenas es consecuencia de la anterior, utilizando
una produccin para realizar una sustitucin parcial o completa. En otras palabras,
cada cadena est relacionada con la siguiente cadena por la relacin, de modo
que oracin w. Por definicin, w tiene una sintaxis correcta ya que, en este
ejemplo, y es una oracin. En las gramticas para la estructura de oraciones, la
bsqueda de una sintaxis correcta se refiere slo al proceso mediante el cual al
formar una oracin se procura que sta sea correcta gramaticalmente hablando, y
nada ms.
Hay que observar que la serie de sustituciones que producen una oracin vlida,
serie que es llamada deduccin (o derivacin) de la oracin, no es nica.
Lenguajes.
Se considera el conjunto *S que consta de todas las cadenas finitas de elementos
del conjunto S. Existen muchas interpretaciones posibles de los elementos de *S,
segn la naturaleza de S. Si se piensa en S como un conjunto de palabras,
Matemticas Discretas

Pgina 10

entonces *S se puede considerar como la coleccin de todas las oraciones


posibles formadas con palabras de S. Por supuesto, tales oraciones no
necesariamente tienen sentido ni una estructura evidente. Se puede pensar un
lenguaje como una especificacin completa, al menos en principio, de tres cosas.
En primer lugar, debe existir un conjunto S con todas las palabras que se
consideran parte del lenguaje. En segundo lugar, hay que designar un subconjunto
de

S como el conjunto de las oraciones con construccin adecuada en el

lenguaje.
Supngase, a manera de ejemplo, que S consta de todas las palabras del
espaol. La especificacin de una oracin con construccin adecuada implica
todas las reglas de la gramtica espaola; el significado de una oracin queda
determinado por esta construccin y por el significado de las palabras.
La oracin Iba a la tienda Juan Jorge a cantar
Es una cadena en S pero no una oracin con una construccin adecuada. La
disposicin de los sustantivos y los verbos no es vlida.
Tipos de datos.
En los lenguajes de programacin y en otros programas utilitarios tales como una
planilla de clculos, un tipo de dato es un atributo de una parte de los datos que
indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los
que se va a procesar. Esto incluye imponer restricciones en los datos, como qu
valores pueden tomar y qu operaciones se pueden realizar. Tipos de datos
comunes

son:

enteros,

nmeros

de coma

flotante (decimales),

cadenas

alfanumricas, fechas, horas, colores, coches o cualquier cosa que se nos ocurra.
Por ejemplo, en Java, el tipo "int" representa un conjunto de enteros de 32 bits
cuyo rango va desde el -2.147.483.648 al 2.147.483.647, as como las
operaciones que se pueden realizar con los enteros, como la suma, resta y
multiplicacin. Los colores, por otra parte, se representan como tres bytes
denotando la cantidad de rojo, verde y azul, y una cadena de caracteres
representando el nombre del color; las operaciones permitidas incluyen la adicin
Matemticas Discretas

Pgina 11

y sustraccin, pero no la multiplicacin. ste es un concepto propio de


la informtica, ms especficamente de los lenguajes de programacin, aunque
tambin se encuentra relacionado con nociones similares de las matemticas y
la lgica.
Tipos simples.
Tipo Ordinal, Tipos predefinidos, Tipo de dato entero, Tipo de dato carcter, Tipo
de dato lgico, Tipos definidos por el usuario, Tipo de dato enumerado, Tipo de
dato subrango, Tipo No Ordinal, Tipo de dato real, Tipo de dato cronolgico, Tipo
de dato puntero
Tipos de datos primitivos.
Los tipos de datos hacen referencia al tipo de informacin que se trabaja, donde la
unidad mnima de almacenamiento es el dato, tambin se puede considerar como
el rango de valores que puede tomar una variable durante la ejecucin del
programa.

DATOS PRIMITIVOS:

CARACTER

NUMERICO

LOGICOS(BOOLEANOS)
Tipos Compuestos.

Tipos compuestos, Tupla, Vector (programacin)


Tipos objeto.
Objetos (programacin orientada a objetos), Clase (informtica)
Matemticas Discretas

Pgina 12

Verificacin de programas.
Uno de los enfoques para determinar si un programa es correcto es establecer
una actividad de testing. Esta consiste en seleccionar un conjunto de datos de
entrada para determinar si los resultados producidos por el programa con esos
datos coinciden o no con los valores esperados. Para asegurar que el programa
es correcto se debera analizar el mismo con todos los valores posibles de los
datos de entrada. Pero esto es imposible cuando este conjunto es infinito. Por eso,
el testing slo puede mostrar la presencia de errores y no su ausencia. Otro
enfoque, la prueba formal de programas, es una tcnica que se basa en el clculo
de predicados. Primero, se debe describir el comportamiento de cada instruccin
del lenguaje formalmente. Es decir, se debe definir la semntica de un lenguaje de
programacin en trminos de frmulas lgicas. Para probar un programa, se debe
expresar su semntica en trminos de frmulas lgicas y luego probar que el
programa significa lo mismo que su especificacin. Una prueba formal de un
programa asegura que el programa es correcto con respecto a una especificacin
para todas las entradas. Hay dos problemas importantes con la prueba formal de
programas: 1) la manipulacin lgica puede ser tediosa y propensa a errores; 2) la
prueba solamente muestra que el programa implementa la especificacin
correctamente. No hay certeza de que la especificacin describe lo que el usuario
realmente desea. Definicin: Si un programa usa n variables (x1, x2,..., xn) el
estado s es una Tupla de valores (X1, X2,..., Xn) donde Xi es el valor de la variable
xi.
Ejemplo: Dado el estado s = (x, y) = (7, 8), el resultado de ejecutar la sentencia de
asignacin
X:= 2*y+1 es el estado s= (x, y) = (17, 8)

Matemticas Discretas

Pgina 13

Una variable se usa en un programa para describir una posicin de memoria que
puede contener valores diferentes en diferentes estados. Una manera de describir
un conjunto de estados es utilizando frmulas del clculo de predicados.
Definicin: Sea U el conjunto de todos los posibles estados del programa y sea S
U. Se define PS, el predicado caracterstico de S, tal que S = { s S / PS(s)}.
Es decir, es el predicado que solamente es satisfecho por los estados que
pertenecen al conjunto S. Por ejemplo, en vez de decir que la sentencia x:= 2*y+1
transforma el estado s = (x, y) en el estado s= (2*y+1, y), definiremos predicados
P(x, y) y P(x, y) tal que si P(x, y) es verdadero en el estado s entonces P(x, y)
ser verdadero despus de ejecutar la sentencia x := 2*y+1. Ejemplo: Se quiere
probar x 7 despus de ejecutar x:= 2*y+1. Esto es verdadero si 2*y+1 7 antes
de ejecutar la sentencia, es decir y 3.
{y 3} x:= 2*y+1 {x 7}
{y 3} y {x 7} se denominan aserciones.
Definicin: Una asercin es una frmula del clculo de predicados ubicada en un
programa, que es verdadera cada vez que el programa pasa por ese punto.
Definicin: {P} S {Q}, donde P y Q son aserciones llamadas pre-condicin y postcondicin respectivamente y S es un fragmento de programa, se interpreta como
sigue: si la ejecucin de S empieza en un estado caracterizado por P y S termina,
entonces terminar en un estado caracterizado por Q. S se dice parcialmente
correcto con respecto a P y Q. Si adems se garantiza que S termina, S es
totalmente correcto con respecto a P y Q.
{P} S {Q} se denomina especificacin formal de S.
Computabilidad.
La Teora de la Computabilidad es la parte de la computacin que estudia
los problemas

de

decisin que

Matemticas Discretas

pueden

ser

Pgina 14

resueltos

con

un algoritmo o

equivalentemente con una mquina de Turing. La teora de la Computabilidad se


interesa a cuatro preguntas:

Qu problemas puede resolver una mquina de Turing?

Qu otros formalismos equivalen a las mquinas de Turing?

Qu problemas requieren mquinas ms poderosas?

Qu problemas requieren mquinas menos poderosas?


Problemas no computables.

La humanidad conoce y utiliza una gran diversidad de algoritmos: se sabe que los
ordenadores pueden controlar el trfico areo, lneas de produccin y plantas
nucleares; existen tambin algoritmos para elaborar un postre de chocolate,
imprimir la factorial de un nmero entero o decidir cul es el mayor de dos
nmeros. Desde la niez, el mtodo de enseanza se basa en algoritmos: sumas,
restas, multiplicaciones y divisiones que no son ms que una secuencia de pasos
que hay que dar sobre unos datos de entrada. Sin embargo, existen determinados
problemas que no pueden ser resueltos por ningn algoritmo. Se trata de
problemas intrnsecamente tan difciles que, en principio, nunca podrn ser
resueltos. Dicho esto, parece obvio que las computadoras no los puedan
representar ni resolver de modo alguno. En realidad, el nmero de cosas que
pueden calcularse o computarse es infinitamente menor que las que efectivamente
pueden calcularse. Esto es, <<es ms lo que es computable que lo que no lo es>>
(Juan Miguel Len Rojas, 2002).
Un problema no computable: El Problema de la terminacin.
Para realizar un acercamiento ms prximo a la no computabilidad de ciertos
problemas se ilustra a continuacin el tratamiento de un ejemplo prctico. Es bien
sabido por los integrantes de la comunidad informtica, profesionales y
Matemticas Discretas

Pgina 15

entusiastas de la programacin el grave problema que suponen los bucles infinitos


en los programas informticos. Estos programas son secuencias de cdigo cuya
ejecucin queda inmersa en una serie de rdenes que son reiteradas
indefinidamente. La deteccin precoz de estos errores es a menudo una tarea muy
costosa a efectos econmicos y temporales. Por ello, sera sumamente
interesante la elaboracin de un algoritmo que fuese capaz de detectar bucles
infinitos en secuencias de cdigo (otros algoritmos) de entrada.
Se supone que es deseable elaborar un algoritmo llamado Tester que va a probar
si una secuencia de cdigo tiene o no algn bucle infinito, esto es, si para
cualquier dato de entrada, el algoritmo termina o, por el contrario, permanece en
ejecucin indefinidamente. Este algoritmo requiera, para ello, un parmetro de
entrada P que es la secuencia de cdigo que se desea probar, y un conjunto de
datos de entrada para probar dicho cdigo que ser E. La salida final del algoritmo
es un valor booleano cierto si el algoritmo a probar se ejecuta correctamente y
falso si se detectan bucles infinitos. La llamada al algoritmo Tester va a quedar
como sigue: Tester (P, E).
Como se ha puesto la premisa de que los datos de entrada pueden ser
cualesquiera, no es necesario que se le proporcione a nuestro algoritmo la entrada
de datos E, ya que estos podran ser generados aleatoriamente en tiempo de
ejecucin. Por ello, la llamada al algoritmo va a quedar: Tester (P), siendo P la
secuencia de cdigo o algoritmo cuya terminacin se desea comprobar.
Suponiendo que existe el algoritmo Tester (P) no hay nada que impida crear un
nuevo algoritmo llamado Amparo (). Este algoritmo va a hacer uso del
mtodo Tester y se implementa en l el siguiente cdigo pseudo C++:

Void Amparo () {
if (Tester (P))
else

while (1);

printf (Fin del algoritmo AMPARO! ;));

Matemticas Discretas

Pgina 16

Puede verse que el cdigo de Amparo es sencillo, si el algoritmo no detecta bucles


infinitos en P, Amparo queda sumido en un bucle infinito. Por el contrario, si Tester
detecta bucles infinitos (no hay terminacin correcta en P), Amparo escribe un
mensaje por pantalla y finaliza correctamente. Llegados a este punto, no hay
ninguna condicin que prohba cambiar el parmetro de entrada en la llamada a
Tester. Dado que el algoritmo de entrada puede ser cualquiera, es posible llamar a
Tester con el cdigo del propio Amparo y que compruebe su correcta terminacin.

Void Amparo () {
if (Tester (Amparo))
else

while (1);

printf (Fin del algoritmo AMPARO! ;));

A la vista de este cdigo, podemos llegar a la conclusin siguiente: Si amparo


finaliza correctamente, entonces, el propio Amparo queda sumido en un
bucle infinito y NO FINALIZA. Por el contrario, si en amparo se detectan bucles
infinitos (no termina correctamente), el mismo Amparo muestra un mensaje por
pantalla y FINALIZA correctamente.
Esto constituye, a todas luces, una doble contradiccin que slo puede
solucionarse admitiendo que el algoritmo Amparo no puede existir. Y, dado que la
nica precondicin que se puso para la existencia de Amparo fue la existencia de
Tester, tampoco es posible la existencia de Tester. Se ha demostrado, por tanto,
que no existe un algoritmo que sea capaz de probar la terminacin.

Matemticas Discretas

Pgina 17

Matemticas Discretas

Pgina 18

Вам также может понравиться