Documente Academic
Documente Profesional
Documente Cultură
1. SISTEMAS NUMERICOS.
1.1 OBJETIVO.
1.2 NUMERACIÓN.
Sistema. En esta área del conocimiento significa los símbolos o signos utilizados para
darles una expresión a los números.
NUMEROS ROMANOS.
Este sistema (tan bien conocido por nosotros) tuvo el mérito de ser capaz de expresar los
números del 1 al 1.000.000 con solo siete símbolos: I para el 1, V para el 5, X para el 10, L
para el 50, C para el 100, D para el 500 y M para el 1000. Es importante acotar que una
pequeña línea sobre el número multiplica su valor por mil.
En la actualidad los números romanos se usan para la historia y con fines decorativos. La
numeración romana tiene el inconveniente de no ser práctica para realizar cálculos escritos
con rapidez.
NUMERACIÓN ARÁBICA.
El sistema corriente de notación numérica que es utilizado hoy y en casi todo el mundo es
la numeración arábiga. Este sistema fue desarrollado primero por los hindúes y luego por
los árabes que introdujeron la innovación de la notación posicional; en la que los números
cambian su valor según su posición. La notación posicional solo es posible si existe un
numero para el cero. El guarismo 0 permite distinguir entre 11, 101 y 1001 sin tener que
agregar símbolos adicionales. Además todos los números se pueden expresar con sólo diez
guarismos, del 1 al 9 más el 0. La notación posicional ha facilitado muchísimo todos los
tipos de cálculos numéricos por escrito.
SISTEMAS NUMÉRICOS.
En matemáticas, varios sistemas de notación que se han usado o se usan para representar
cantidades abstractas denominadas números. Un sistema numérico está definido por la base
que utiliza. La base de un sistema numérico es el número de símbolos diferentes o
guarismos, necesarios para representar un número cualquiera de los infinitos posibles en el
sistema.
Valores posicionales
La posición de una cifra indica el valor de dicha cifra en función de los valores
exponenciales de la base. En el sistema decimal, la cantidad representada por uno de los
diez dígitos -0, 1, 2, 3, 4, 5, 6, 7, 8 y 9- depende de la posición del número completo.
Sistema binario
Ya que sólo se necesitan dos dígitos; el sistema binario se utiliza en las computadoras.
Números:
Palabra o símbolo utilizado para designar cantidades o entidades, que se comporten como
cantidades. Es la expresión de la relación existente entre una cantidad y otra magnitud que
sirve de unidad. Se pueden considerar números todos aquellos conceptos matemáticos para
los cuales se definen dos operaciones, de adición y multiplicación, cada una de las cuales
obedece a las propiedades conmutativa y asociativa.
CONJUNTOS NUMERICOS
Números Naturales
Dicho en términos muy simples, los números naturales son los que sirven para contar.
Números Enteros
Son parejas de números naturales (x,y), cuya resta x-y define un número entero.
Por ejemplo: la pareja (7,3) define el entero positivo 4 ya que 7 - 3 = 4. La pareja (2,4)
define el entero negativo -2 ya que 2 - 4 = -2.
Existe un isomorfismo entre parte del conjunto de los números enteros y el de los números
naturales; ya que el conjunto de los naturales es el de los enteros positivos.
Al conjunto de los enteros también pertenece el 0 que está definido por todas aquellas
parejas de naturales iguales (1,1) ; (56,56) ; etc.
Números Racionales
El conjunto de números racionales está integrado por parejas de números enteros cuyos
elementos se dividen entre sí.
A este conjunto también pertenece el 0, que está definido por todas aquellas fracciones que
tienen al 0 por numerador.
Los racionales serán positivos o negativos según sea el signo de cada uno de los
integrantes de las parejas que los definen.
Así será que parejas de enteros de igual signo definirán un racional positivo; y parejas de
enteros de distinto signo definirán un racional negativo.
Números Reales
El campo de los números reales es más amplio que el de los racionales; ya que incluye
números que no están formados por parejas de enteros. Por ejemplo la relación que existe
entre una circunferencia y su diámetro no es un racional.(número
Siempre entre dos números reales hay otro número real; de ahí que se asocie al conjunto de
los números reales con una recta. La recta está formada por infinitos puntos y cada punto
representaría un número real.
Por facilidad al usuario de este material se empezará con la creación de la siguiente tabla,
en la cual se inicia con el sistema decimal.
00 0 0 0
01 1 1 1
02 10 2 2
03 11 3 3
04 100 4 4
05 101 5 5
06 110 6 6
07 111 7 7
08 1000 10 8
09 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10
17 10001 21 11
18 10010 22 12
19 10011 23 13
20 10100 24 14
21 10101 25 15
22 10110 26 16
23 10111 27 17
24 11000 30 18
25 11001 31 19
26 11010 32 1ª
27 11011 33 1B
28 11100 34 1C
29 11101 35 1D
30 11110 36 1E
31 11111 37 1F
32 100000 40 20
N… N… N… N…
87 2
1 43 2
1
1 21 2
1 10 2
0
5 2
1 2 2
0 1 2
1
0
Por lo tanto el número 8710, convertido a binario es 10101112.
b) Convertir el número decimal 36.4410 a N2
1. Parte entera: 3610 2.- Parte fraccionaria: .4410
36 2 .44 X 2 = 0.88
0 18 2 .88 X 2 = 1.76
0 9 2 .76 X 2 = 1.52
1
4 2 .52 X 2 = 1.04
0 2 2
0 1 2
1 0
Por lo tanto el número 36.4410, convertir a binario es igual a 100100.01112
1.6.- OPERACIONES NUMERICAS BÄSICAS EN EL SISTEMA BINARIO
1.6.1.- Efectuar las siguientes sumas binarias:
c.- 11011.012
- 1010.102
10001.102
c.- 11012
x 1112
11012
1101
1101
10110112
1001101012 1012
-101 1111012
1001
-101
1000
-101
0111
-101
0100
-000
1001
-101
100
Por lo tanto 1001101012 dividido para 1012 da 1111012 con una resto de 1002
1.7 SISTEMA OCTAL.
1.7.1 Efectuar las siguientes sumas octales:
c.- 10101257.4638
- 66567.5428
10012467.7218
b.- 6743.28 a N2
6 7 4 3 . 2
.010
011
100
111
110
Por lo tanto 6743.28 = 110111100011.0102
a.- 67ABC916 a N2
6 7 A B C 9
1001
1100
1011
1010
0111
0110
Por lo tanto 67ABC916 = 0110011110101011110010012
b.- 334BD.A316 a N2
3 3 4 B D . A 2
0011
. 1010
1101
1011
0100
0011
0011
Por lo tanto 334BD.A316 = 00110011010010111101.101000112
1.10.3 Conversión de binario a octal:
a.- 11011111102 a N8
0 0 1 1 0 1 1 1 1 1 1 0
1 5 7 6
Por lo tanto 11011111102 = 15768
b.- 1101110.102 a N8
0 0 1 1 0 1 1 1 0 . 1 0 0
1 5 6 4
Por lo tanto 1101110.102 = 156.48
1.10.4 Conversión de binario a hexadecimal
a.- 1101111111001102 a N16
0 1 1 0 1 1 1 1 1 1 1 0 0 1 1 0
6 F E 6
Por lo tanto 1101111111001102 = 6FE616
b.- 1010101011.102 a N16
0 0 1 0 1 0 1 0 1 0 1 1 . 1 0 0 0
2 A B 8
Por lo tanto 1010101011.102 = 2AB.816
1.11 CONVERSION ENTRE TODOS LOS SISTEMAS NUMERICOS
Para convertir un número de cualquier base a una base que ud. desee llegar, lleve a
cabo los siguientes pasos:
1. Número X
2. El número X conviértalo a base 10
3. De base 10, convierta a la base deseada Y
Para mayor información fíjese en el grafico Nº 1 y en el ejemplo que se adjunta
5 2 3
7 4
10
N
16 6 GRAFICO 1.
13
P.E.
3 X 70 = 3 6 x 7-1 = .8571426
4 X 71 = 28
31
2.- 43.67 = 31. 857142610
31 3 .8571426 X 3 = 2.5714278
1 10 3 .5714278 X 3 = 1.7142834
1 3 3 .7142834 X 3 = 2.1428502
0 1 3
1 0
1.12.5 Operaciones
1.12.5.1 Codificación en valor absoluto y signo
Recuerde que consiste en dedicar el bit más significativo de la
izquierda como signo.
Si = 1 es negativo
Si = 0 es positivo
Por Ejemplo.
7=0 111
Signo (positivo)
-7 = 1 111
Signo (negativo)
5= 0 101
Signo (positivo)
-2 = 1 010
Signo (negativo)
1.12.5.2 Complemento A2
a.- Representar -5 en complemento A2 y con cuatro bits
5 = 0 1 0 1
Complemento = 1 0 1 0
Agregar 1 = + 1
-5 = 1 0 1 1
Por lo tanto el número negativo -510 = 10112
b.- Representar -8 en complemento A2 y con cinco bits
8 = 0 1 0 0 0
Complemento = 1 0 1 1 1
Agregar 1 = + 1
-8 = 1 1 0 0 0
Por lo tanto el número negativo -810 = 110002
c.- Ejecutar en complemento A2 con cuatro bits -7 + 5
-7 = 1 0 0 1 7 = 0 1 1 1
5 = 0 1 0 1 1 0 0 0
1 1 1 0 + 1
-7 = 1 0 0 1
Por lo tanto el resultado de -7 +5 = 1110.
1 0100 +1
Se ignora -1 = 1111
Por lo tanto el resultado de 5 – 110 = 01002
e.- Ejecutar 4 – (-2) a complemento A2 con 4 bits.
4 = 0 1 0 0 2 = 0 0 1 0
2 = + 0 0 1 0 1 1 0 1
6 = 0 1 1 0 +1
-2 = 1 1 1 0
0 0 0 1
+ 1
- (-2) = 0 0 1 0
Por lo tanto el resultado de 4 – (-2)10 = 0 1 1 0
f.- Ejecutar 7 -3 a complemento A2 con 4 bits.
7 = 0 1 1 1 3= 0 0 1 1
-3 = 1 1 0 1 1 1 0 0
1 0 1 0 0 + 1
Se ignora -3 = 1 1 0 1
1.12.5.3 Complemento A1
El complemento A 1 se obtiene complementando cada uno de sus
bits.
P. E.:
Representar -5 con 4 bits
5 = 0 1 0 1
-5 = 1 0 1 0
1. Antes de sumar las dos cantidades se repite el bit más significativo (mas a
la izquierda).
2. Ejecutar la suma usando N + bits, ignorar el acarreo en el bit N+ 2
3. Examinar los dos últimos bits, el resultado del bit N+1; hay overflow o
sobre capacidad si los dos bit más a la izquierda no son idénticos.
-7 = 1n+1 1n 0 0 1 7 = 0 1 1 1
5 = 0n+1 0n 1 0 1 1 0 0 0
1 1 1 1 0 +1
= -7 = 1 0 0 1
Son idénticos por lo tanto
No hay overflow.
6 = 0n+1 0n 1 1 0
-5 = 0n+1 0n 1 0 1
0 1 0 1 0
1110101112 a N10
1101001.11012 a N10
10011111.11012 a N10
8610 a N2
69.4610 a N2
99.9610 a N2
11110112 111110.112
+ 11111002 001011.012
10110112 + 110111.112
10110112 110111.112
101110.112
011111.102
11010102 101101.1012
-01101112 - 011101.1112
2456328 10647.678
+ 5434648 + 01432.568
6532458 12346.778
6674328 3456.7678
- 2432148 - 367.6768
46576628 / 428
e.- Efectuar las siguientes operaciones hexadecimales:
1AB69F16 6FACA916
+ 24 678A16 - 467 ABB16
56 78BB16
ABCA696.ACB16 a N3 6801045.67410 a N4
i.- Efectuar las siguientes operaciones con complementos:
Ejecutar 5 + 4 a complemento A2
Ejecutar 7 – 6 a complemento A2
Ejecutar -8 – 2 a complemento A2
Ejecutar -6 – 5 +2 a complemento A2
Ejecutar 3 + 4 a complemento A1
Ejecutar 8 - 4 a complemento A1
Ejecutar 5-(-3) a complemento A1
Ejecutar 6-(-7)-2 a complemento A1
Trabajo elaborado por Ing. Marco Ocampo C.
BIBLIOGRAFIA
LILEN H. Del Microprocesador al Microordenador, Editorial Boixareu Barcelona –
España
CAPITULO II
ALGEBRA BOLEANA
DEFINICION: Algebra para expresar relaciones lógicas denominadas en honor
del científico George Boole (1815-1864).
MECANISMOS DE LA ALGEBRA DE BOOLE Y LA NORMAL
CONJUNTOS BOOLE
0 1
1 0
0 U
0 0
U 1
*
U +
U O
1_ F= X1 X2 X3 + X1 X2 X3 + X1 X2 X3
DUAL F= (X1 X2 X3) + (X1 X2 X3) +(X1 X2 X3)
COMPLEMENTO F= (X1 X2 X3) + (X1 X2 X3) +(X1 X2 X3)
DE DEMORGAN F= (X1 X2 X3) + (X1 X2 X3) +(X1 X2 X3)
2_ F= (X1 X2 X3) + (X1 X2 X3) +(X1 X2 X3)
DUAL F= X1 X2 X3 + X1 X2 X3 +X1 X2 X3
COMPLEMENTO F= X1 X2 X3 + X1 X2 X3 +X1 X2 X3
DE DEMORGAN F= X1 X2 X3 + X1 X2 X3 +X1 X2 X3
3_ F= c + xy = x (x+y) :. = x (x+y)
1_ BC + AC + AB = AB + AC
2_ (A+C) (A+B+C) = (A+C) (B+C)
3_ X1+X1 X2 = X1+X2
4_ (A+B) (A+C) = A + BC
5_ zx + zxy = zx +y
6_ xy + xz +yz = xy + xz
7_ (x+y) (x+y) = x
8_ zx + zxy = zx + zy
9_ X1 X2 X3 + X1 X2 + X1 X2 X3 + X2 X3: TEOREMAS DE DEMORGAN
10_ (z+x) (x+z+y) (x+z+y)
11_ (ABC) + (AB)+B C
13_ P(Q+Y)
EJERCICIOS PROPUESTOS
1_ BC + AC + AB = AB + AC
2_ (A+C) (A+B+C) = (A+C) (B+C)
3_ X1 + X1X2 = X1+X2
4_ (A+B) (A+C) = A + BC
5_ zx + zxy = zx + y
6_ xy + xz + yz = xy +xz
7_ (x+y) (x+y) = x
8_ zx + zxy = zx + zy
9_ X1X2X3 + X1X2 + X1X2X3 + X2X3 (DE DEMORGAN)
10_ (z+x) (x+z+y) (x+z+y)
11_ (ABC)+(AB)+B C
12_ (X1+X2X3X4)+ X5 X6
15_ (M+B)K+D W
x y x . y F1 x + y F2
0 0 0 . 0 1 1 + 1 1
0 1 0 . 1 1 1 + 0 1
1 0 1 . 0 1 0 + 1 1
1 1 1 . 1 0 0 + 0 0
2_ xy = xy
F1 F2 x y x . y F1 x y F2 =
:. xy 1 1 1 . 1 0 0 0 0 = xy
1 0 1 . 0 1 0 1 0 = F1 = F2
0 1 0 . 1 1 1 0 0
3_ xy +xz = 0 0 0 . 0 1 1 1 1 (x+z) (x+y)
x y z xy + xz F1 (x+z) (x+y) F2
0 0 0 0 0 0 0 1 0
0 0 1 0 1 1 1 1 1
0 1 0 0 0 0 0 1 0
0 1 1 0 1 1 1 1 1
1 0 0 0 0 0 1 0 0
1 0 1 0 0 0 1 0 0
1 1 0 1 0 1 1 1 1
1 1 1 1 0 1 1 1 1
F1 F2 =
:. xy + xz = (x+z) (x+y)
2_ x + y xy + (x+y)xy
x+y + xy + xxy + xyy
x + y+xy
x(y+y)+ y(x+x)+xy
xy+xy+xy+xy+xy
xy+xy+xy+xy+xy
x(y+y)+x(y+y)
x+x
3_ (A+B+AB) (A+B) (AB)
(A+B+AB) (0B+A0) 4_
ABC+ABCD+AC
(A+B+AB) (0+0) ABC(D+D) +ABCD+AC
(A+B + AB) (0) ABCD+ABCD+ABCD+AC
0+0+0 ABCD+ABCD+AC
0 AC(1+BC+BD)
AC(1) = AC
7_ MINIMIZACION DE FUNCIONES DE BOOLE ATRAVES DE LOS MAPAS DE
KARNAUGH (PARA 2,3 Y VARIABLES)
7._ INTRODUCCION
Los mapas de KARNAUGH se utilizan para la minimización de funciones de
BOOLE. Estos mapas consisten en representar los valores tomados por una
función lógica en una tabla rectangular o cuadrara en la cual cada casilla
corresponde a una combinación distinta de las variables, esas casilla están
dispuestas de tal manera que las combinaciones asociadas a do casilla difieren
únicamente por el valor de una variable; en la practica pueden utilizarse llaves
que designan las casillas para las cuales c/variable toma el valor de 1.
A=0 A=1
A B A B
B=0 0 0 1 0
A B A B
B=1 0 1 1 1
A=1
0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0
0 4 12 8
0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 1
1 5 13 9 D=1
0 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1
3 7 15 11
C=1 0 0 1 0 0 1 1 0 1 1 1 0 1 0 1 0
2 6 14 10
B=1
Las relaciones de las variables que tiene el mapa KARNAUGH no tienen que ser
necesariamente las anteriores estas regiones se pueden determinar en otras
posiciones siguiendo las siguientes reglas:
a) Cada variable debe ocupar la mitad del total de las casillas del mapa.
b) Cada variable debe compartir la mitad de sus casillas con el resto de las variables.
C
1 0 1 1 9 8
1 0 1 0 1 0 1 1 1 0 0 1 1 0 0 0 A
1 4 1 5 1 3 1 2
B 1 1 1 0 1 1 1 1 1 1 0 1 1 1 0 0
6 7 5 4
0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 0
2 3 1 0
0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0
D
Aun cuando las regiones en los mapas no tienen necesariamente una posición
fija; es muy conveniente en la minimización de funciones adaptar una posición
determinada con la finalidad de adquirir más rapidez en la solución de problemas.
Los mapas descritos al inicio de este objetivo son comúnmente usados y llamados
por algunos autores mapas estándar
Otra forma comúnmente utilizada para elaborar mapas de KARNAUGH es la
siguiente:
AB
C 00 01 11 10
A B C A B C A B C A B C
0 0 0 0 0 1 0 1 1 0 1 0 0
A B C A B C A B C A B C
1 0 0 1 0 1 1 1 1 1 1 0
Mapa para dos variables Mapa para tres variables
AB
CD 0 0 0 1 1 1 1 0
A B C D A B C D A B C D A B C D
0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0
A B C D A B C D A B C D A B C D
1 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 1
A B C D A B C D A B C D A B C D
11 0 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1
A B C D A B C D A B C D A B C D
10 0 0 1 0 0 1 1 0 1 1 1 0 1 0 1 0
Mapa para cuatro variables
Puede decirse que los mapas de KARNAUGH son una forma diagramática de la
tabla de verdad. Puesto que todas las combinaciones posibles de un grupo de
variables se encuentran contenidas en el mapa.
Con el objeto de agilizar la minimización de funciones las casillas de los mapas
que en este curso se utilizaran como estándar, que darían numeradas de la
siguiente forma.
7.1_ REPRESENTACION DE UNA FUNCION DE BOOLE EN UNA MAPA DE
KARNAUGH.
SUMA DE - Forma canónica F(A,B,C)= ABC+ABC+ABC
PRODUCTOS - Forma binaria F(A,B,C)= 001+011+110+100
1's - Forma técnica F(A,B,C) = Em (1,3,4,6)
FUNCIONES - Forma no canónica F(ABC)=ABC+AB+ABC+BC
DE BOOLE
Por lo pronto solo se estudiarían las funciones que representan unos (1’s) en los
mapas.
Como ya se dijo anteriormente una función de BOOLE puede representar 1’s o 0’s
en un mapa; y esto puede realizarse de diversas formas, las cuales explicaremos
con los siguientes ejemplos:
Representar en un mapa la siguiente funcion:
F= ABC+ABC+ABC+ABC F=(x,y,z,w)= Em (0,3,5,6,7,11,13,15)
XY
ZW 00 01 11 10
A
00 1
1 1 1
01 1 1
C 1
7.2_ 11 1 1 1 1 ASOCIACION DE
B
1’s EN LOS 10 1 MAPAS
En un mapa de KARNAUGH se pueden asociar los 1’s que se encuentren en
casillas adyacentes o vecinas.
La adyacencia o vecindad entre dos casillas puede ser de manera vertical u
horizontal, y en términos generales se dice que 2 o mas casillas son adyacentes
si solo difieren en l valor de una variable.
.- Se pueden asociar 1’s en cantidades que provengan de 2 n.
.- Un 1 puede formar parte en más de una ocasión.
.- Debe asociarse siempre la mayor cantidad permitida de 1’s y no cometer
redundancias.
Ej:1) F=ABC+ABC+ABC+ABC+ABC
A FUNCION MINIMIZADA
F C + AB
1 1 1 1
C 1
B
2._ F= ABC+AC+BC+ABC
A FUNCION MINIMIZADA
F=AB+BC+AB
1 1
C 1 A 3._ F=BC+AB+BC+AC
1 1
1 FUNCION MINIMIZADA
B
1 F=B+C
C 1 1 1 1
WX FUNCION MINIMIZADA
F = yz YZ 00 01 11 10 + wxy + wxz
00 1 1
01 1
11 1 1 1 1
10 1
0 1 1
1
6._
11
1
10 1 1
1
F=ABCD+ABC+ABCD+ABCD+ABCD+ABCD+ABCD
A FUNCION MINIMIZADA
F= CD+BD
1 1
C 1 1 1 1
1 1
1.
1 1
2.
1 1
1
3.
1 1
1 1
4.
1 1
5.
1 1
1 1
1.
1 1
1 1
1 1
1 1
2.
1 1
1 1
3.
1 1 1 1
1 1 1 1
4.
1 1
1 1
1 1
5.
1 1 1 1
1 1 1 1
NOT (NO)
AND (Y)
OR (Ó)
NAND
MOR
OR EXCLUSIVO
NOT
SIMBOLO OPERACIÓN (INVERTIDO COMPLEMENTAR)
TABLA DE VERDAD
X F=X
0 1
1 0
AND
SIMBOLO
OPERACIÓN (MULTIPLICACION)
TALA DE VERDAD
A B F = A.B
0 0 0
0 1 0
1 0 0
1 1 1
OR
SIMBOLO OPERACIÓN (SUMA)
TABLA DE VERDAD
A B F= A+B
+ + 0 0 0
0 1 1
1 0 1
1 1 1
NAND
SIMBOLO OPERACION (MULTIPLICACION Y COMPLEMENTA)
COMPLEMENTA EL PRODUCTO
TABLA DE VERDAD
A B F= AB
0 0 1
0 1 1
1 0 1
1 1 0
NOR
SIMBOLO
OR EXCLUSIVO (XOR)
SIMBOLO
OPERACIÓN: SACA UN (1) CUANDO EXCLUSIVAMENTE UNA
DE SUS ENTRADAS ES UN (1)
TABLA DE VERDAD
A B F = AB+ AB
0 0 0
0 1 1
1 0 1
1 1 0
8.1.3. IMPLEMENTACION DE FUNCIONES DE BOOLE
Implementar una función de BOOLE es llenarla a la practica por medio de
un circuito que puede ser electrónico hidráulico, neumático o electrónico a
base de compuertas lógicas.
Ej. Implementar la sig. Función por medio de compuertas lógicas
1._ F= X0 X1 X3 + X0 X1 X3 + X0 X1 X2
A1A0
B1B0 00 01 11 10
00
01 1
11 1 1
10 1 1
A<B F= Em (1,2,3,6,7,11)
F= A1B1+A0B1B0+A1A0B0
A1A0
B1B0 00 01 11 10
00 1 1 1
01 1 1
11
10 1
A>B F= Em (4,8,9,12,13,14)
F= A1 B1+ A0 B1 B0 + A1 A0 B0
DISEÑAR UN GENERADOR DE PARIDAD PAR Y OTRP GENERADOR DE
PARTIDA IMPAR, PARA 4 BITS tomando en consideración la serie de unos o que
integran c/series de bits y haga que el cuanto corra en una sola salida.
F(A,B,C,D) = (1,2,4,6,7,8,9,11,12,14)
= (1,2,3,4,6,7,8,9,11,12,13,14)
AB
CD 00 01 11 10
00 1 1
01 1 1 1
11 1 1
10 1 1 1
F= AC+D+ABD+ABC+ACD+BCD
AB
CD 00 01 11 10
00 1 1
01 1 1 1
11 1 1 1
10 1 1
F= AC+AC+BD+BD
F= (A,B,C,D)=(0,3,5,10,15)
F(A,B,C,D)=(0,5,10,15)
AB
F=ABCD+ABCD+ABC+BCD CD 00 01 11 10
00 1
01 1
11 1 1
10 1
F=ABCD+ABCD+ABCD+ABCD+ABCD
PROBLEMAS PROPUESTOS
1._ Se desea minimizar para luego implementar con compuertas lógicas básicas
las siguientes BOOLEANAS:
a) ABCD+ ABCD +ABCD + ABCD + ABCD + ABCD+ ABCD
b) F(K,L,M,N)=Em (0,4,6,10,11,13)
c) F(A,B,C,D)= Em (0,1,3,5,7,9,11,13,15)
d) F(X0,X1,X2,X3)=Em(1,4,5,8,9,11,12,14,15)
e) F= ABC + ABC + ABC + ABC + ABC + ABC + ABCD
2._ Diseñar un circuito detector de números primos (que reconozca los números
primos con un cero)
3._ Diseñe un circuito detector de números pares y nomes (pares con 0’s y nomes
con 1’s)
9._ INTERPRETAR DE LOS TEOREMAS DE LOS MINITERMINOS Y
MAXTERMINOS
A parir de la siguiente tabla de verdad obtenga la siguiente función; una con
minitérminos (1’s) y otra con maxtérminos (0’s)
X Y Z F MINITERMINOS MAXTERMINOS
0 0 0 0 0 X+Y+Z
1 0 0 1 1 X Y Z
2 0 1 0 0 X+Y+Z
3 0 1 1 0 X+Y+Z
4 1 0 0 1 X Y Z
5 1 0 1 0 X+Y+Z
6 1 1 0 1 X Y Z
7 1 1 1 0 X+Y+Z
X Fmin M= (X+YW)(Y+Z+W)(X+Y+Z)
00 01 11 10
00 0 0 0
01 0 W
11 Z PROBLEMAS:
10 0 De las siguientes funciones obtenga
Y los maxitérminos y los minitérminos
primero obtenga los maxitérminos y
luego los minitérminos:
a) F(A,B,C,D)= M(0,2,6,10,14,15,9,1)
b) F(X,Y,Z,W)= M(1,4,6,5,2,14,12,10,15)
c) F(A,B,C,D)= M(2,6,8,9,10,11,13,14,15)
d) F(X,Y,Z,W)= M(3,4,5,9,14,15,11,10,7)
b) X.Y.Z =(X/Y/Z)/1
c) X+Y+Z=(X/1)(Y/1)(Z/1) Ó (X/Y/Z)
PROBLEMAS PROPUESTOS:
1._ Implementar con NAND’S
F=BD+BC+ABCD=(B/D)/(B/C)/(A/B/C/D)
a) A = A 0 ó A A
b) MULTIPLICACION
ABC = A B C
c) SUMA
A+B+C= (A+B+C) 0
d) SUMA DE PRODUCTOS
AB+CDE+F= (A B)( C D E ) F 0
e) PRODUCTO DE SUMAS
(A+B)(C+D+E)(F)(A B)(C D E ) F
PROBLEMAS PROPUESTOS:
a) Los 2 ejercicios efectuados anteriormente con NAND ahora realícelos con
NOR (aplicar las formulas dadas)
b) Realizar llos siguientes problemas con compuertas NAN’S y NOR’S
b.1_ F= A B C D
b.2_ F= A+B+C+D
b.3_ F= ABC+ ABC+ BC+ AC
b.4_ F=(A+B)(B+C+D)(D+E)
b.5_ F=AB+A+D+ABC+E
A=0 A=1
BC
DE 00 01 11 10
La adyacencia en este caso puede se da 00 10000 10100 11100 11000
dos formas en cada mapa y entre mapas. 01 10001 10101 11101 11001
En cada mapa seria igual que en mapas
11 10011 10111 11111 11011
de 4 variables; entre mapas la
10 10010 10110 11110 11010
adyacencia puede determinarse de
manera rápida y sencilla imaginándonos que uno de los 2 mapas es todo y
colocado sobre el otro, y las casillas que queden encima son adyacente o vecinas
por ejemplo la casilla 0-16,1-17 ,11-27,8-24, etc todas las reglas aplicadas para
los mapas de cuatro variables son validas a las de n variables. Debe notarse que
mapa de 5 variables no es mas que una de 4 repetida 2 veces.
1_ Ej minimizar en mapas de KARNAUG la siguiente función:
F(x,y,z,w,v)= Em(1,3,4,5,7,8,9,10,12,13,21,24,25,26,28,29)
yz
wv 00 01 11 10
00 1 1
01 1 1 1
11
10 1
F = Em(I,II,II,IV,V)
I=YW
II= Y Z V
III= Z W V
IV=X W
V= X Y V
2._ F= ACDE+ABCDE+BCDE+ACD+ABCD+ABCD+ABCDE+ABCDE+ACDC+ABCDE
A=0 A=B
BC
DE 00 01 11 10 0 1 11 10
00 1 1 1 0 1 1 1
01 1 1 1
11 1 1 1 11 1 I=BE
10 1 1 1 10 1 1 1
II=CE
III=ABD
IV=BCD
V=BCDE
TRABAJO
1._ F(XYZWV)=Em(0,4,6,8,9,10,13,14,15,17,23,26,29,30)
2._ F(A,B,C,D,E)=Em (1,6,10,14,15,20,23,24,27,30,31)
3._ F=ABCD+ABC+ABCD+BCDE+CDE+ACDE
4._ F=ACD+ABCD+ABCD+ABC+BCDE+ABCDE+CDE
5._ F= ACDE+ABCD+ABCD+ABC+ABCDE+ABCDE+d(ABC+ACD+ABCD+ABCDE+ABCDE
FUNCIONES IMCOMPLETAS ESPECIFICADAS:
00 01 11 10
0 1 1
1 1 1
= F= PQ+PA
00 01 11 10
0 1 X
1 1 1 X
EXPRESIONES TECNICA
F(P,A,Q)=Em(1,2,3)+d(6,7)
Obtener la realización mínima de suma de productos de la
F=(A,B,C,D,E)=Emin(1,2,3,4,5,11,18,19,20,21,22,23,31)+d(0,1,2,15,27,30)
A=0 A=1
00 01 11 10
00 1
01 1
11 1 1 1 X
10 1 1 X
F= ABC+BDE+BCD+ABD
UNIDAD III
3._ CIRCUITOS DE SALIDA MULTIPLES, CONTADORES EMPAQUETADOS Y
EXHIBIDORES CON 7 SEGMENTOS (DISPLAY).
3.1._ CIRCUITOS DE SALIDA MULTIPLE:
a) CIRCUITO DE SALIDA UNICA
-SALIDA UNICA
-COMBINACIONALES -SALIDA MULTIPLE
c) CIRCUITO LOGICOS
-SECUENCIALES
CAPÍTULO III.
ÁRBOLES BINARIOS
En la vida cotidiana, muchas vedes sin saberlo, trabajamos en ocasiones con los
árboles. Por ejemplo: árboles genealógicos, organigramas, directorios en los
discos de un computador, etc. Cada uno de estos conceptos representa un árbol.
ORGANIGRAMA DE UNA EMPRESA
3.1.DEFINICIONES
Que a su vez tiene como raíz B. el árbol derecho esta conformado también por
otro árbol.
DEFINICIONES
NODO
Un árbol binario es un conjunto de elementos cada uno de los cuales se
denomina nodo. Un árbol binario puede tener cero nodos y en este se dice que
esta vació. Puede tener un solo nodo, y en este caso existe solamente la raíz del
árbol o puede tener un número finito de nodos. Cada nodo que esta ramificado
por la izquierda o por la derecha o puede no tener ninguna ramificación. La
anatomía de un nodo en un árbol binario es la siguiente:
Raíz en un árbol binario se pueden distinguir la raíz principal y las raíces de los
demás subárboles. Por ejemplo:
La raíz principal es el nodo cuya información es A. podemos distinguir también el
árbol.
Cuya raíz es el nodo con información D. Este nodo es la raíz del árbol de la
derecha. El Árbol de la izquierda
HIJO
Nos referimos al ejemplo anterior. En el caso 1 el nodo A no tiene hijos. En el caso
2, B es un hijo del nodo A y en el caso 3, D es hijo de B y el padre de B es el nodo
A
HERMANO
Nos referimos al caso 3 del ejemplo anterior. Los hermanos son los hijos de un
mismo padre. Los nodos B y C son hermanos. El nodo D no tiene hermanos
HOJA
Una hoja es un nodo que no tiene ramificaciones. Por ejemplo
El nodo C es una hoja mientras que el nodo B no se puede considerar como hoja
porque tiene una ramificación por la derecha. El nodo D también es una hoja
NODO NO TERMINAL
Un nodo no Terminal es aquel que posee por lo menos una ramificación. En el
ejemplo anterior, el nodo A o el B son nodos no terminales, mientras el nodo D o
el nodo C son nodos terminales.
CAMINO
Un árbol siempre se examina hacia abajo. Por ejemplo:
B
G
C E D F
La longitud entre A y E es 3. La longitud entre G y G es 0. La longitud entre A y B
es 1 Obsérvese que no podemos calcular la longitud entre B y G ya que el camino
B A G no existe.
DESCENDIENTE
El nodo C es descendiente del nodo A si a partir de A podemos llegar a C a través
de un camino. Por ejemplo:
El nodo C es descendiente de A ya que a C podemos llagar por el camino
A B C
Siempre que exista un camino para llegar de un nodo V a un nodo X, el nodo X es
un descendiente de V. pAra el ejemplo anterior, el nodo E es descendiente de D
pero el nodo no es descendiente de B
ANCESTRO
El nodo A es un ancestro del nodo C si existe un camino entre A y C. basándonos
en el ejemplo anterior. A es un ancestro de C ya que existe un camino entre los
nodos. No se puede hablar de que D sea ancestro de ya que el camino D A
B no existe
NIVEL
Cada nodo tiene un nivel dentro de un árbol binario. Por definición el nodo raíz
tiene un nivel y de los demás nodos tienen el nivel de su padre más 1. Por esto
los nodos que son hijos del nodo raíz tienen un nivel 1. Veamos este ejemplo
A M
B E N O
C D F P
G
S
NIVEL 0 T
NIVEL 1 W
NIVEL 2
NIVEL 3
Los nodos A, M y S tienen un nivel 0 en tanto que los nodos G y V tienen un nivel
3. Obsérvese que le nivel del nodo G es la longitud del camino desde la raíz hasta
el nodo.
GRADO DE UN NODO
El grado de un nodo es el número de hijos. Por ejemplo el grado del nodo A es 2,
el grado del nodo T es 1. El grado de un nodo Terminal siempre es 0.en los
árboles binarios, el grado de un nodo fluctúa entre 0 y 2. Existen otros tipos de
árboles, (árbol n_ario), en los cuales esta restricción no existe. Estos arboles
serán estudiados en el segundo tomo de este libro
ALTURA
La altura de un árbol binario es el nivel de la hoja o de las hojas que están más
distantes de la raíz. Basándonos en el ejemplo anterior, la altura del árbol cuya
raíz es A, corresponde a la longitud del camino para llegar a la hoja más distante
de la raíz. En este caso será 3. La altura cuya raíz es M, corresponde al nivel de
la hoja P.
ARBOL BINARIO COMPLETO
Un árbol binario completo es aquel en el que todo nodo no Terminal tiene sus dos
hijos. El siguiente es un árbol binario de nivel 3:
NIVEL 0
A NIVEL 1
D C F B G E H K J L I N M O
NIVEL 2
NIVEL 3
Obsérvese que todos los nodos no terminales tienen sus dos hijos. El máximo
número de nodos que puede tener un árbol de nivel n es:
20 + 21 + 22 + 23….+ 2n
Si n es 3 entonces
20 + 21 + 22 + 23 =15
Este árbol es un árbol binario completo de nivel 3 y este es el máximo número de
nodos que puede tener un árbol de nivel 3.
ARBOL BINARIO IGUAL
Dos árboles son iguales si los dos son vacíos. Existe otro caso ene. Cual dos
árboles son iguales:
A A
B C B C
D D
Estos árboles son iguales porque sus raíces son iguales y también lo son su
respectivo árbol izquierdo y derecho. Para que un árbol sea igual a otro, es
necesario que el contenido de cada uno de sus respectivos nodos sea el mismo y
que legan las mismas relaciones de parentesco. Por ejemplo los siguientes
árboles
A A B
B C B E A F
D D D
A B C
C
B C A B A
A
A
A
B C
B C
G
F E F
D E
D H
PESO
El peso de un árbol en un nodo dado es el número de nodos en el árbol sin
contarse el mismo. Por ejemplo:
A P
B C Q
R
D E S T U V
El peso del árbol cuya raíz es A corresponde al número de nodos de ese árbol: los
nodos Q,C y R tienen un peso de 2
FORMAS DE RECORRER UN ARBOL BINARIO
Universalmente existen 3 formas de recorrer un árbol binario:
Preorden
Inorden
Posorden
Si logramos construir un árbol como este:
Podemos extraer sus datos de 3 maneras. Veamos cada una. Recorrer un árbol
en preorden consiste en:
Examinar el ato del nodo raíz
Recorrer el árbol izquierdo en preorden
Recorrer el árbol derecho en preorden
Si deseamos recorrer todo el árbol, evidentemente debemos comenzar por el
nodo raíz. Este método exige examinar primero el nodo raíz debemos entender
como examinar un nodo, el hecho de efectuar sobre su información cualquier
acción: por ejemplo escribirla, efectuar alguna operación matemática sobre ella o
con ella, modificarla. También en la gran mayoría de los textos de estructuras de
información, se utiliza el termino visitar un nodo. Entre la palabra examinar y la
palabra visitar existe una diferencia. Examinar un nodo es revisar su contenido y
eventualmente modificarlo en tanto que visitar un nodo es utilizar la dirección de
ese nodo con el propósito de seguir explorando el árbol hacia abajo. Si deseamos
recorrer un árbol en preorden, con el propósito de escribir su contenido, debemos
examinar el contenido de cada uno se sus nodos, mientras si deseamos contar
sus nodos, es necesario visitar cada nodo.
Supongamos que deseamos escribir un árbol en preorden. Para hacerlo, se debe
examinar el nodo raíz y luego recorrer el árbol de la izquierda en preorden.
E
D
ARBOL A LA IZQUIERDA DE A
Recorrer este árbol en preorden es examinar su nodo raíz y recorrer de nuevo el
árbol de la izquierda preorden.
D
ARBOL A LA IZQUIERDA DE B
Recorrer este árbol en preorden es examinar su nodo raíz. Como ya no existen
nodos por la izquierda, debemos empezar a recorrer el árbol D por la derecha.
Como ya no existen nodos por la derecha, debemos recorrer el árbol.
E
D
Por la derecha. El árbol de la derecha lo debemos recorrer también en preorden.
E
ARBOL A LA DERECHA DE B
Recorrer este árbol en preorden, es examinar su nodo raíz y recorrer el árbol por
la izquierda en preorden y luego recorrerlo por la derecha. Como no existen
árboles ni por la izquierda ni por la derecha, debemos recorrer el árbol.
F G
En preorden. El orden en el cual debemos examinar estos nodos es: primero el
nodo C, luego F y luego G. por lo tanto al imprimir el árbol anterior en preorden,
los resultados deben ser:
A B D E C F G
Antes de seguir adelante, el lector debe certificar que el árbol:
1
0
5 1
5
3 1
7 4 1
7
B C
Si queremos imprimir este árbol en inorden, debemos primero recorrer el árbol
izquierdo en inorden:
Al tratar de recorrer este árbol en inorden y no existe árbol por su izquierda
debemos examinar el nodo y luego recorrer el árbol de su derecha. Al no existir
árbol por su derecha, entonces el árbol a la izquierda del nodo A ha sido
totalmente recorrido. Siguiendo con las normas establecidas inicialmente,
debemos examinar el nodo A y luego recorrer el árbol a la derecha del nodo A
C
ARBOL DERECHO DE A
Para recorrer este árbol en inorden primero debemos recorrer el árbol izquierdo.
Al no existir árbol izquierdo, se debe examinar este nodo y luego recorrer el árbol
derecho. Al no existir árbol derecho, el árbol ya ha sido recorrido en su totalidad.
Por lo tanto los datos impresos serán:
B A C
Observemos este otro ejemplo
1
0
5
1
2
3 7 1 1
Debemos recorrer en inorden el árbol a la izquierda
1 de la5raíz:
3 7
1
2
1 1
1 5
Sabemos que al recorrer este árbol en inorden, los resultados son:
11 12 15
Con lo cual al examinar todo el árbol en inorden, los datos impresos serán:
3 5 7 10 11 12 15
Se invita al lector a certificar que al recorrer el siguiente árbol binario en inorden
los resultados son:
H D I B E A J F C K G L
Veamos el árbol
B C
D E F G
I J L
H K
Examinar la raíz.
Veamos un ejemplo:
B C
posorden, el único dato impreso será C. una vez recorridos los árboles izquierdo y
derecho, debemos examinar la raíz. Según esto los datos impresos serán.
B C A
Ejercicios
1. Elaborar un programa que cree en la memoria del computador el siguiente
árbol binario:
B C
D E
B C
D E
F G I J
Preorden ABCDFGEIJ
Inorden BAFDGCIEJ
Posorden BFGDIJECA
B C
D
E
R
Q
U V
S T
W X Y
Z
8
7
2
5
Luego al leer el número 23, como este dato es menor a 87, nos debemos
desplazar hacia abajo por la izquierda. Al llegar al 25, debemos crear un nuevo
nodo a la izquierda por el hecho de que 23 es menor que 25, así:
8
7
2
5
2
3
Al leer el siguiente dato este debe ser rechazado porque ya existe en el árbol. Al
leer el 48, debemos desplazarnos por la izquierda y al compararlo con 25, se
debe crear un nuevo nodo a la derecha del 25, así:
8
7
2
5
2 4
3 8
8
7
2
5
2 4
3 8
Por ultimo al leer el numero 92 este debe insertarse a la derecha del 87. Los
datos en el. Árbol quedan, finalmente, distribuidos así:
8
7
9
2 2
5
2 4
3 8
8
Si imprimimos el contenido del árbol, recorriéndolo en inorden. Tendremos la lista
pedida:
8 23 25 48 87 92
IMPRESIÓN DE UN ARBOL EN INORDEN
Observemos el siguiente árbol:
Raíz
1
0
5
1
5
3 7 2
0
Al escribir este árbol en inorden los resultados serán:
3 5 6 7 8 10 15 20
Observando el proceso, lo primero que se escribe siempre es el contenido del
nodo de la extrema izquierda del árbol. Luego debemos escribir el contenido del
nodo padre para luego escribir en inorden el árbol de la derecha.
R 10
0
A 5
0 15 G
0
3
0 6 12
0 0 16
1 4 6 18
0
B I
E
D F J
50
2 R A
3 R A B
30
3 R A B C 10
3 R A B
-
2 R A
-
3 R A D 40
2 R A
-
2 R E 60
3 R E F 65
2 R E -
1 R -
1 G 150
2 G H 120
1 I -
1 J 180
0
-
1
0
5
3
0
3 7 2 4
0 0
La impresión en posorden es:
3 7 5 20 40 30 10
3
Antes de escribir el contenido del nodo debemos certificar que ya han sido
recorridos en posorden los árboles izquierdo y derecho.
1
0 3
0
5 1 2 4
7 5 5 0 5
Al imprimir este árbol por niveles, los resultados serán:
20 10 30 5 15 25 40 7 50
Aprovechando una estructura FIFO, podemos efectuar esta impresión sin ningún
problema.
Al comenzar almacenamos en una cola la dirección del nodo raíz:
B C
10 C D E
30 D E F G
5 E F G H
F G H
15
G H
25
40 H I
7 I
50 H
Pre G E A I B M C L D F K J H
In I A B E G L D C F M K H J
Si se recorre este árbol en Preorden, el primer nodo que visita es G y al recorrerlo
en inorden el nodo del extremo izquierdo es I. en este lugar podemos afirmar que
los nodos EAIB, forman el sub.-árbol izquierdo de G y los nodos MCLDFKJH el
sub.-árbol derecho q
Raíz p
G
EAIB MCLDFKJH
IABE LDCFMKHJ
El problema esta dividido en dos. Ya sabemos que la raíz es G y también
sabemos los componentes de la izquierda y de la derecha. Ahora podemos
guardar en una pila los componentes del árbol derecho y seguir trabajando sobre
el árbol izquierdo. Es decir tratar de organizar el árbol izquierdo.
La pila quedara así:
1 MCLDFKJH G
LDCFMKHJ
Vamos a considerar la G del recuadro como un apuntador que esta en la pila que
nos indica la dirección del nodo padre de este sub.-árbol derecho. Ahora debemos
seguir trabajando con el sub.-árbol izquierdo.
EAIB
IABE
De la misma forma, el nodo raíz de este nuevo árbol es E. este nodo debe
conectarse al nodo G así
E
Q
El apuntador que siempre debe estar dirigido al nodo al cual se conectara el
nuevo nodo posteriormente. Siempre el nuevo nodo será indicado por el
apuntador p. con lo anterior el árbol estará organizado así:
E MCLDFKJH
LDCFMKHJ
AIB
IAB
Obsérvese con cuidado porque el nodo E no tiene sub-árbol derecho. Siguiendo
el mismo orden, debemos crear un nodo A, el cual conectara por la izquierda con
E y este nodo si tendrá sub- árbol por la derecha, así:
E MCLDFKJH
LDCFMKHJ
I B
I B
1 MCLDFKJH G B A
LDCFMKHJ B
E MCLDFKJH
LDCFMKHJ
I B
B
En este lugar debemos efectuar un retiro de la pila y conectar el nuevo nodo por
la dercha del nodo indicado por el apuntador que estaba almacenando en el
primer elemento de la pila.
Con esto, el arbol queda así:
G
E MCLDFKJH
LDCFMKHJ
I B
E M
A CLDF KJH
LDCF KHJ
I B
1 KJH M
KHJ
LD F KJH
I A B ELD C F M KHJ
La pila hasta el momento tendrá estos datos:
1 KJH M F C
KHJ F
E M
A KJH
C KHJ
L F
I B F
D
D
1 KJH M F C D L
KHJ F D
Obsérvese que siempre que se identifique un sub-árbol derecho, la pila debe ser
nodo por la derecha, podemos hacer adecuadamente la inserción del nuevo nodo.
D L
D
Esto quiere decir que el nodo D se debe conectar a la derecha del nodo L, así:
E M
A KJH
C KHJ
L F
I B F
este momento:
G
E M
JH
I A B L DC F K HJ
Y la pila contendrá la siguiente información
1 JH L
HJ
E M
A
C K
L F J
I B
D queda vacía H
Al observar el proceso, vemos que la pila y falta adicionar al árbol el
nodo H. con esto podemos afirmar que el proceso se debe efectuar mientras la
pila no este vacía o exista información para distribuir por la rama izquierda. Por lo
tanto el árbol final será:
G
E M
I A B L DC F HK J
Existe un buen número de formas para construir una función que efectué el
proceso anterior. A continuación presentamos una de estas versiones codificada
en lenguaje C.
* /
- +
=
Los humanos trabajamos con notación infijo. De la misma manera los
computadores están diseñados para que reconozcan la misma prioridad que
reconocemos los humanos. La instrucción:
Resol = 5 * 2 + 8 * 3;
Deja almacenada, por ello, la cifra 34, ya que la asociación automática es:
(result: (5 * 2)+(8 * 3));
Si deseamos que un computador, o un ser humano, calcule:
Resul= 5 * 2 + 8 * 3;
Pero sumando 2 y 8 primero, debemos diseñar la instrucción así:
Result= 5 * (2 + 8) * 3:
Se utilizan los paréntesis para modificar la prioridad de los operadores.
Un programador al indicarle esta instrucción a un computador:
Resul= 5 * 2 + 8 * 3;
Espera la respuesta 34 pero no le interesa como lo hizo la maquina.
Internamente, esta operación la ejecuta utilizando una pila. La operación la
ejecuta reconociendo objeto a objeto. Vamos a ilustrar la transformación que debe
hacer la maquina con el propósito de efectuar la operación anterior. De lo único
que esta enterada tanto la maquina como el programador, es que el operador *
tiene mas prioridad que el operador +. La transformación que se realiza es
convertir la expresión de notación infijo a notación posfijo lo cual se estudiará en
el siguiente numeral. A continuación estudiaremos que es la notación posfijo.
La notación posfijo, es otra manera de escribir una expresión aritmética. La
notación posfijo, se caracteriza por la ausencia de paréntesis. Esta notación,
aunque nunca utiliza paréntesis, es presentada sin ningún tipo de ambigüedad.
Veamos su naturaleza. Si tenemos una expresión en notación infijo. Por ejemplo:
a +b
Para escribir esa misma expresión en posfijo. Se debe ejecutar los siguientes
pasos:
1. agrupar utilizando paréntesis, de acuerdo a la prioridad de los operadores,
así:
(a+b)
2. escribir en posfijo la expresión, así:
ab+
Obsérvese que en la notación posfijo, el operador se escribe después de los
operadores . Veamos otro ejemplo:
a+b*c
Agrupando tenemos:
a+(b*c)
Convirtiendo a posfijo la expresión entre paréntesis resulta:
a+(bc*)
Ahora tratando la expresión entre paréntesis como un operador tenemos
a ( b c * )+
y destruyendo los paréntesis, nos queda la expresión escrita en posfijo:
abc*+
Veamos este ejemplo;
(x*y)+(v*w)
Primero debemos convertir las expresiones encerradas entre paréntesis a
notación posfijo, así:
(xy*)+(vw*)
Y luego toda la expresión a notación posfijo, así
xy*vw*+
a b
El operador +aplica a los operandos de la rama izquierda y la rama derecha. La
expresión:
a+b*c
Quedara expresada así:
+
A *
B C
* *
/ C F
A B D E
Existe un método sencillo para construir una árbol que representa un a expresión.
El primer paso consiste en transformar la expresión de infijo a prefijo y partiendo
de la expresión escrita en prefijo construir el árbol. Veamos algunos ejemplos:
Infijo a+b
Prefijo +ab
Al tener la expresión en prefijo, fácilmente se puede construir el árbol siguiendo
este método:
Se insertan nuevos nodos por la izquierda del árbol que hayamos insertado un
operando
A
+a
A B +ab
Infijo a+(a*c d)
Primero debemos convertir la expresión a prefijo:
+a*b cd
Luego debemos insertar nuevos nodos hasta encontrar un operando:
A
+a
A *
+a*
A *
B
+a*b
Como el nodo mas reciente insertado fue un operando, volvemos hacia atrás e
insertamos el siguiente a la derecha.
A * +a*b
A *
B C
+a*b c
Como el nodo más reciente insertado fue un operando, volvemos hacia atrás e
insertamos el siguiente a la derecha:
A *
B
+a*b cd
+ D
A *
B C
A B+ * CD E / F
CONVERSION DE UNA EXPRESION EN UN ARBOL BINARIO A SU
REPRESENTACION INFIJO
En este numeral se desarrollara una función que a partir de un árbol binario,
genere un arreglo que almacene la expresión en infijo. Antes de entrar
propiamente en el desarrollo del problema, estudiaremos algunas propiedades de
estos árboles. Supongamos que tenemos en la memoria del computador un árbol
así:
A *
B C
Este árbol representa la siguiente expresión
a+b*c
La expresión anterior escrita en prefijo será:
+ a * bc
Si recorremos el árbol en preorden los datos generados serán:
+a*bc
Lo anterior nos permite plantear la primera propiedad:
Si se recorre un árbol en preorden, los datos generados representan la expresión
escrita en prefijo.
Si el árbol anterior recorremos en posorden, los datos generados serán:
abc*+
Estos datos representan la expresión
a+b*c
Escrita en posfijo, lo cual nos permite plantear la segunda propiedad:
Si se recorre un árbol en posorden, los datos generados representan la expresión
escrita en posfijo.
Es de esperarse que si recorremos el árbol en inorden, la expresión generada
estará escrita automáticamente en infijo. Veamos:
a+b*c
Para el caso que nos ocupa se cumplió la norma. Veamos otro ejemplo:
(a+b) c/d+e
Esta expresión escrita en prefijo será:
+/ +abcde
Y en posfijo será:
ab+c d/e+
y el árbol generado será:
/ E
+ C
A B
Al recorrerlo en preorden, los datos generados serán:
+/ +abcde
Al recorrerlo en posorden, los datos generados serán:
ab+c d/e+
Las dos propiedades anteriores se cumplen. Se recorremos el árbol en inorden
los datos generados serán:
a+b c/d+ e
Pero esta expresión, para su evaluación, se asocia así:
a+((b c)/ d)+e
Y es bien diferente da la inicial, la cual era:
(a+b) c/d+e
Lo cual nos permite plantear la siguiente propiedad:
Si se recorre un árbol en inorden, los datos generados no representan la
expresión escrita en infijo.
Si queremos que de un árbol se genere la correspondiente expresión en infijo no
basta con recorrerlo en inorden, además debemos efectuar un proceso que
parentice la expresión. Para el ejemplo, el recorrido inorden del árbol es:
a+b c/d+e
Como el operador tiene más prioridad que los demás, y el operador / tiene más
prioridad que el +, al tratar de evaluar la expresión esta se asocia así:
a+((b c)/d)+e
Debemos diseñar un proceso que genere un arreglo infijo con los siguientes
datos:
( A + B ) C / D + E
A + B C/ D E
Como el operador de la raíz aplica a los dos subárboles, gráficamente el árbol
anterior lo podemos representar así: +
/ E
2
D
3 + C
4
A B
B
+ C
A B
B
Si recorremos el árbol en inorden, los resultados serán:
a+b c
Lo cual es diferente a la expresión que esta representada en el árbol.
(a+ b ) c
Si el árbol es:
A B
B
Al recorrerlo en inorden los resultados son:
a b+c
y no existe la necesidad de insertar paréntesis en la expresión. La diferencia, en
este caso particular, radica en que si el operador padre tiene más jerarquía que el
operador hijo, debemos patentizar la rama izquierda o derecha del árbol.
Observemos los siguientes árboles:
+
+ C C
A B A B
B - B
- C
A B
B
B
Para el árbol la expresión será:
a b+c
no se necesitan paréntesis. El operador + tiene menos jerarquía que el operador
-
C
A B
Para este caso al recorrer el árbol en inorden, se genera la siguiente expresión:
c–a–b
Se deben insertar paréntesis ya que es muy diferente la expresión que está
representada en el árbol:
c – (a - b )
Ahora debemos puntualizar en que momento se necesitan insertar paréntesis.
La respuesta es muy sencilla. Veamos este ejemplo
*
+ /
+ C
A -
B C B C
CAPITULO IV.
APLICACIONES DE LOS GRAFOS
En este capítulo, vamos a estudiar algunos problemas que se resuelven usando
los grafos. El objetivo de este estudio es mostrar al lector diferentes técnicas para
resolver problemas prácticos usando esta estructura. El lector con base en estos
conocimientos estará en capacidad de imaginarse otras aplicaciones prácticas de
los grafos y los dígrafos. Hemos tratado de presentar las aplicaciones más
clásicas como son: Algoritmo de Prim. Algoritmo de Kruskal. Algoritmo de Dijkstra,
el problema de las parejas, la clasificación topológica, la ruta crítica, etc.
ALGORITMO DE PRIM
Este algoritmo resuelve el problema de escoger la mejor alternativa entre las
muchas que se pueden presentar. Veamos el siguiente grafo.
Este grafo esta compuesto por 13 vértices y puede representar una red de
1 7
4 5
3 2 5
8
7 5
7 1 4
6
4 6
9 10
7 4
1 2 3
4 5
6 7 8
9 10
11 12 13
9 10
11 12 13
arco de menor peso. Por esta razón el arco 4:5 de peso 2 prevalece sobre el arco
1 8 2 6 3
4 2 5
3 5 5
6 7 7 4 8
9 10
11 12 13
1 2 6 3
2 4 2 5
3 5 5
6 7 4 8
1 9 10
11 12 13
Ahora podemos escoge el vértice 11 y seguir el procedimiento descrito. Al final del
1 2 3
2 4 2 5 5
3 7
6 1 8
1 9 3 10 1
11 2 12 3 13
El orden en el cual se escogieron los vértices para llegar a este resultado es:
2,4,5,6,11,1,12,13,8,9,7,10,3
mínimo kilometraje que se puede obtener para unir todas las ciudades. Se invita
el resultado final:
1 2 3
2 4 2 5 5
6 7 8
4 1
1 3 1
9 10
11 2 12 2 13
12,11,6,1,4,2,5,13,8,9,7,10,3
3. un arreglo de padres.
5. la variable suma.
El arreglo padre ( ), almacena los padres de los vértices que se van escogiendo en la
medida ñeque avanza el proceso. El arreglo marcas ( ) mantiene el estado de marcado (1) o
no marcado (0) para cada vértice. La variable suma, almacena la suma de los arcos que
finalmente fueron para cumplir el objetivo del trabajo. Veamos la matriz de adyacencia
1 2 3 4 5 6 7 8 9 10 11 12 13
1 * 8 * * * 2 * * * * * * *
2 8 * 6 1 7 * * * * * * * *
3 * 6 * * * * * 5 * * * * *
4 * 1 * * 2 3 8 * 7 * * * *
5 * 7 * 2 * * 5 5 * 4 * * *
6 2 * * 3 * * * * 4 * 1 * *
7 * * * 8 5 * * * 1 6 * * *
8 * * 5 * 5 * * * * 6 * * 1
9 * * * 7 * 4 1 * * 3 * 7 *
10 * * * * 4 * 6 6 3 * * 4 *
11 * * * * * 1 * * * * * 2 *
12 * * * * * * * * 7 4 2 * 3
13 * * * * * * * 1 * * * 3 *
Donde exista un carácter *, significa que entre estos dos vértices no existe arco y
estará almacenado el numero 32767, es decir el mayor valor entero. Para cumplir
es el número de vértices.
1. Barranquilla
2. Medellín
3. Cúcuta
4. Bucaramanga
5. Tunja
6. bogota
7. Cali
8. Popayán
9. pasto
10. Neiva
11. Leticia
1 2 3 4 5 6 7 8 9 10 11
1 84 85 141 175
2 84 32 25 35
3 85
4 32
5 12 36 122
6 141 25 12 47 110
7 35
8 47 28
9 175 28
10 36
11 122 110
1. Siguiendo el método descrito, calcule el mínimo número de kilómetros de
carretera que se debe construir para unir todas las ciudades de Colombia
3. la función PRIM ( ). Calcula la suma mínima del conjunto de los arcos que
se deben incluir para cubrir todos los vértices del grafo, de manera que el
máxima del conjunto de arcos que se deben incluir para cubrir todos los
conectado
Mínimo ( )
Padres ( )
Marcas ( )
No se debe olvidar que hacia los vértices que ya están marcados no se pueden
extender arcos. Siguiendo el procedimiento descrito y escogiendo los vértices en
el siguiente orden:
4,8,5,9,6,7,11,10
El árbol expandido final es:
1(0)
2 4
2(2) 3(4)
3 5 6 4 1
4(5)
5(7) 6(8) 7(8) 8(5)
2
9(7) 2 10(9)
1
11(8)
Se puede asegurar que la distancia mínima entre el vértice 1 y todos los demás
es la indicada en la cifra entre paréntesis. Se recomienda al lector, utilizar este
procedimiento para averiguar la distancia mínima entre Bogota y las ciudades de
Colombia. El algoritmo DIJKSTRA ( ), fundamentalmente es el mismo que el
algoritmo PRIM ( ), con una única diferencia. El vértice escogido, es el que tenga
la mínima distancia acumulada desde el origen hasta dicho vértice. Para el
desarrollo del algoritmo, utilizaremos las siguientes variables:
1. la matriz de adyacencia
2. un arreglo de distancia mínimas
3. un arreglo de padres
4. un arreglo de vértices marcados
El arreglo mínimo ( ), se inicializa con la fila 1 de la matriz de adyacencia.
ORDEN TOPOLÓGICO EN UN DÍGRAFO
El orden topológico en un dígrafo, lo podemos ilustrar a través de un ejemplo.
Supongamos que el decano de la carrera de la ingeniería de sistemas solicita un
orden específico para que un estudiante pueda desarrollar su carrera. La única
información que tenemos para resolver el problema es el siguiente programa de
estudios
CODIGO NOMBRE PRE REQUISITO
1. Matemáticas I
2. Ingles I
3. El robot de Karen
4. Computadores
5. Matemáticas II 1
6. Ingles II 2
7. Turbo Pascal 3,4
8. Matemáticas III 5
9. Ingles III 6
10. Estructuras de datos I 1 ,7
11. Lenguaje C 9, 10
12. Assembler 9
13. Estructura de Datos II 8,10
Para efectos prácticos, solamente dejamos el programa de estudios hasta este
nivel. El problema lo podemos resolver fácilmente utilizando un dígrafo. El
programa anterior, lo podemos resolver fácilmente en un dígrafo, utilizando
solamente los códigos de las materias así
2 9
6 1
2
1
3 0
7 1
1
1
5 3
1 8
1 5, 10 1
2 6 2
3 7 3
4 7 4
5 8 5
6 9 6
7 10 7
8 13 8
9 11, 12 9
10 11, 13 10
11 11
LEY DE 12 ADYACENCIA LISTA
12
DE ADYACENCIA 13 INVERTIDA
13
GRAFOS
Los grafos son estructuras de daros, utilizados comúnmente en el manejo de
redes, en la construcción de circuitos electrónicos, en la estrategia de ventas, en
el área de economía, cartografía y otras muchas áreas del conocimiento. En este
capitulo, nos proponemos estudiar la teoría relacionada con los grafos y en el.
Capitulo 11 mostraremos a través de varios ejemplos su aplicación practica.
GRAFO
Un grafo es una estructura de datos compuesta por vértices y arcos.
Gráficamente un grafo se puede ver así:
INCIDENCIA
Los arcos inciden en los vértices. Un arco es incidente en un vértice, si una de sus
Por ejemplo:
A a B
ejemplo:
B a C
de B, nunca llega a B.
A B
E
F G
C D H I
A B
C D
Desde cualquier vértice se puede llegar a todos los demás. De la misma manera.
Por ejemplo:
Desde los vértices A, C, D y E podemos llegar a todos los demás vértices. Desde
el vértice B no podemos lagar a ningún vértice. El dígrafo anterior no esta
fuertemente conectado.
GRAFOS Y DIGRAFOS DEBILMENTE CONECTADOS
Se dice que un grafo o un dígrafo es débilmente conectado, si por lo menos desde
propiedad.
CAMINO SIMPLE
podemos recorrer la estructura sin repetir ningún vértice ni ningún arco. Por
ejemplo:
A B
C D E
Partiendo del vértice C, podemos recorrer todo el grafo sin repetir ni vértices, no
arcos
GRAFO EULERIANO
los arcos llegando de nuevo al vértice origen. Par que el grafo sea Euleriano, se
pueden visitar los vértices cuantas veces sea necesario. Los arcos se pueden
A B G
C D E F
El grafo es euleriano, ya que podemos recorrer todos los arcos sin repetir
ACDEFGBEHDAHBA
Obsérvese que no se repiten arcos aunque se visitan varios vértices mas de una
vez. Para que el grafo sea Euleriano, es necesario poder llegar al vértice origen
nuevamente.
GRAFO HAMILTONIANO
los vértices sin repetir ninguno, y finalmente podemos llegar al vértice origen.
Para este caso, los arcos se pueden recorrer una o más veces.
ACDEFGBHA
GRADO DE UN VERTCIE
ejemplo:
El grado del vértice F es 4 y el grado del vértice C es 2. Veamos el siguiente
dígrafo
Para este caso, existen para cada vértice dos tipos de grado
Grado de entrada
Grado de salida
Para el caso, los grados de entrada y salida para cada vértice son.
A 2 0
B 2 0
C 1 3
D 0 3
E 2 1
GRAFOS REGULARES
Un grafo se dice que es regular, si todos los vértices tienen el mismo grado. Por
ejemplo: A B
C D
Todos los vértices tienen el mismo grado, por ello el grafo es regular.
ARCO CICLICO
A D
El arco que parte de A y llega al mismo vértice y el arco que parte de B y llega a
B.
MULTIGRAFO
Un multigrado, es una estructura donde dos vértices están unidos por mas de un
arco ejemplo:
GRAFOS SIMPLES
Un grafo es simple si no tiene arcos cíclicos y existe un solo arco entre dos
vértices.
GRAFO COMPLETOS
pleto:
COMPUTADOR.
computador.
Para almacenar este grafo en una lista de adyacencia, debemos trabajar con un
arreglo de listas. Cada una de estas listas almacena los adjuntos a un vértice
dado. Por ejemplo una lista tendrá almacenados todos los adjuntos al vértice E;
otra lista tendrá almacenados todos los adjuntos al vértice 1, etc. Veamos la lista
A B C
B A C D E G
C A B E F H
D B G
E
B C G H
F
C H
G B D E H I
H C E F G I
I G H
A B C D E F G H I
A 0 1 1 0 0 0 0 0 0
B 1 0 1 1 1 0 1 0 0
C 1 1 0 0 1 1 0 1 0
D 0 1 0 0 0 0 1 0 0
E 0 1 1 0 0 0 1 1 0
F 0 0 1 0 0 0 0 1 0
G 0 1 0 1 1 0 0 1 1
H 0 0 1 0 1 1 1 0 1
i 0 0 0 0 0 0 1 1 0
Obsérvese queso doblamos la matriz por la diagonal todos los unos de la parte
superior se encuentran con los unos de la parte inferior y todos los ceros de la
parte superior se encuentran con los ceros de la parte inferior. Cuando un grafo
cumple esta propiedad se dice que es un GRAFO SIMETRICO. El programa para
Para determinar cuando se debe usar una lista o una matriz de adyacencia, es
tiene muchos vértices y pocos arcos. Cuando se esta trabajando con un grafo
u otra estructura. A este respecto, podemos observar que la estructura enana lista
de adyacencia tiene V vértices y A arcos. Por esto para cubrir toda la estructura,
A B C
D E F
La lista de adyacencia y la matriz de adyacencia son:
A B C D E F
A B D
A 0 1 0 1 0 0
D C B 0 0 1 1 0 0
B
C 0 0 0 0 0 0
C D 0 0 0 0 1 0
E 1 1 0 0 0 0
D E F 0 0 1 0 0 0
MATRIZ DEADYACENCIA
E A B
F C
A E
B A E
C
B F
D
A B
E
D
F
y los vértices ‘E’ y ‘D’, después del proceso , el grafo debe quedar en la
memoria del computador así
D E
1 2 3 4 5 6 7 8 9 10
1 0 1 0 1 1 0 0 0 1 0
2 1 0 1 0 0 1 0 0 0 0
3 0 1 0 0 0 0 1 1 0 0
4 1 0 0 0 0 0 0 0 0 0
5 1 0 0 0 0 1 0 0 0 0
6 0 1 0 0 1 0 0 0 1 0
7 0 0 1 0 0 0 0 0 0 0
8 0 0 1 0 0 0 0 0 0 1
9 1 0 0 0 0 1 0 0 0 1
10 0 0 0 0 0 0 0 1 1 0
Si calculamos:
N = M2
Tenemos
1 2 3 4 5 6 7 8 9 10
1 4 0 1 0 0 3 0 0 0 1
2 0 3 0 1 2 0 1 1 2 0
3 1 0 3 0 0 1 0 0 0 1
4 0 1 0 1 1 0 0 0 1 0
5 0 2 0 1 2 0 0 0 2 0
6 3 0 1 0 0 3 0 0 0 1
7 0 1 0 0 0 0 1 1 0 0
8 0 1 0 0 0 0 1 2 1 0
9 0 2 0 1 2 0 0 1 3 0
10 1 0 1 0 0 1 0 0 0 2
Obsérvese este resultado. Comparando esta matriz con el grafo del ejemplo, nos
podemos dar cuenta de la validez del procedimiento. Por ejemplo, analizando el
número de caminos de longitud 2 para ir del vértice 1 al vértice 2, nos podemos
dar cuenta que la respuesta es 4:
1 2 1
1 4 1
1 5 1
1 9 1
De la misma manera para n=2, el numero de caminos para llegar del vértice 9 al
vértice 5 es 2
9 6 5
9 1 5
Para calcular el número de caminos de longitud 3 para llegar de un vértice a otro,
solamente es necesario efectuar la siguiente operación:
P=N*M
Partiendo del hecho de que en la matriz N esta M 2. O sea la secuencia de
instrucciones en el computador sería:
N = M* M
P = N *M
Después de efectuar esta operación, podemos ver la matriz de caminos para n=3.
veamos .
1 2 3 4 5 6 7 8 9 10
1 0 8 0 4 7 0 1 2 8 0
2 8 0 5 0 0 7 0 0 0 3
3 0 5 0 1 2 0 3 4 3 0
4 4 0 1 0 0 3 0 0 0 1
5 7 0 2 0 0 6 0 0 0 2
6 0 7 0 3 6 0 1 2 7 0
7 1 0 3 0 0 1 0 0 0 1
8 2 0 4 0 0 2 0 0 0 3
9 8 0 3 0 0 7 0 0 0 4
10 0 3 0 1 2 0 1 3 4 0
Ahora comparando esta matriz con el grafo original, nos damos cuenta de la
validez de los datos. Tomemos algunos ejemplos. El número de caminos de
longitud 3 para llegar de 8 a 10 es 3 :
8 10 9 10
8 10 8 10
8 3 8 10
El número de caminos de longitud 3 para llegar de 1 a 8 es 2
1 2 3 8
1 9 10 8
EJERCICIOS
1. Tomando el siguiente dígrafo
1 2 3 4 5 6
1 2 4 2 6 4 2
2 0 2 0 2 2 0
3 2 6 2 4 6 2
4 0 2 0 2 2 0
5 0 2 0 2 2 0
6 2 6 2 4 2 2
Interpretando estos resultados podemos decir por ejemplo que para llagar del
vértice 5 al vértice 4 existen 2 caminos.
Como esta matriz almacena la suma S la Longitud de los caminos no se puede
considerar en este calculo.
La entrada S (4) (5) indica por lo tanto que entre el vértice 4 y el vértice 5 existe
camino ya que esa entrada es diferente de cero.
La entrada S (5)(3) como es cero, nos esta indicando que no existe un camino
entre el vértice 5 y el vértice 3.
Esta ultima observación, nos permite afirmar que el dígrafo no esta fuertemente
conectado.
Por lo tanto, podemos concluir que un dígrafo esta fuertemente conectado si
todas las entradas de la matriz S son diferentes de 0.
Para el siguiente dígrafo:
La matriz S, da como resultado
1 2 3 4 5 6
1 8 5 3 8 5 3
2 4 8 1 4 3 4
3 4 8 4 4 8 4
4 4 3 1 4 3 1
5 4 8 4 4 8 4
6 4 8 2 4 2 4
1 2 3 4 5 6 7 8 9
1 20 13 32 25 40 0 0 0 0
2 20 12 25 21 36 0 0 0 0
3 13 12 20 20 25 0 0 0 0
4 12 8 13 12 20 0 0 0 0
5 0 0 0 0 0 0 0 0 0
6 8 4 12 9 16 0 0 0 0
7 43 30 53 60 75 18 7 11 15
8 69 43 77 88 115 30 15 19 26
9 60 39 78 82 105 23 11 15 18
KKKKKKKKKKKKKKKKK
ÁRBOLES BINARIOS
En la vida cotidiana, muchas vedes sin saberlo, trabajamos en ocasiones con los
árboles. Por ejemplo: árboles genealógicos, organigramas, directorios en los
discos de un computador, etc. Cada uno de estos conceptos representa un árbol.
3.1.DEFINICIONES
La raíz de este árbol es A y el árbol izquierdo esta conformado por otro árbol.
Que a su vez tiene como raíz B. el árbol derecho esta conformado también por
otro árbol.
DEFINICIONES
NODO
Un árbol binario es un conjunto de elementos cada uno de los cuales se
denomina nodo. Un árbol binario puede tener cero nodos y en este se dice que
esta vació. Puede tener un solo nodo, y en este caso existe solamente la raíz del
árbol o puede tener un número finito de nodos. Cada nodo que esta ramificado
por la izquierda o por la derecha o puede no tener ninguna ramificación. La
anatomía de un nodo en un árbol binario es la siguiente:
Cuya raíz es el nodo con información D. Este nodo es la raíz del árbol de la
derecha. El Árbol de la izquierda
HIJO
Nos referimos al ejemplo anterior. En el caso 1 el nodo A no tiene hijos. En el caso
2, B es un hijo del nodo A y en el caso 3, D es hijo de B y el padre de B es el nodo
A
HERMANO
Nos referimos al caso 3 del ejemplo anterior. Los hermanos son los hijos de un
mismo padre. Los nodos B y C son hermanos. El nodo D no tiene hermanos
HOJA
Una hoja es un nodo que no tiene ramificaciones. Por ejemplo
El nodo C es una hoja mientras que el nodo B no se puede considerar como hoja
porque tiene una ramificación por la derecha. El nodo D también es una hoja
NODO NO TERMINAL
Un nodo no Terminal es aquel que posee por lo menos una ramificación. En el
ejemplo anterior, el nodo A o el B son nodos no terminales, mientras el nodo D o
el nodo C son nodos terminales.
CAMINO
Un árbol siempre se examina hacia abajo. Por ejemplo:
B
G
C D
F
E
A M
B E N O
C D F P
G S
NIVEL 0 T
NIVEL 1 W
NIVEL 2
NIVEL 3
Los nodos A, M y S tienen un nivel 0 en tanto que los nodos G y V tienen un nivel
3. Obsérvese que le nivel del nodo G es la longitud del camino desde la raíz hasta
el nodo.
GRADO DE UN NODO
El grado de un nodo es el número de hijos. Por ejemplo el grado del nodo A es 2,
el grado del nodo T es 1. El grado de un nodo Terminal siempre es 0.en los
árboles binarios, el grado de un nodo fluctúa entre 0 y 2. Existen otros tipos de
árboles, (árbol n_ario), en los cuales esta restricción no existe. Estos arboles
serán estudiados en el segundo tomo de este libro
ALTURA
La altura de un árbol binario es el nivel de la hoja o de las hojas que están más
distantes de la raíz. Basándonos en el ejemplo anterior, la altura del árbol cuya
raíz es A, corresponde a la longitud del camino para llegar a la hoja más distante
de la raíz. En este caso será 3. La altura cuya raíz es M, corresponde al nivel de
la hoja P.
ARBOL BINARIO COMPLETO
Un árbol binario completo es aquel en el que todo nodo no Terminal tiene sus dos
hijos. El siguiente es un árbol binario de nivel 3:
NIVEL 0
A NIVEL 1
NIVEL 2
NIVEL 3
B
I
C
E J
M
D F G H
K L N O
Obsérvese que todos los nodos no terminales tienen sus dos hijos. El máximo
número de nodos que puede tener un árbol de nivel n es:
20 + 21 + 22 + 23….+ 2n
Si n es 3 entonces
20 + 21 + 22 + 23 =15
Este árbol es un árbol binario completo de nivel 3 y este es el máximo número de
nodos que puede tener un árbol de nivel 3.
ARBOL BINARIO IGUAL
Dos árboles son iguales si los dos son vacíos. Existe otro caso ene. Cual dos
árboles son iguales:
A A
B C B C
D D
Estos árboles son iguales porque sus raíces son iguales y también lo son su
respectivo árbol izquierdo y derecho. Para que un árbol sea igual a otro, es
necesario que el contenido de cada uno de sus respectivos nodos sea el mismo y
que legan las mismas relaciones de parentesco. Por ejemplo los siguientes
árboles
A A B
B C B E A F
D D D
A B C
C
B C A B A
A
A
A
B C
B C
G
F E F
D E
H
D
PESO
El peso de un árbol en un nodo dado es el número de nodos en el árbol sin
contarse el mismo. Por ejemplo:
A P
B C Q
R
D E S T U V
El peso del árbol cuya raíz es A corresponde al número de nodos de ese árbol: los
nodos Q,C y R tienen un peso de 2
FORMAS DE RECORRER UN ARBOL BINARIO
Universalmente existen 3 formas de recorrer un árbol binario:
Preorden
Inorden
Posorden
Si logramos construir un árbol como este:
Podemos extraer sus datos de 3 maneras. Veamos cada una. Recorrer un árbol
en preorden consiste en:
Examinar el ato del nodo raíz
Recorrer el árbol izquierdo en preorden
Recorrer el árbol derecho en preorden
Si deseamos recorrer todo el árbol, evidentemente debemos comenzar por el
nodo raíz. Este método exige examinar primero el nodo raíz debemos entender
como examinar un nodo, el hecho de efectuar sobre su información cualquier
acción: por ejemplo escribirla, efectuar alguna operación matemática sobre ella o
con ella, modificarla. También en la gran mayoría de los textos de estructuras de
información, se utiliza el termino visitar un nodo. Entre la palabra examinar y la
palabra visitar existe una diferencia. Examinar un nodo es revisar su contenido y
eventualmente modificarlo en tanto que visitar un nodo es utilizar la dirección de
ese nodo con el propósito de seguir explorando el árbol hacia abajo. Si deseamos
recorrer un árbol en preorden, con el propósito de escribir su contenido, debemos
examinar el contenido de cada uno se sus nodos, mientras si deseamos contar
sus nodos, es necesario visitar cada nodo.
Supongamos que deseamos escribir un árbol en preorden. Para hacerlo, se debe
examinar el nodo raíz y luego recorrer el árbol de la izquierda en preorden.
E
D
ARBOL A LA IZQUIERDA DE A
Recorrer este árbol en preorden es examinar su nodo raíz y recorrer de nuevo el
árbol de la izquierda preorden.
D
ARBOL A LA IZQUIERDA DE B
Recorrer este árbol en preorden es examinar su nodo raíz. Como ya no existen
nodos por la izquierda, debemos empezar a recorrer el árbol D por la derecha.
Como ya no existen nodos por la derecha, debemos recorrer el árbol.
E
D
Por la derecha. El árbol de la derecha lo debemos recorrer también en preorden.
E
ARBOL A LA DERECHA DE B
Recorrer este árbol en preorden, es examinar su nodo raíz y recorrer el árbol por
la izquierda en preorden y luego recorrerlo por la derecha. Como no existen
árboles ni por la izquierda ni por la derecha, debemos recorrer el árbol.
F G
En preorden. El orden en el cual debemos examinar estos nodos es: primero el
nodo C, luego F y luego G. por lo tanto al imprimir el árbol anterior en preorden,
los resultados deben ser:
A B D E C F G
Antes de seguir adelante, el lector debe certificar que el árbol:
1
0
5 1
5
3 1
7 4 1
7
B C
Si queremos imprimir este árbol en inorden, debemos primero recorrer el árbol
izquierdo en inorden:
Al tratar de recorrer este árbol en inorden y no existe árbol por su izquierda
debemos examinar el nodo y luego recorrer el árbol de su derecha. Al no existir
árbol por su derecha, entonces el árbol a la izquierda del nodo A ha sido
totalmente recorrido. Siguiendo con las normas establecidas inicialmente,
debemos examinar el nodo A y luego recorrer el árbol a la derecha del nodo A
C
ARBOL DERECHO DE A
Para recorrer este árbol en inorden primero debemos recorrer el árbol izquierdo.
Al no existir árbol izquierdo, se debe examinar este nodo y luego recorrer el árbol
derecho. Al no existir árbol derecho, el árbol ya ha sido recorrido en su totalidad.
Por lo tanto los datos impresos serán:
B A C
Observemos este otro ejemplo
1
0
5
1
2
3 7 1 1
Debemos recorrer en inorden el árbol a la izquierda
1 de la5raíz:
3 7
Al recorrer este árbol en inorden ya sabemos, de acuerdo a la explicación del
ejemplo anterior, que los resultados son:
3 5 7
Al terminar de recorrer el árbol a la izquierda de la raíz, debemos examinar la raíz
y luego recorrer en inorden el árbol a la derecha de la raíz
1
2
1 1
1 5
Sabemos que al recorrer este árbol en inorden, los resultados son:
11 12 15
Con lo cual al examinar todo el árbol en inorden, los datos impresos serán:
3 5 7 10 11 12 15
Se invita al lector a certificar que al recorrer el siguiente árbol binario en inorden
los resultados son:
H D I B E A J F C K G L
Veamos el árbol
B C
D E F G
I J L
H K
Examinar la raíz.
Veamos un ejemplo:
A
B C
posorden, el único dato impreso será C. una vez recorridos los árboles izquierdo y
derecho, debemos examinar la raíz. Según esto los datos impresos serán.
B C A
Ejercicios
5. Elaborar un programa que cree en la memoria del computador el siguiente
árbol binario:
B C
D E
B C
D E
F G I J
Certificar que al recorrer el árbol, los siguientes resultados son correctos:
Preorden ABCDFGEIJ
Inorden BAFDGCIEJ
Posorden BFGDIJECA
B C
D
E
R
Q
U V
S T
W X Y
Z
Cuales serian los datos impresos si se recorre en:
Preorden
Inorden
Posorden
8
7
2
5
Luego al leer el número 23, como este dato es menor a 87, nos debemos
desplazar hacia abajo por la izquierda. Al llegar al 25, debemos crear un nuevo
nodo a la izquierda por el hecho de que 23 es menor que 25, así:
8
7
2
5
2
3
Al leer el siguiente dato este debe ser rechazado porque ya existe en el árbol. Al
leer el 48, debemos desplazarnos por la izquierda y al compararlo con 25, se
debe crear un nuevo nodo a la derecha del 25, así:
8
7
2
5
2 4
3 8
8
7
2
5
2 4
3 8
8
Por ultimo al leer el numero 92 este debe insertarse a la derecha del 87. Los
datos en el. Árbol quedan, finalmente, distribuidos así:
8
7
9
2 2
5
2 4
3 8
8 23 25 48 87 92
IMPRESIÓN DE UN ARBOL EN INORDEN
Observemos el siguiente árbol:
Raíz
1
0
5
1
5
3 7 2
0
Al escribir este árbol en inorden los resultados serán:
3 5 6 7 8 10 15 20
Observando el proceso, lo primero que se escribe siempre es el contenido del
nodo de la extrema izquierda del árbol. Luego debemos escribir el contenido del
nodo padre para luego escribir en inorden el árbol de la derecha.
R 10
0
A 5
0 15 G
0
B 3 I
0 6 E 12
0 0 16
H 0
1 D 4 6 F J
0 0 5 18
0
La función que vamos a elaborar debe escribir:
100 50 30 10 40 60 65 150 120 160 180
Esta nueva función se diferencia de a función inorden ( ), en que en aquella
primero se recorría el árbol izquierdo y luego si se escribía el contenido del padre
de ese árbol. En esta nueva rutina primero se debe escribir el contenido del padre
del árbol y luego se recorrer en preorden la rama izquierda.
El siguiente paso consiste en retirar de la pila la dirección C y determinar si existe
un árbol por la derecha del nodo indicado por C. siguiendo el comportamiento de
la pila, podemos por esto, deducir que esta función es muy parecida a la función
inorden ( ). La diferencia radica en que antes de analizar el árbol izquierdo, la
información del nodo ya ha sido escrita. Veamos el comportamiento del proceso:
50
2 R A
3 R A B
30
3 R A B C 10
3 R A B
-
2 R A
-
3 R A D 40
2 R A
-
2 R E 60
3 R E F 65
2 R E -
1 R -
1 G 150
2 G H 120
1 I -
1 J 180
0
-
1
0
5
3
0
3 7 2 4
0 0
La impresión en posorden es:
3 7 5 20 40 30 10
Antes de imprimir el nodo, debemos recorrer el árbol izquierdo y luego el derecho.
Es claro que primero debemos llegar hasta la hoja de la extrema izquierda del
árbol, guardando los apuntes en una pila para luego poder recuperar las
direcciones de todos los ancestros de esa hoja. Se llegamos a la hoja:
3
Antes de escribir el contenido del nodo debemos certificar que ya han sido
recorridos en posorden los árboles izquierdo y derecho.
1
0 3
0
5 1 2 4
5 5 0
B C
30 D E F G
5 E F G H
F G H
15
25 G H
40 H I
7 I
50 H
Pre G E A I B M C L D F K J H
In I A B E G L D C F M K H J
Si se recorre este árbol en Preorden, el primer nodo que visita es G y al recorrerlo
en inorden el nodo del extremo izquierdo es I. en este lugar podemos afirmar que
los nodos EAIB, forman el sub.-árbol izquierdo de G y los nodos MCLDFKJH el
sub.-árbol derecho q
Raíz p
G
1 MCLDFKJH G
LDCFMKHJ
Vamos a considerar la G del recuadro como un apuntador que esta en la pila que
nos indica la dirección del nodo padre de este sub.-árbol derecho. Ahora debemos
seguir trabajando con el sub.-árbol izquierdo.
EAIB
IABE
De la misma forma, el nodo raíz de este nuevo árbol es E. este nodo debe
conectarse al nodo G así
E
Q
El apuntador que siempre debe estar dirigido al nodo al cual se conectara el
nuevo nodo posteriormente. Siempre el nuevo nodo será indicado por el
apuntador p. con lo anterior el árbol estará organizado así:
E MCLDFKJH
LDCFMKHJ
AIB
IAB
E MCLDFKJH
LDCFMKHJ
I B
I B
1 MCLDFKJH G B A
LDCFMKHJ B
Siguiendo por la izquierda, ahora podemos conectar el nodo I, quedando el árbol
así:
G
E MCLDFKJH
LDCFMKHJ
I B
B
En este lugar debemos efectuar un retiro de la pila y conectar el nuevo nodo por
la dercha del nodo indicado por el apuntador que estaba almacenando en el
primer elemento de la pila.
Con esto, el arbol queda así:
G
E MCLDFKJH
LDCFMKHJ
I B
E M
CLDF KJH
I A B LDCF KHJ
La nueva información de la pila será.
1 KJH M
KHJ
E M
A KJH
C KHJ
LD F
I B LD F
1 KJH M F C
KHJ F
E M
D F KJH
I A B L DC F KHJ
Y la pila almacenara la siguiente información:
1 KJH M F C D L
KHJ F D
Obsérvese que siempre que se identifique un sub-árbol derecho, la pila debe ser
nodo por la derecha, podemos hacer adecuadamente la inserción del nuevo nodo.
D L
D
Esto quiere decir que el nodo D se debe conectar a la derecha del nodo L, así:
E M
A KJH
C KHJ
F
I B L D F
De la misma manera, el nodo F debe conectarse a la derecha del nodo C.
este momento:
G
E M
A
C K
L F JH
I B HJ
D
Y la pila contendrá la siguiente información
1 JH L
HJ
E M
I A B L DC F HK J
Al observar el proceso, vemos que la pila queda vacía y falta adicionar al árbol el
nodo H. con esto podemos afirmar que el proceso se debe efectuar mientras la
pila no este vacía o exista información para distribuir por la rama izquierda. Por lo
tanto el árbol final será:
G
E M
A
C K
L F J
I B
D H
Existe un buen número de formas para construir una función que efectué el
proceso anterior. A continuación presentamos una de estas versiones codificada
en lenguaje C.
NOTACIONES INFIJO, POSFIJO Y PREFIJO
Cuando se nos pregunta, por ejemplo, cuanto es el resultado de 5 multiplicado por
8 más 3, la respuesta automática que se da es 43. No se da el caso de que la
respuesta dad sea 55. Ahora si pregunta es: cual es la respuesta de 3 mas 5
multiplicado por 8, también volveremos a dar la misma respuesta: 43. No se nos
ocurre sumas 3 y 5 luego multiplicar la respuesta por 8 para que nos de 64. Se
nos pregunta cual es la respuesta de 5 por 2 mas 8 por 3, la respuesta dada es
34. Nos hemos acostumbrado a través del tiempo a que el operador * tiene mas
prioridad que el operador + y así lo trabaja cerebro. La notación con la cual
trabajamos los humanos este tipo de expresiones se denomina infijo, donde la
presencia de los operadores es:
* /
- +
=
Los humanos trabajamos con notación infijo. De la misma manera los
computadores están diseñados para que reconozcan la misma prioridad que
reconocemos los humanos. La instrucción:
Resol = 5 * 2 + 8 * 3;
Deja almacenada, por ello, la cifra 34, ya que la asociación automática es:
(result: (5 * 2)+(8 * 3));
Si deseamos que un computador, o un ser humano, calcule:
Resul= 5 * 2 + 8 * 3;
Pero sumando 2 y 8 primero, debemos diseñar la instrucción así:
Result= 5 * (2 + 8) * 3:
Se utilizan los paréntesis para modificar la prioridad de los operadores.
Un programador al indicarle esta instrucción a un computador:
Resul= 5 * 2 + 8 * 3;
Espera la respuesta 34 pero no le interesa como lo hizo la maquina.
Internamente, esta operación la ejecuta utilizando una pila. La operación la
ejecuta reconociendo objeto a objeto. Vamos a ilustrar la transformación que debe
hacer la maquina con el propósito de efectuar la operación anterior. De lo único
que esta enterada tanto la maquina como el programador, es que el operador *
tiene mas prioridad que el operador +. La transformación que se realiza es
convertir la expresión de notación infijo a notación posfijo lo cual se estudiará en
el siguiente numeral. A continuación estudiaremos que es la notación posfijo.
La notación posfijo, es otra manera de escribir una expresión aritmética. La
notación posfijo, se caracteriza por la ausencia de paréntesis. Esta notación,
aunque nunca utiliza paréntesis, es presentada sin ningún tipo de ambigüedad.
Veamos su naturaleza. Si tenemos una expresión en notación infijo. Por ejemplo:
a +b
Para escribir esa misma expresión en posfijo. Se debe ejecutar los siguientes
pasos:
3. agrupar utilizando paréntesis, de acuerdo a la prioridad de los operadores,
así:
(a+b)
4. escribir en posfijo la expresión, así:
ab+
Obsérvese que en la notación posfijo, el operador se escribe después de los
operadores . Veamos otro ejemplo:
a+b*c
Agrupando tenemos:
a+(b*c)
Convirtiendo a posfijo la expresión entre paréntesis resulta:
a+(bc*)
Ahora tratando la expresión entre paréntesis como un operador tenemos
a ( b c * )+
y destruyendo los paréntesis, nos queda la expresión escrita en posfijo:
abc*+
Veamos este ejemplo;
(x*y)+(v*w)
Primero debemos convertir las expresiones encerradas entre paréntesis a
notación posfijo, así:
(xy*)+(vw*)
Y luego toda la expresión a notación posfijo, así
xy*vw*+
a b
A *
B C
* *
/ C F
A B D E
Existe un método sencillo para construir una árbol que representa un a expresión.
El primer paso consiste en transformar la expresión de infijo a prefijo y partiendo
de la expresión escrita en prefijo construir el árbol. Veamos algunos ejemplos:
Infijo a+b
Prefijo +ab
Al tener la expresión en prefijo, fácilmente se puede construir el árbol siguiendo
este método:
Se insertan nuevos nodos por la izquierda del árbol que hayamos insertado un
operando
A
+a
A B +ab
Si el nodo insertado fue un operador, insertamos el siguiendo a su izquierda. Si el
nodo insertado fue un operando, volvemos hacia atrás e insertamos el siguiente
nodo a la derecha. Este proceso se continúa hasta que se agote la expresión
escrita en prefijo. Veamos otro ejemplo:
Infijo a+(a*c d)
Primero debemos convertir la expresión a prefijo:
+a*b cd
Luego debemos insertar nuevos nodos hasta encontrar un operando:
A +a
A *
+a*
A *
B
+a*b
Como el nodo mas reciente insertado fue un operando, volvemos hacia atrás e
insertamos el siguiente a la derecha.
A * +a*b
A *
B +a*b c
Como el nodo más reciente insertado fue un operando, volvemos hacia atrás e
insertamos el siguiente a la derecha:
A *
B
+a*b cd
C D
Siguiendo este método, y antes de seguir adelante, se recomienda al lector
revisar los árboles para las siguientes expresiones en prefijo:
+ D
A *
B C
+ D E F
A *
B C
CONVERSION DE UNA EXPRESION EN UN ARBOL BINARIO A SU
REPRESENTACION INFIJO
En este numeral se desarrollara una función que a partir de un árbol binario,
genere un arreglo que almacene la expresión en infijo. Antes de entrar
propiamente en el desarrollo del problema, estudiaremos algunas propiedades de
estos árboles. Supongamos que tenemos en la memoria del computador un árbol
así:
A *
B C
/ E
+ C
A B
B
Al recorrerlo en preorden, los datos generados serán:
+/ +abcde
Al recorrerlo en posorden, los datos generados serán:
ab+c d/e+
Las dos propiedades anteriores se cumplen. Se recorremos el árbol en inorden
los datos generados serán:
a+b c/d+ e
Pero esta expresión, para su evaluación, se asocia así:
a+((b c)/ d)+e
Y es bien diferente da la inicial, la cual era:
(a+b) c/d+e
Lo cual nos permite plantear la siguiente propiedad:
Si se recorre un árbol en inorden, los datos generados no representan la
expresión escrita en infijo.
Si queremos que de un árbol se genere la correspondiente expresión en infijo no
basta con recorrerlo en inorden, además debemos efectuar un proceso que
parentice la expresión. Para el ejemplo, el recorrido inorden del árbol es:
a+b c/d+e
Como el operador tiene más prioridad que los demás, y el operador / tiene más
prioridad que el +, al tratar de evaluar la expresión esta se asocia así:
a+((b c)/d)+e
Debemos diseñar un proceso que genere un arreglo infijo con los siguientes
datos:
( A + B ) C / D + E
/ E
+ C
A
Como el operador B aplica a los dos subárboles, gráficamente el árbol
de la raíz
B
anterior lo podemos representar así: +
/ E
D
A + B C
2
+ C
A B
B
Si recorremos el árbol en inorden, los resultados serán:
a+b c
Lo cual es diferente a la expresión que esta representada en el árbol.
(a+ b ) c
Si el árbol es:
A B
B
Al recorrerlo en inorden los resultados son:
a b+c
y no existe la necesidad de insertar paréntesis en la expresión. La diferencia, en
este caso particular, radica en que si el operador padre tiene más jerarquía que el
operador hijo, debemos patentizar la rama izquierda o derecha del árbol.
Observemos los siguientes árboles:
+
+ C C
A B A B
B - B
- C
A B
B
Para el árbol A la expresión será:
(a+b) c B
B
Para el árbol la expresión será:
a b+c
no se necesitan paréntesis. El operador + tiene menos jerarquía que el operador
-
C
A B
B
*
+ /
+ C
A -
B C B C
Al recorrer el árbol en inorden, el resultado será:
a+b-c d+e*f
Debemos insertar paréntesis a la expresión a+b-c y también a la expresión d+e*f.
al final arreglo infijo quedara así:
(a+b–c) ((d + e ) * f )
Como puede identificarse esta situación. Obsérvese que si existen dos nodos
cuya relación es padre-hijo y los dos contienen operadores, debemos abrir un
paréntesis si el operador hijo tiene menos prioridad que el operador padre. Este
paréntesis que se abre debe existir siempre y cuando el padre tenga más
jerarquía que el hijo y asea izquierdo o derecho. Para insertar un paréntesis son
necesarias tres condiciones:
4. que el nodo contenga un operador.
5. que su hijo (izquierdo o derecho) contenga también un operador.
6. que el nodo padre sea un operador de mayor jerarquía que el nodo hijo.
Si estas tres condiciones se cumplen debemos abrir un paréntesis. Este
paréntesis, guardaremos en algún lugar el paréntesis que cierra para que en su
momento, se incorpore al arreglo infijo. Para la solución a este problema debe
servirnos una pila ya que el proceso se asimila a escribir un árbol en inorden, con
la salvedad de que bajo las tres condiciones expuestas anteriormente, debemos
insertar un paréntesis a la pila.
1 7
4 5
3 2 5
8
7 5
7 1 4
6
4 6
9 10
7 4
1 2 3
4 5
6 7 8
9 10
11 12 13
9 10
11 12 13
11 12 13
arco de menor peso. Por esta razón el arco 4:5 de peso 2 prevalece sobre el arco
1 8 2 6 3
4 2 5
3 5 5
6 7 7 4 8
9 10
11 12 13
1 2 6 3
2 4 2 5
3 5 5
6 7 4 8
1 9 10
11 12 13
1 2 3
2 4 2 5 5
3 7
6 1 8
1 9 3 10 1
11 2 12 3 13
El orden en el cual se escogieron los vértices para llegar a este resultado es:
2,4,5,6,11,1,12,13,8,9,7,10,3
La suma es 28 y esta cifra es la mínima que se puede conseguir. Si el sistema
mínimo kilometraje que se puede obtener para unir todas las ciudades. Se invita
el resultado final:
1 2 3
2 4 2 5 5
6 7 8
4 1
1 3 1
9 10
11 2 12 2 13
12,11,6,1,4,2,5,13,8,9,7,10,3
8. un arreglo de padres.
El arreglo padre ( ), almacena los padres de los vértices que se van escogiendo en la
medida ñeque avanza el proceso. El arreglo marcas ( ) mantiene el estado de marcado (1) o
no marcado (0) para cada vértice. La variable suma, almacena la suma de los arcos que
finalmente fueron para cumplir el objetivo del trabajo. Veamos la matriz de adyacencia
1 2 3 4 5 6 7 8 9 10 11 12 13
1 * 8 * * * 2 * * * * * * *
2 8 * 6 1 7 * * * * * * * *
3 * 6 * * * * * 5 * * * * *
4 * 1 * * 2 3 8 * 7 * * * *
5 * 7 * 2 * * 5 5 * 4 * * *
6 2 * * 3 * * * * 4 * 1 * *
7 * * * 8 5 * * * 1 6 * * *
8 * * 5 * 5 * * * * 6 * * 1
9 * * * 7 * 4 1 * * 3 * 7 *
10 * * * * 4 * 6 6 3 * * 4 *
11 * * * * * 1 * * * * * 2 *
12 * * * * * * * * 7 4 2 * 3
13 * * * * * * * 1 * * * 3 *
Donde exista un carácter *, significa que
el número de vértices.
12. Barranquilla
13. Medellín
14. Cúcuta
15. Bucaramanga
16. Tunja
17. bogota
18. Cali
19. Popayán
20. pasto
21. Neiva
22. Leticia
1 2 3 4 5 6 7 8 9 10 11
1 84 85 141 175
2 84 32 25 35
3 85
4 32
5 12 36 122
6 141 25 12 47 110
7 35
8 47 28
9 175 28
10 36
11 122 110
7. Siguiendo el método descrito, calcule el mínimo número de kilómetros de
carretera que se debe construir para unir todas las ciudades de Colombia
9. la función PRIM ( ). Calcula la suma mínima del conjunto de los arcos que
se deben incluir para cubrir todos los vértices del grafo, de manera que el
máxima del conjunto de arcos que se deben incluir para cubrir todos los
vértices del grafo de manera que l grafo resultante sea fuertemente
conectado
10. para el siguiente grafo, calcule los valores finales de los arreglos:
Mínimo ( )
Padres ( )
Marcas ( )
1(0)
2 4
2(2) 3(4)
3 5 6
4(5) 5(7) 6(8) 7 8
9 10
11
Obsérvese que el arco 2:3 no se extendió ya que la suma 3(4) es menor o igual
que la suma 2(6);4<=6. Únicamente se extiende el arco si esta relación es mayor.
Ahora escogemos el vértice 3 y extendemos los arcos desde dicho vértice,
quedando el árbol expandido así:
1(0)
2 4
2(2) 3(4)
3 5 6 4 1
4(5) 5(7) 6(8) 7(8) 8(5)
No se debe olvidar que hacia los vértices que ya están marcados no se pueden
extender arcos. Siguiendo el procedimiento descrito y escogiendo los vértices en
el siguiente orden:
4,8,5,9,6,7,11,10
El árbol expandido final es:
1(0)
2 4
2(2) 3(4)
3 5 6 4 1
4(5)
5(7) 6(8) 7(8) 8(5)
2
9(7) 2 10(9)
1
11(8)
Se puede asegurar que la distancia mínima entre el vértice 1 y todos los demás
es la indicada en la cifra entre paréntesis. Se recomienda al lector, utilizar este
procedimiento para averiguar la distancia mínima entre Bogota y las ciudades de
Colombia. El algoritmo DIJKSTRA ( ), fundamentalmente es el mismo que el
algoritmo PRIM ( ), con una única diferencia. El vértice escogido, es el que tenga
la mínima distancia acumulada desde el origen hasta dicho vértice. Para el
desarrollo del algoritmo, utilizaremos las siguientes variables:
5. la matriz de adyacencia
6. un arreglo de distancia mínimas
7. un arreglo de padres
8. un arreglo de vértices marcados
El arreglo mínimo ( ), se inicializa con la fila 1 de la matriz de adyacencia.
ORDEN TOPOLÓGICO EN UN DÍGRAFO
El orden topológico en un dígrafo, lo podemos ilustrar a través de un ejemplo.
Supongamos que el decano de la carrera de la ingeniería de sistemas solicita un
orden específico para que un estudiante pueda desarrollar su carrera. La única
información que tenemos para resolver el problema es el siguiente programa de
estudios
CODIGO NOMBRE PRE REQUISITO
14. Matemáticas I
15. Ingles I
16. El robot de Karen
17. Computadores
18. Matemáticas II 1
19. Ingles II 2
20. Turbo Pascal 3,4
21. Matemáticas III 5
22. Ingles III 6
23. Estructuras de datos I 1 ,7
24. Lenguaje C 9, 10
25. Assembler 9
26. Estructura de Datos II 8,10
Para efectos prácticos, solamente dejamos el programa de estudios hasta este
nivel. El problema lo podemos resolver fácilmente utilizando un dígrafo. El
programa anterior, lo podemos resolver fácilmente en un dígrafo, utilizando
solamente los códigos de las materias así
2 9
6 1
2
1
3 0
7 1
1
1
5 3
1 8
El dígrafo anterior representa el programa académico. Por ejemplo la materia
Estructura de Datos II, no puede verse sin haber aprobado las materias Estructura
de Datos I y Matemáticas III. Existe un método denominado orden topológico, el
cual nos da el orden en el cual se debe desarrollar este programa académico para
ver las materias cumpliendo con los pre requisitos exigidos para cada asignatura.
Tomemos el dígrafo anterior y almacenémoslo en dos listas de adyacencia.
1 5, 10 1
2 6 2
3 7 3
4 7 4
5 8 5
6 9 6
7 10 7
8 13 8
9 11, 12 9
10 11, 13 10
11 11
LEY DE 12 ADYACENCIA LISTA
12
DE ADYACENCIA 13 INVERTIDA
13