You are on page 1of 10

Unidad nº 6

Capítulo 1 : Árboles
Estudiaremos un tipo especial de relación de mucha utilidad, con gran variedad
de aplicaciones en la ciencia de la computación y que por lo general se
representa por un grafo.
Estas relaciones son esenciales para construir bases de datos y compiladores
de lenguajes. Son los árboles, a veces llamados arboles con raíz por la
apariencia de su grafo.
Definición:
Sea A un conjunto y R una relación en A , R es un árbol si existe un vértice v 0
en A con la propiedad de que existe una única trayectoria en R de v 0 hacia
cualquier otro vértice de A , pero no existe una trayectoria de v 0 a v0
El vértice v0 es único y es llamado raíz del árbol R
Se simboliza (R,v0) árbol con raíz v0
Ejemplo 1
A={ a,b,c,d,e,f} R={ (a,b),(a,c), (a,d), (b,e),(d,f)}

(A,R) es un árbol de raíz a
Teorema 1 : Sea (T,v0) un árbol entonces
a) No existen ciclos en T
b) v0 es la única raíz
Teorema 2 : Sea (T,v0) un árbol entonces
a) T es arreflexivo
b) T es asimétrico
c) ∀ �, � , � ∈ � , [ (a,b) ∈ T y (b,c) ∈ T] (a,c) no pertenece a T ,
Teorema 3 : Sea (T,v0) un árbol con raíz v0 y sea v ∈ T , entonces T(v) también
es un árbol con raízv. T(v) es el subárbol de T que comienza en v
En el ejemplo 1 R(b) , R(d) son subárboles de R
EJERCICIO 1: Dada la relación R en el conjunto A, determinar si R es un árbol y,
si lo es, encuentre la raíz.
a) A = { a, b , c, d, e, f } R = { (a,b), ( b,c) , (c,a) , (d,e) }
RTA: no es árbol porque hay un camino de a a b y de b a c y no puede haber un
camino de c a a. Ademas (d,e) no está conectado.

b) A = { a, b , c, d, e } R = { (a,b) , (b,e) , (c,d) , (d,b) , (c,a ) }
RTA: no es árbol porque a se
relaciona con b y d también se
relaciona con b. Los arboles no tiene
ciclos.

c) A = { 1,2,3,4,5,6 } R = { (2,1) , (3,4 ) , (5,2 ) , (6,5) , (6,3) } ES ARBOL, la
raíz es 6.

d) A = { 1,2,3,4,5,6 } R = { (1,2) , (1,3) , (4,5), (4,6) } No es árbol, ya que
debe tener solo una raiz.

e) A = { u, v , w , x , y , z } R = { (u,x) , ( u, v ) , ( w,v) , ( x , z) , ( x , y) }
RTA: no es árbol.

EJERCICIO 2: Sea T un árbol. Suponga que T tiene r vértices y s aristas.
Encuentre la fórmula que relacione a r con s
Respuesta: Una árbol de n vértices tiene n-1 aristas.
Demostración: Para n=1, un árbol con n=1 vértice no tiene aristas, de ahí que
el teorema sea cierto para n=1 (por inducción…)
Árboles etiquetados.
A veces es útil etiquetar los vértices o aristas de un grafo para indicar su uso
para un propósito específico. Esto es particularmente cierto para muchos usos
de árboles en computación.

Consideremos la expresión algebraica 3-(2x Y)] + (Y – 2) – (3+Y)]
Sabemos que primero se deben evaluar los paréntesis de la derecha e
izquierda para poder realizar la suma central.
Una importante representación gráfica de una expresión de este tipo es un
árbol binario etiquetado (árbol binario es aquel que de cada vértice salen 2
“hijos”)

Con frecuencia se dice que un grafo etiquetado como éste es posicional que es
muy importante para la implementación en computadora de una estructura de
datos de tipo árbol.
EJERCICIO 3: Construya el árbol de la expresión algebraica
a) ( 7 + ( 6 - 2 ) ) - ( x - ( y - 4) )

b) ( x + ( y - ( x + y ))) . (( 3 / ( 2 . 7 ) ) . 4 )

c) 3 - ( x + ( 6 . ( 4 / ( 2 - 3 ))))

d) ( x / y ) / (( x . 3 ) - ( z / 4 ))

Capítulo 2 : Lenguaje
Dado un conjunto A se pueden construir el conjunto A* formado por todas las
sucesiones finitas de los elementos de A. Con frecuencia A es un conjunto de
símbolos al que llamaremos alfabeto y a las sucesiones finitas que forman A*
las llamaremos palabras provenientes de A o cadenas de A.
Ejemplo A= { a,b,c, ……….z} el alfabeto usual. Entonces A* está formada por
todas las palabras ordinarias como casa, mesa, y también por “palabras” tales
como sadfvnm , dyt, Todas las sucesiones finitas procedentes de A están en A*
Si se piensa a A como un conjunto de palabras, entonces A* se puede
considerar como la colección de todas las “oraciones” posibles formadas con

palabras de A Por supuesto tales “oraciones” no necesariamente tienen sentido
ni una estructura evidente.
Se puede pensar un lenguaje como una especificación completa de tres cosas:
a) Un conjunto S de todas las “palabras” que se consideran parte del lenguaje.
b) Un subconjunto de S* formado por todas las “oraciones” construidas
adecuadamente.
c) El conjunto de las oraciones construidas adecuadamente que tengan un
significado.
La disciplina que regula la construcción adecuada de las oraciones es la
sintaxis de un lenguaje. La que se encarga del significado de las oraciones es la
semántica.
En los lenguajes de programación (Fortran, Pascal, etc.) se debe respetar la
sintaxis de los mismos. La mayor parte de los errores de sintaxis son
detectados por el compilador que genera mensajes de error adecuados.
La semántica de un lenguaje de programación constituye un tema de estudio
más avanzado.
Estudiaremos una clase de lenguaje llamado gramática para la estructura de
oraciones. Abarcan muchos lenguajes de importancia en la ciencia de la
computación.
Gramática de estructura de frase

G es una cuaterna G=(V,S, v0, → )
V es un conjunto finito
S es un subconjunto de V
v0 pertenece a V-S, es el punto de partida para las
sustituciones
→es una relación definida en V*. Se llama Producción y
especifica los reemplazos permisibles.
w→ u significa que se puede reemplazar w con u
w es el lado izquierdo y u el derecho de la producción (suponemos que ninguna
producción de G tiene la cadena vacía como lado izquierdo.
Relación sustitución: ⇒
En V* x⇒y significa que y es el resultado de x utilizando alguna de las
producciones permitidas para reemplazar parte o todo x .Se la llama
derivabilidad directa.
Relación ⇒* : una cadena w es una oración adecuadamente construida si y
solo si v0⇒* w o sea si es posible ir de v0 a w haciendo un numero finito de
sustituciones.
Ejemplo 1 : V={ v0, w, a, b, c} , S={a, b, c} →

1 v 0 →aw
2 w → bbw

3w→c
Sea G=( V, S, v0, → )
Construir L(G) o sea todas las “oraciones” sintácticamente correctas.
Debemos hacer varias sustituciones utilizando (1),(2) y (3) hasta eliminar todos
los símbolos que no sean los terminales a , b , c
Se debe comenzar con (1) pues se inicia con v 0 Utilizamos n veces (2) y por
ultimo (3)
v0⇒aw → abbw → abbbbw → n veces (2) → a(bb) nw → a(bb)nc

v0⇒ * a(bb)nc
L(G)= {a(bb)nc, n≥ 0}
¿ la palabra a b4c está en L(G) ?
Si, y su árbol de deducción es:

Ejemplo 2 : V={ v0, w, a, b, c} , S={a, b, c} → 1 v 0 →a v0b
2 v 0b →bw
3 abw→ c
Sea G=(V,S, v0, →)
Construir L(G) o sea todas las “oraciones” sintácticamente correctas.
Se debe comenzar con (1) pues se inicia con v 0
v0⇒ a v0b →aa v0bb → n veces (1) →an av0bbn → (usando (2) )
an a bw bn →usando (3) →an c bn

v0⇒* anc bn
L(G)= { anc bn, n≥ 0}
Observamos que las deducciones de las oraciones no pueden ser expresadas
en forma de árboles.
Sea G= (V, S, v0, →) una gramática para la estructura de oraciones. G es de:
Tipo 0 si no se establecen restricciones sobre las producciones de G
Tipo 1 si para cualquier producción w1→ w2 la longitud de w1 es menor o igual
que la longitud de w2 (longitud es el número de palabras de la cadena)
Tipo 2 si el lado izquierdo de cada producción es un único símbolo no terminal
y el lado derecho consta de uno o más símbolos.

Tipo 3 si el lado izquierdo de cada producción es un único símbolo no terminal
y el lado derecho tiene uno o más símbolos, incluyendo a lo sumo un símbolo
no terminal, que debe estar en el extremo derecho de la cadena.
El ejemplo 1 es de tipo 3 y el ejemplo 2 es de tipo 0
Las gramáticas de tipo 0 o 1 son difíciles de estudiar y se sabe poco de ellas.
El proceso que hemos estudiado, o sea la deducción de una oración dentro de
una gramática, verificar que tiene una sintaxis correcta de acuerdo a cierta
gramática G construyendo un árbol de deducción que la produzca es el
análisis sintáctico de la oración.
El análisis sintáctico tiene una importancia fundamental para los compiladores
y otras formas de traducción de lenguajes .Una oración de un lenguaje se
somete a un análisis sintáctico para evidenciar su estructura y se construye un
árbol .De esta forma, por ejemplo, un programa de C++ se compila para dar
lugar a un programa en lenguaje de máquina.
EJERCICIO 4: Dada la gramática G, describir exactamente el lenguaje
L(G) producido por G , o sea describir todas las “oraciones “ sintácticamente
correctas.
a) G = ( V, S, v0 , → ) V = { v0, v1 , x , y , z } S = { x , y , z }
P:→

1 v0 →x v0
2 v0 →y v1
3 v1 →y v1

4 v1 →z
Solución: Se puede empezar por (1) o por (2)
v0⇒ x v0 →xx v0 (n veces (1))→ xn v0 (usando (2)) xn y v1
(usando k veces (3) ) xn yk v1 (usando (4) ) → xn yk z

v0⇒ * xn yk z
L(G)= { xn yk z , n≥ 0, k≥ 1}
b) G = ( V, S, v0 , → ) V = { v0, a , b } S = { a , b }
P:→

1 v0 →a a v0
2 v0 →a

3 v0 →b
Solución: Se puede empezar por (1) , por (2) o por (3)
v0⇒ aa v0 →aaaa v0 →(n veces (1)) →(aa)n v0 →(usando (2))→

(aa)n a o (usando (3)) →(aa)n b

v0⇒ * (aa)n a o v0⇒ * (aa)n b
L(G)= { (aa)n a n≥ 0} U { (aa)k b k≥ 0}
Por ejemplo el árbol de derivación para la cadena a 4b es:

c) G = ( V, S, v0 , → ) V = { v0, v1 , a , b } S = { a , b }
P:→

1 v0 →a v1
2 v1 →b v0

3 v1 →a
Dibuje un árbol de derivación para la secuencia a b a 2
ababaaa?

¿Pertenece a L(G)

d) G = ( V, S, v0 , → ) V = { v0, x , y } S = { x , y }
P:→

1 v0 →x v0
2 v0 →v0 y

3 v0 →xy
Dibuje un árbol de derivación para la secuencia x 3 y4
e) G = ( V, S, v0 , → ) V = { v0, a } S = { a }
P:→

1 v0 →a a v0

2 v0 →aa
Dibuje un árbol de derivación para la secuencia a 8
f) G = ( V, S, v0 , → ) V = { v0, v1 ,v2, a , b, c } S = { a , b, c }
P:→

1 v0 →aa v0
2 v0 →b v1
3 v1 →c v2b

4 v1 →cb
2 v2 →bb v2
3 v2 →bb
¿Pertenece a L(G) ? . En los casos afirmativos dibuje el árbol de derivación
1. aabcb
2. abbcb
3. aaaabcbb
4. aaaabcbbb
5. abcbbbbb
Respuesta: L(G)= { (aa)nbc (bb)kb , n≥ 0, k≥ 0 } Inténtelo
EJERCICIO 5 : Construya una gramática de estructura de frase G cuyo lenguaje
L(G) sea:
a) L(G) = { an bn / n ≥ 1 }
Dibujar un árbol de la oración a3b3
Solución: las soluciones pueden ser varias .Se muestra una posible
G = ( V, S, v0 , → )
P:→

V = { v 0, a , b }

S={a,b}

1 v0 →a v0 b
2 v0 → ab

b) L(G) = { xn y

m

/ n ≥ 2 , m no negativo y par }

c) L(G)={anbmcs / n≥0, m≥0,s≥1}
Dibujar, si es posible, un árbol de la oración a 3b3c2
d) L(G)={(ab)mcs / m≥0,s≥2}
Dibujar, si es posible, un árbol de la oración (ab) 3c4