Una Introduccion A Las Matemticas Discretas

  • Uploaded by: AZULITO
  • 0
  • 0
  • January 2021
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Una Introduccion A Las Matemticas Discretas as PDF for free.

More details

  • Words: 100,056
  • Pages: 319
Loading documents preview...
Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Ricardo Pérez Aguila Profesor Investigador Titular Universidad Tecnológica de la Mixteca (UTM)

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Dedicatorias Con todo amor a mi hija Diana, mi esposa Kenia y mi(s) hij@(s) que aún está(n) por llegar a este mundo. Con todo cariño a mi sobrina Lucy, mi mamá María de la Luz, mi hermana Edna y mi cuñada Fernanda A mis amigos Thelma García, Gabriel Gerónimo, Luis Javier Martínez, Omar Ramírez, Ricardo Ruiz, Aisa Santiago y Paola Soto

Pérez Aguila, Ricardo Una introducción a las matemáticas discretas y teoría de grafos -1º ed.- El Cid Editor, 2013. 320 p.; 170x240 cm.

ISBN 978-1-4492-9128-0

© Ricardo Pérez Aguila © El Cid Editor ISBN versión papel: 978-1-4492-9128-0 ISBN versión digital: 978-1-4492-9129-7

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Acerca del Autor Ricardo Pérez Aguila es originario de la ciudad de Tehuacán, Puebla, México. Es egresado de la Universidad de las Américas Puebla (UDLAP, Cholula, Puebla, México) donde obtuvo los Títulos de Ingeniero en Sistemas Computacionales (2001), Maestro en Ciencias con Especialidad en Ingeniería en Sistemas Computacionales (2003) y Doctor en Ciencias de la Computación (2006). Durante el periodo 2003-2007 se desempeñó como Profesor de Tiempo Parcial en el Departamento de Actuaría, Física y Matemáticas de la UDLAP. En Otoño de 2007 se incorporó de Tiempo Completo como Profesor-Investigador Titular del Instituto de Computación en la Universidad Tecnológica de la Mixteca (UTM, Huajuapan de León, Oaxaca, México). Como docente ha impartido en varias ocasiones los cursos de Matemáticas Discretas, Análisis de Algoritmos, Redes Neuronales Artificiales, Teoría de Autómatas, Algoritmos Genéticos, Visión por Computadora, entre otros. Sus intereses de investigación consideran la visualización, geometría, topología, representación y aplicaciones de los Politopos n-Dimensionales. En el campo de las Redes Neuronales Artificiales ha tenido particular interés en las arquitecturas basadas en entrenamiento no supervisado. Cuenta en su haber con más de 30 artículos publicados, internacionalmente y con arbitraje, en congresos y revistas. Es además autor de los libros de texto “Una Introducción a las Matemáticas para el Análisis y Diseño de Algoritmos” y “Una Introducción al Cómputo Neuronal Artificial”, ambos publicados por El Cid Editor (Argentina) en 2012.

Ricardo Pérez Aguila Instituto de Computación Universidad Tecnológica de la Mixteca (UTM) Carretera Huajuapan-Acatlima Km. 2.5 Huajuapan de León, Oaxaca 69004, México E-mails: [email protected], [email protected] Web site: http://ricardo.perez.aguila.googlepages.com

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

También del Autor

El objetivo principal de este texto es el de proporcionar las bases formales y fundamentales para que el alumno sea capaz de estudiar sus algoritmos y determinar si éstos son, desde un punto de vista de la Complejidad Temporal, eficientes o no. Este trabajo cuenta con cinco capítulos en donde se abordan tópicos como Preliminares Matemáticos (Logaritmos, Series, Sucesiones, Inducción Matemática, Teorema del Binomio), Notación Asintótica, Técnicas para el Análisis de Complejidad Temporal, Solución de Recurrencias (Método de Extensiones, Teorema Maestro), Teoría de Grafos, enfoques de diseño de algoritmos bajo Memoización, Bottom-Up y Voracidad. Finalmente, se presenta una introducción informal a las Clases de Problemas P y NP, Problemas NP-Completos y Reducción Polinomial. Las técnicas y conceptos son aplicados sobre los bien conocidos algoritmos de ordenamiento Insertion Sort, Quick Sort, Merge Sort, Counting Sort y Bucket Sort. También se estudia la Complejidad Temporal de algunos algoritmos que dan solución a problemas clásicos de Teoría de Grafos: Búsquedas por Profundidad y Amplitud, Algoritmos de Dijkstra, Bellman-Ford, Fleury y Kruskal. La forma de presentar los temas está dirigida a estudiantes que estén cursando el segundo año de las Licenciaturas en Computación, Sistemas Computacionales, Informática, Ciencias de la Computación y Matemáticas Aplicadas. Una Introducción a las Matemáticas para el Análisis y Diseño de Algoritmos Ricardo Pérez Aguila El Cid Editor, Argentina, 336 páginas, Primera Edición, 2012 ISBN Edición Impresa: 978-1-4135-7661-0, ISBN Edición Digital: 978-1-4135-7647-4 Registro SEP-INDAUTOR (México): 03-2011-111412410000-01 Web Site de Difusión y Distribución: http://www.e-libro.net/libros/libro.aspx?idlibro=6525

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

En este trabajo se presenta una introducción al estudio y análisis de las Redes Neuronales Artificiales. Se hace mención de las bases neurofisiológicas que inspiran a algunas de las Arquitecturas Neuronales más populares y se plantean de manera formal sus procedimientos correspondientes haciendo uso de herramientas provenientes de áreas como el Álgebra Lineal y el Cálculo Diferencial de Varias Variables. Se estudian inicialmente las neuronas de tipo Adaline y Perceptrón. En el caso del Perceptrón se presentan el Problema de Representación y el Teorema de Convergencia a fin de plantear los alcances y limitaciones que se tiene con este tipo de Neurona Artificial. Posteriormente se aborda el estudio de la Red Madaline a fin de establecer los retos que surgen para el aprendizaje en una red formada por varias neuronas. Se da un especial énfasis a las redes compuestas por Perceptrones al estudiar los fundamentos de su popular mecanismo de aprendizaje, definido por el Algoritmo de Retropropagación. También se presentarán a las Redes de Kohonen como un ejemplo de Arquitectura Neuronal cuyo aprendizaje no requiere de supervisión. A lo largo del texto se desarrollan aplicaciones de las Redes Neuronales en los contextos del Modelado y Predicción de Señales, Modelado de Funciones Booleanas y Clasificación Automática de Imágenes. Una Introducción al Cómputo Neuronal Artificial Ricardo Pérez Aguila El Cid Editor, Argentina, 324 páginas, Primera Edición, 2012 ISBN Edición Impresa: 978-1-4135-2424-6, ISBN Edición Digital: 978-1-4135-2434-5 Registro SEP-INDAUTOR (México): 03-2012-083011025000-01 Web Site de Difusión y Distribución: http://www.e-libro.net/libros/libro.aspx?idlibro=7894

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Prólogo Este libro está pensado principalmente para estudiantes de los primeros semestres de nivel Licenciatura en las carreras de Ciencias de la Computación, Informática, Sistemas Computacionales, Física y Matemáticas Aplicadas. Nuestro objetivo primordial se centra en presentar al alumno los preliminares que forman al área de las Matemáticas Discretas y la Teoría de Grafos. En particular, nos concentraremos en cinco temáticas principales: Lógica Matemática, Teoría de Conjuntos, Teoría de Relaciones y Funciones, Principio de Inducción Matemática y finalmente, Grafos. A lo largo del texto se efectuarán diversas pruebas de algunos Teoremas. Éstos estarán, por un lado, formalizando resultados dentro de nuestras áreas de interés, mientras que por otro lado, el estudiante se irá familiarizando con algunas técnicas de demostración. Además, dentro del área de Teoría de Grafos se presentarán diversos algoritmos teniendo siempre en cuenta su inmediata y fácil implementación. En este sentido, se asume que el lector está habilitado con un buen manejo de algún lenguaje de programación de alto nivel considerando estructuras de datos básicas tales como arreglos, matrices, pilas y colas. El texto se encuentra organizado en siete capítulos: •

Capítulo 1 - Lógica Matemática. Se introducen a los Conectivos Lógicos básicos: conjunción, disyunción, negación e implicación. Se presentan también a las Tablas de Verdad como una primer metodología de demostración de Teoremas relacionados con Equivalencia Lógica. A partir de los conectivos lógicos y sus propiedades se define un Álgebra Proposicional. También se analizan algunas reglas de Inferencia Lógica tales como el Modus Ponens y el Modus Tollens. Finalmente se aborda el estudio de los importantes y útiles Cuantificadores Existencial y Universal.



Capítulo 2 - Teoría de Conjuntos. A partir de los Conectivos Lógicos se definen a los operadores básicos de conjuntos. Se demostrarán algunos Teoremas relativos a propiedades de estos operadores en donde se hará evidente el uso intensivo del Álgebra Proposicional. A partir de estos Teoremas se definirá un Álgebra de Conjuntos la cual permitirá una verificación más directa de nuevos resultados.



Capítulo 3 - Relaciones y Funciones. El objetivo principal de este Capítulo es el de presentará de manera formal uno de los conceptos más importantes en las Matemáticas: la noción de Función. Inicialmente se establecerá el concepto de Relación Binaria entre los elementos de dos conjuntos. Se discutirán algunas caracterizaciones para las relaciones tales como Reflexividad, Simetría, Antisimetría y Transitividad. También se abordará el estudio de las importantes Relaciones de Equivalencia y el impacto que tienen al particionar a los elementos de un conjunto. Finalmente, el concepto de Función será establecido en términos de las características que debe cumplir una Relación para ser denotada como tal. Se estudiarán también, en el contexto de las Funciones, las nociones de Inyectividad, Suprayectividad, Composición Funcional, Función Inversa y Función Identidad.

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



Capítulo 4 - Series, Sucesiones e Inducción Matemática. Se estudian las nociones de Series y Sucesiones y se pone un especial énfasis en la poderosa metodología de demostración de Teoremas que resulta ser el Principio de Inducción Matemática. Se describen el tipo de enunciados plausibles de ser abordados por esta metodología y se presentan algunos ejemplos de aplicación. También se aborda al estudio del Teorema del Binomio y su relación con los Coeficientes Binomiales y el Triángulo de Pascal. El Capítulo se finaliza describiendo a detalle la demostración del Teorema del Binomio aplicando precisamente el Principio de Inducción Matemática.



Capítulo 5 - Grafos: Conceptos Básicos. Se establece desde un principio la noción formal de Grafo. Posteriormente se introducen nuevas definiciones que permitirán, para el conjunto de todos los posibles grafos, caracterizarlos como simples, conectados, dirigidos, completos, bipartitas, pesados, regulares, hipercúbicos, etc. También se probarán algunos Teoremas relativos a ciertas propiedades de conectividad en grafos. En particular se abordará la demostración, utilizando Inducción Matemática, del Teorema de Euler relativo a los Circuitos Eulerianos.



Capítulo 6 - Generación Automática de Grafos. Este Capítulo tiene por finalidad presentar una serie de Algoritmos que permitirán la construcción automática de algunos tipos de grafos. Se presentarán metodologías para la generación de grafos básicos como lo son los grafos simples y grafos dirigidos. Pero también se abordará la construcción de grafos Regulares, Hamiltonianos y Bipartitas. Se discutirán también a los Códigos de Prüfer y su relación con los grafos de tipo Árbol.



Capítulo 7 - Grafos: Algoritmos Básicos. En este punto se presentarán algunos algoritmos para la solución de ciertos problemas particulares sobre grafos. Se discutirán los procedimientos asociados a las Búsquedas por Profundidad y Amplitud, los Algoritmos de Dijkstra y de Bellman-Ford para la búsqueda de la ruta más corta, el Algoritmo de Kruskal para la determinación del árbol de expansión mínimo, y el Algoritmo de Fleury para la construcción de un Circuito Euleriano. También se presentarán procedimientos para encontrar el Conjunto Fundamental de Circuitos, los conjuntos de Puentes y Puntos de Corte, el Grafo Mínimo Equivalente, y los Componentes Fuertemente Conectados.

Al final de este trabajo el lector encontrará una Sección dedicada a presentar las referencias utilizadas. Éstas mismas son de hecho un punto de partida para abordar a mayor profundidad los temas aquí desarrollados. En particular se recomiendan los textos, ya clásicos, de Cormen et al, Grimaldi y Johnsonbaugh. El texto de Lau es una excelente y amplia librería de algoritmos listos para implementarse y que dan solución a diversos problemas en Teoría de Grafos. Finalmente, sólo me queda agradecer a mi hija Diana y a mi esposa Kenia por todo su amor, inspiración y apoyo para lograr la culminación de este proyecto. A mis amigos, siempre les estaré en deuda por todos sus ánimos. Ricardo Pérez Aguila Mayo de 2013

ii

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Índice General Índice de Teoremas Índice de Algoritmos 1. Lógica Matemática 1.1 Proposiciones y Conectivos Lógicos 1.2 Tablas de Verdad 1.3 Algebra de Proposiciones 1.4 Inferencia Lógica 1.5 Cuantificadores

2. Teoría de Conjuntos 2.1 Definiciones 2.2 Algebra de Conjuntos

3. Relaciones y Funciones 3.1 Definiciones 3.2 Relaciones de Equivalencia 3.3 Funciones

4. Sucesiones, Series e Inducción Matemática 4.1 Sucesiones 4.2 Series y Sumatorias 4.3 Principio de Inducción Matemática 4.4 Teorema del Binomio

5. Grafos: Conceptos Básicos 5.1 Definiciones 5.2 Rutas, Circuitos y Conectividad 5.3 Circuitos Eulerianos y Circuitos Hamiltonianos 5.4 Árboles 5.5 Girths y Diámetros

6. Generación Automática de Grafos 6.1 Representación Computacional de Grafos 6.2 Permutación Aleatoria de n Elementos 6.3 Generación de Grafos Aleatorios 6.4 Generación de Grafos Bipartitas Aleatorios 6.5 Generación de Grafos Regulares Aleatorios

Página v ix 1 3 6 23 40 49 61 63 84 91 93 108 113 129 131 133 135 141 149 151 160 169 173 175 177 179 180 182 190 197

iii

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

6.6 Generación de Árboles de Expansión Aleatorios 6.7 Generación de Árboles Etiquetados y Códigos de Prüfer 6.8 Generación de Grafos Hamiltonianos Aleatorios 6.9 Generación de Grafos Regulares Isomorfos Aleatorios

7. Grafos: Algoritmos Básicos 7.1 Búsqueda por Profundidad 7.2 Búsqueda por Amplitud 7.3 Árboles de Expansión Mínimos 7.3.1 Conjuntos Disjuntos 7.3.2 Conjuntos Disjuntos y el Algoritmo de Kruskal 7.4 Determinación de Rutas Eulerianas 7.5 Algoritmo de Dijkstra 7.6 Algoritmo de Bellman-Ford 7.7 Componentes Fuertemente Conectados 7.8 Grafo Mínimo Equivalente 7.9 Puntos de Corte y Puentes 7.10 Conjunto Fundamental de Circuitos

Bibliografía

iv

208 211 217 224 229 231 235 239 242 247 251 258 264 272 274 282 288 299

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Índice de Teoremas Página Teorema 1.1 Teorema 1.2 Teorema 1.3 Teorema 1.4 Teorema 1.5 Teorema 1.6 Teorema 1.7 Teorema 1.8 Teorema 1.9 Teorema 1.10 Teorema 1.11 Teorema 1.12 Teorema 1.13 Teorema 1.14 Teorema 1.15 Teorema 1.16 Teorema 1.17

Teorema 1.18 Teorema 1.19 Teorema 1.20

Para cualesquiera proposiciones p, q, r en ℘ se tiene que (p ∨ q) ∨ r ≡ p ∨ (q ∨ r) Para cualquier proposición p en ℘ se tiene que ¬(¬p) ≡ p Para cualesquiera proposiciones p, q en ℘ se tiene que p Ÿ q ≡ ¬p ∨ q Para cualesquiera proposiciones p y q en ℘ se tiene que la proposición compuesta (p ∧ q) Ÿ p es una tautología. Para cualquier proposición p en ℘ se tiene que p ∨ ¬p es una tautología. Para cualquier proposición p en ℘ se tiene que p ∧ ¬p es una contradicción. Para cualesquiera proposiciones p, q en ℘ se tiene que ¬(p Ÿ q) ≡ (p ∧ ¬q) Para cualesquiera proposiciones p, q en ℘ se tiene que p Ÿ q ≡ ¬q Ÿ ¬p Para cualesquiera proposiciones p, q en ℘ se tiene que p∨q≡q∨p Para cualesquiera proposiciones p, q, r en ℘ se tiene que p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r) Para cualesquiera proposiciones p, q en ℘ se tiene que ¬(p ∨ q) ≡ ¬p ∧ ¬q Para cualquier proposición p en ℘ se tiene que p∧V≡p Existe un número real x tal que 3x + 10 = -4. Existe un número complejo x tal que x2 + 5 = 2. Para cualesquiera proposiciones p, q, r en ℘ se tiene que p Ÿ (q ∨ r) ≡ (p ∧ ¬q) Ÿ r Para cualesquiera proposiciones p, q, r en ℘ se tiene que p Ÿ (q ∧ r) ≡ (p Ÿ q) ∧ (p Ÿ r) Para cualesquiera proposiciones p, q en ℘ se tiene que p Ÿ q ≡ (p ∧ ¬q) Ÿ (r ∧ ¬r) Donde r es cualquier proposición en ℘. Para cualesquiera proposiciones p, q en ℘ se tiene que ¬(p ∧ ¬q) ∧ (p ∨ q) ≡ q Para cualesquiera proposiciones p y q en ℘ se tiene que ((p Ÿ q) ∧ p) Ÿ q ≡ V Para cualesquiera proposiciones p y q en ℘ se tiene que ((p Ÿ q) ∧ ¬q) Ÿ ¬p ≡ V

11 12 12 12 13 13 15 15 16 16 17 17 24 26 31 32

32 34 35 35

v

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Teorema 1.21 Teorema 1.22

Teorema 1.23

Teorema 1.24 Teorema 1.25

Teorema 2.1 Teorema 2.2 Teorema 2.3 Teorema 2.4 Teorema 2.5 Teorema 2.6 Teorema 2.7 Teorema 2.8 Teorema 2.9 Teorema 2.10 Teorema 2.11 Teorema 2.12 Teorema 2.13 Teorema 2.14 Teorema 2.15 Teorema 2.16 Teorema 2.17

vi

Para cualesquiera proposiciones p y q en ℘ se tiene que (p ∧ q) Ÿ (p ∧ q) ≡ V Para cualesquiera proposiciones p y q en ℘ se tiene que a) (p ∧ q) Ÿ p ≡ V b) (p ∧ q) Ÿ q ≡ V Para cualesquiera proposiciones p y q en ℘ se tiene que a) ((p ∨ q) ∧ ¬p) Ÿ q ≡ V b) ((p ∨ q) ∧ ¬q) Ÿ p ≡ V Para cualesquiera proposiciones p, q y r en ℘ se tiene que ((p Ÿ q) ∧ (q Ÿ r)) Ÿ (p Ÿ r) ≡ V Para cualesquiera proposiciones p y q en ℘ se tiene que a) p Ÿ (p ∨ q) ≡ V b) q Ÿ (p ∨ q) ≡ V Sean los conjuntos A = {x: x es múltiplo de 6} y B = {x: x es múltiplo de 2}. Entonces A ⊆ B. El conjunto vacío es subconjunto de cualquier conjunto. Todo conjunto es subconjunto de si mismo. (Propiedad Asociativa de la Intersección): (∀P, Q, R ∈ 28)((P ∩ Q) ∩ R = P ∩ (Q ∩ R)) (Propiedad Asociativa de la Unión): (∀P, Q, R ∈ 28)((P ∪ Q) ∪ R = P ∪ (Q ∪ R)) (Propiedad Conmutativa de la Unión): (∀P, Q ∈ 28)(P ∪ Q = Q ∪ P) (Propiedad Conmutativa de la Intersección): (∀P, Q ∈ 28)(P ∩ Q = Q ∩ P) (Idempotencia de la Intersección): (∀P ∈ 28)(P ∩ P = P) (Idempotencia de la Unión): (∀P ∈ 28)(P ∪ P = P) (Ley del Doble Complemento): (∀P ∈ 28)((PC)C = P) ∅C = 8 8C = ∅ (Propiedad Transitiva de la Contención): (∀P, Q, R ∈ 28)(P ⊆ Q ∧ Q ⊆ R Ÿ P ⊆ R) (Ley de D’Morgan): (∀P, Q ∈ 28)((P ∪ Q)C = PC ∩ QC) (Existencia del Elemento Neutro en la Unión): (∀P ∈ 28)(P ∪ ∅ = P) (Existencia del Elemento Neutro en la Intersección): (∀P ∈ 28)(P ∩ 8 = P) (Propiedad de la Diferencia): (∀P, Q ∈ 28)(P \ Q = P ∩ QC)

36

36

37 38

39

66 67 68 75 77 77 77 78 78 78 80 81 81 82 83 83 84

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Teorema 2.18 Teorema 2.19 Teorema 2.20 Teorema 2.21 Teorema 2.22 Teorema 2.23 Teorema 2.24 Teorema 2.25

(∀A, B, C ∈ 28)((C \ A) ∪ (C \ B) = C \ (A ∩ B)) (∀A, B, C ∈ 28)(C \ (B \ A) = (A ∩ C) ∪ (C \ B)) (∀A ∈ 28)(A \ A = ∅) (∀A, B, C ∈ 28)((B \ A) ∩ C = (B ∩ C) \ A) (∀A, B ∈ 28)((B \ A)C = A ∪ BC) (∀A, B, C ∈ 28)((B \ A) ∪ C = (B ∪ C) \ (A \ C)) (∀A, B, C ∈ 28)(C \ (A ∪ B) = (C \ A) \ B) (∀A, B ∈ 28)(A ∪ (A ∩ B) = A)

Teorema 3.1

La relación binaria R] de ] hacia ] es a) reflexiva, b) no simétrica, c) antisimétrica y d) transitiva. La relación binaria R` de ` hacia ` es a) no reflexiva, b) no simétrica, c) antisimétrica y d) transitiva. La relación binaria R] de ] hacia ] es una Relación de Orden Total. La relación Rm sobre ] es una Relación de Equivalencia. Sea f:A → B una función biyectiva y sea f -1:B → A su correspondiente función inversa. Las composiciones f -1 o f y f o f -1 corresponden a funciones identidad.

Teorema 3.2 Teorema 3.3 Teorema 3.4 Teorema 3.5

Teorema 4.1

Teorema 4.2 Teorema 4.3 Teorema 4.4 Teorema 4.5

Teorema 4.6

n(n + 1) 2 i =1 n 2 > 2n , ∀n ∈ {3, 4, 5, 6, …} 2n + n3 es divisible por 3, ∀n ∈ {1, 2, 3, 4, …} n x n +1 − 1 i x = , x ∈ \ \{1} ¦ x −1 i =0 Si n ∈ ] + y r es un entero no negativo tal que r ≤ n , entonces: §n· n! ¨¨ ¸¸ = © r ¹ r!(n − r )! Teorema del Binomio. Si n es un entero no negativo y a, b ∈ \ , entonces:

86 86 87 87 87 88 88 88

105 106 108 109

126

n

¦i =

135 136 138 139

141

( a + b) n §n· §n· §n· = ¨ ¸ a n + ¨ ¸ a n −1b + ... + ¨ ¸ a n − r b r + ... ©0¹ ©1¹ ©r¹ § n · n −1 § n · n +¨ ¸ ab + ¨ ¸ b © n − 1¹ ©n¹ O usando notación sigma: n §n· (a + b) n = ¦ ¨¨ ¸¸a n − r b r r =0 © r ¹

144

vii

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Teorema 4.7

§ n · § n · § n + 1· ¨ ¸+¨ ¸=¨ ¸ © r ¹ © r − 1¹ © r ¹

Teorema 5.1

La suma de los grados de los vértices de un grafo G es igual a dos veces el número de aristas en G. Es decir: ¦ deg (u) = 2 ⋅ Card ( E (G))

Teorema 5.2

El número de vértices de grado impar en un grafo G es siempre par. Sea G un grafo. Entonces 1 Card ( E (G )) = d (G ) ⋅ Card (V (G )) 2 (Euler): Un grafo conectado es Euleriano si y sólo si cada uno de sus vértices tiene grado par. Sea G un grafo con n > 1 vértices. Entonces se tendrán las equivalencias: a) G es un árbol. b) G no tiene circuitos y tiene n - 1 aristas. c) G está conectado y tiene n - 1 aristas.

u∈V ( G )

Teorema 5.3

Teorema 5.4 Teorema 5.5

Teorema 7.1

viii

Dado un grafo pesado G, sea P = (v0, v1, …, vk) la ruta más corta del vértice v0 al vértice vk. Para cualquier i y j tales que 0 ≤ i ≤ j ≤ k, sea Pij = (vi, vi+1, …, vj) una subruta de P del vértice vi al vértice vj. Entonces Pij es la ruta más corta del vértice vi al vértice vj.

145

153 153

155 170

173

258

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Índice de Algoritmos Página

Algoritmo 6.1 Algoritmo 6.2 Algoritmo 6.3 Algoritmo 6.4 Algoritmo 6.5 Algoritmo 6.6 Algoritmo 6.7 Algoritmo 6.8

Algoritmo 7.1 Algoritmo 7.2 Algoritmo 7.3 Algoritmo 7.4 Algoritmo 7.5 Algoritmo 7.6 Algoritmo 7.7 Algoritmo 7.8 Algoritmo 7.9

Permutación aleatoria de los elementos en el conjunto {1, 2, …., n}. Generación de Grafos Aleatorios. Generación Automática de Grafos Bipartitas Aleatorios. Generación Automática de Grafos Regulares de Grado d. Generación Automática de Árboles de Expansión Aleatorios. Generación Automática de Árboles Etiquetados y Códigos de Prüfer. Generación Automática de Grafos Hamiltonianos Aleatorios. Generación Automática de Grafos Isomorfos Regulares de Grado d. Implementación de la Búsqueda por Profundidad. Implementación de la Búsqueda por Amplitud. Determinación del Árbol de Expansión Mínimo en un Grafo Conectado Pesado. Implementación de la función Find para la estructura Conjunto Disjunto. Implementación de la función Union para la estructura Conjunto Disjunto. Implementación del Algoritmo de Kruskal con uso de Conjuntos Disjuntos. Implementación del Método de Fleury para Encontrar un Circuito Euleriano. Algoritmo de Dijkstra. El Algoritmo de Bellman-Ford.

182 188 196 203 211 215 222 227 232 236 241 245 245 247 257 260 266

ix

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

x

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

1. Lógica Matemática

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

2

Capítulo 1. Lógica Matemática

1.1 Proposiciones y Conectivos Lógicos Una Proposición Lógica Simple, también llamada Proposición Simple, es un enunciado de tipo declarativo en donde los elementos que la forman siguen reglas de sintaxis. La importancia de la naturaleza declarativa de una Proposición Simple radica en que ésta expresa algo que puede ser caracterizado como Falso (F) o como Verdadero (V). Por ejemplo, considérense los siguientes tres enunciados: • La Luna orbita alrededor de la Tierra. • La Luna es un objeto celeste compuesto de queso. • ¿De qué color es el cielo? Nótese que los tres enunciados se forman por palabras las cuales siguen un conjunto de reglas de sintaxis bien establecidas para el idioma Español y gracias a ello es que logramos comprenderlos. Sin embargo, es claro que el primer enunciado es de tipo declarativo ya que está expresando una característica, en este caso, de la Luna. Si tal característica efectivamente corresponde con el sujeto en cuestión es entonces cuando le asignamos un valor de verdad o falsedad. Por lo tanto, podemos decir que la Proposición Simple “La Luna orbita alrededor de la Tierra” es Verdadera. Ahora bien, es claro que nuestro segundo enunciado también es una Proposición Simple, sin embargo, y gracias a los conocimientos Astronómicos con que contamos en la actualidad, sabemos que ésta es Falsa. Para nuestro tercer enunciado “¿De qué color es el cielo?” debe ser claro que realmente no es posible caracterizarlo como Verdadero o Falso ya que el enunciado no está proporcionando ningún tipo de afirmación sino que está requiriendo se suministre información. Se entiende entonces que aquellos enunciados de naturaleza interrogativa, exclamativa o imperativa no pueden ser caracterizados como Proposiciones Simples. Si bien hemos ejemplificado la noción de Proposición Simple al recurrir a los enunciados que podemos formar con las reglas de nuestro idioma Español, en realidad el nicho sobre el cual estaremos trabajando considera aquellos enunciados que declaran alguna propiedad o resultado de naturaleza Matemática. Estas Proposiciones pueden ser expresadas en términos de las bien conocidas simbología y sintaxis Matemática o bien auxiliándose, a fin de facilitar su comprensión, en nuestro idioma Español. Veamos algunos ejemplos: • 2+2=4 • 5≤2 • El producto de dos números reales negativos es un número real positivo. Es claro que el primer y el tercer enunciado son Verdaderos. El enunciado “5 ≤ 2” es evidentemente Falso. Por lo regular se requiere considerar en repetidas ocasiones a nuestras Proposiciones. Por ello es común que una Proposición sea asociada a una letra entendiendo que tal letra representa a un enunciado. También, cuando se conoce la verdad o falsedad de la Proposición se coloca a un lado de ésta (V) o bien (F) para denotar si es verdadera o bien si es falsa, respectivamente. Por ejemplo, considérese que las letras p, q y r representan a las siguientes Proposiciones para cuales también ya conocemos su valor de verdad o falsedad:

3

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

• • •

p: Washington, D.C. es la capital de los Estados Unidos de América (V) q: Todos los estudiantes de Computación son hombres (F) r: 5 ≥ 4 (V)

Una Proposición Compuesta resulta ser una combinación de Proposiciones conectadas por medio de Conectivos Lógicos. Una Proposición Compuesta es también un enunciado de naturaleza declarativa y por lo tanto también puede asignársele un valor de verdad o falsedad. Este valor irá directamente en función de los valores de verdad o falsedad de las proposiciones que la forman así como de los conectivos lógicos que se estén utilizando. Hemos de tener en cuenta que las Proposiciones que formen a una Proposición Compuesta pueden ser simples o de hecho ser en sí mismas Proposiciones Compuestas. Para comenzar a presentar ejemplos de Proposiciones Compuestas debemos ir introduciendo los conectivos lógicos que consideraremos. Si una Proposición Compuesta tiene la siguiente estructura (Proposición A) y (Proposición B) Entonces a tal Proposición se le llama Conjunción y tiene valor de verdad (V) únicamente cuando tanto la Proposición A como la Proposición B son verdaderas. El conectivo “y” se representará Matemáticamente con el símbolo ∧. Veamos los siguientes ejemplos: • p ∧ q: (Washington, D.C. es la capital de los Estados Unidos de América) y (Todos los estudiantes de Computación son hombres) o Sabemos que tanto la proposición simple p como la proposición simple q son ambas verdaderas. Por lo tanto, la conjunción p ∧ q es también verdadera. • Considérense las siguientes proposiciones simples: o r: 5 ≥ 4 (V) o s: 3 < 3 (F) o Entonces tenemos que la conjunción r ∧ s: (5 ≥ 4) ∧ (3 < 3) es falsa. • Ahora consideremos a las siguientes proposiciones compuestas: o p: (1 ≤ 2) ∧ (3 = 3) (V) o q: (6 ≠ 8) ∧ (-5 < -2) (V) o Por lo tanto la conjunción p ∧ q: ((1 ≤ 2) ∧ (3 = 3))



((6 ≠ 8) ∧ (-5 < -2))

es verdadera. Si una Proposición Compuesta tiene la siguiente estructura (Proposición A) o (Proposición B) A tal proposición se le denomina Disyunción y tiene valor de verdad (F) sólo cuando las Proposiciones A y B son ambas falsas. El conectivo “o” se representará formalmente usando el símbolo ∨. Considérense los siguientes ejemplos:

4

Capítulo 1. Lógica Matemática





Sean las proposiciones simples: o p: 5 ≥ 4 (V) o q: 3 > 4 (F) o Entonces p ∨ q: (5 ≥ 4) ∨ (3 > 4) es verdadera. Considérense las proposiciones compuestas (ambas de hecho son conjunciones): o r: (1 > 2) ∧ (3 = 3) (F) o s: (6 = 8) ∧ (-5 < -2) (F) o Por lo tanto la disyunción p ∨ q: ((1 > 2) ∧ (3 = 3))



((6 = 8) ∧ (-5 < -2))

es falsa. Este último ejemplo claramente nos dice que al contar con más de un conectivo lógico es posible la construcción de Proposiciones Compuestas que consideren a conectivos diferentes. El uso de los paréntesis nos indica el orden en que cada conectivo ha de ser evaluado. Si una Proposición tiene la siguiente estructura: Es falso que (Proposición A)

A tal Proposición se le llama Negación de la Proposición A y tendrá un valor de verdadero (V) cuando y sólo cuando la Proposición A tenga valor (F). Usaremos el símbolo ¬ para denotar la negación de una proposición. Considérese por ejemplo a la proposición p: 2 < 3 la cual es evidentemente verdadera. De acuerdo a la definición de nuestro conectivo ¬ tenemos entonces que ¬p es falsa. Si una Proposición Compuesta cuenta con la siguiente estructura: Si (Proposición A) entonces (Proposición B)

A ésta se le llama Implicación o Condicional. A la Proposición A, la cual se coloca entre “si” y “entonces” le llamamos Antecedente. A la Proposición B colocada después de “entonces” se le llama Consecuente. El símbolo Ÿ denotará una implicación. Por ejemplo considérense las siguientes proposiciones simples: • p: Está lloviendo. • q: Hay nubes en el cielo. Por lo tanto la implicación formada por las proposiciones p y q estaría dada por: Si p entonces q: Si (Está lloviendo) entonces (Hay nubes en el cielo) O bien, en términos más formales usando el símbolo Ÿ: p Ÿ q: (Está lloviendo) Ÿ (Hay nubes en el cielo)

5

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Una implicación será verdadera en cualquiera de los siguientes casos: • Si el antecedente es falso, independientemente del valor del consecuente. • Si el consecuente es verdadero, independientemente del valor que tome el antecedente. Veamos los siguientes ejemplos: • p: 1 ≠ 2 (V) • q: -4 > -1 (F) • r: 6 = 8 (F) • Entonces tenemos: o p Ÿ q: (1 ≠ 2) Ÿ (-4 > -1) (F) o q Ÿ p: (-4 > -1) Ÿ (1 ≠ 2) (V) o p Ÿ r: (1 ≠ 2) Ÿ (6 = 8) (F) o q Ÿ q: (-4 > -1) Ÿ (-4 > -1) (V)

1.2 Tablas de Verdad Considérese la siguiente Proposición: El número natural x es un número par. Es claro que el enunciado es de naturaleza declarativa en donde se hace una afirmación respecto a una propiedad de un número natural. Sin embargo, es claro que la proposición como tal no puede ser caracterizada de manera inmediata como verdadera o como falsa. Ello se debe a que necesitamos conocer de manera específica quién es el número x en cuestión. Si x = 2 entonces tenemos que la Proposición es verdadera. Pero por otro lado si x = 3 entonces tenemos que la Proposición es falsa. En este punto debemos clarificar que de ninguna forma estamos dando lugar a ambigüedades respecto a la certeza de la verdad o falsedad de la Proposición, es simplemente una cuestión de que una vez que el sujeto en cuestión es especificado tenemos entonces todos los elementos para evaluar a la Proposición. Por el momento debemos tener claro que la Proposición “El número natural x es un número par” tiene dos posibles propiedades: ser falsa o ser verdadera. Ahora considérense la siguientes dos Proposiciones: • r: x ≤ 5 • s: y + 10 = 13 Usando a r y s formamos a la siguiente Conjunción u: u: r ∧ s: (x ≤ 5) ∧ (y + 10 = 13) Por la discusión anterior sabemos que u puede ser verdadera o falsa y ello está directamente relacionado con la verdad o falsedad de las proposiciones r y s. Es claro que cualquier número x que sea menor o igual a 5 hará que la proposición r sea verdadera. Cualquier número x cuyo valor esté por encima de 5 hará que r sea falsa. Para la Proposición s tenemos que únicamente será el número y = 3 el que hará que ésta sea verdadera. Evidentemente cualquier número y diferente al 3 nos llevará a la conclusión de que s es falsa. Retomando nuestra discusión respecto a la Conjunción u, las preguntas ahora serían: ¿bajo qué condiciones u será verdadera? ¿Bajó que condiciones u será falsa? Habiendo analizado a las Proposiciones r y s, y tomando en consideración la definición del conectivo ∧, tenemos las siguientes posibilidades:

6

Capítulo 1. Lógica Matemática

• Si r es verdadera y s es verdadera entonces u es verdadera. • Si r es falsa y s es verdadera entonces u es falsa. • Si r es verdadera y s es falsa entonces u es falsa. • Si r es falsa y s es falsa entonces u es falsa. Debe ser claro que únicamente tendremos las 4 posibilidades antes descritas. Tres de ellas conducen a que u sea falsa y una nos lleva a determinar que u es verdadera. Considérese una Proposición para la cual se han identificado todas las Proposiciones Simples que la conforman. A cada una de las posibles asignaciones de verdad o falsedad que pueden tener de manera simultánea tales Proposiciones Simples se le llama un Estado. Retomando nuestro ejemplo con la Proposición u tenemos que ésta se forma por dos Proposiciones Simples y cuenta con 4 posibles estados. En el caso de la Proposición “El número natural x es un número par” tenemos que ésta ya es simple y considerando su correspondiente discusión tenemos que únicamente cuenta con 2 posibles estados. Consideremos ahora a la siguiente Proposición Compuesta d: d: (a ∧ b) ∨ c ¿Cuántos posibles estados se presentarán en d? Supongamos que a, b y c son efectivamente Proposiciones simples, realmente no nos interesa lo que afirmen, sólo nos interesa que cada una puede presentar una de las siguientes posibilidades: ser verdadera o ser falsa. Obtengamos los posibles estados de d: • a es verdadera, b es verdadera, c es verdadera. • a es verdadera, b es verdadera, c es falsa. • a es verdadera, b es falsa, c es verdadera. • a es verdadera, b es falsa, c es falsa. • a es falsa, b es verdadera, c es verdadera. • a es falsa, b es verdadera, c es falsa. • a es falsa, b es falsa, c es verdadera. • a es falsa, b es falsa, c es falsa. Un momento de meditación podrá ayudar a verificar que efectivamente no se tienen más posibles estados. En total d presenta 8 estados. Para determinar la veracidad o falsedad de d dependiendo de cada uno de esos estados debemos tomar en consideración a los conectivos presentes en d. Como siempre, los paréntesis nos indican el orden en que deberán ser evaluados los conectivos: • Estado a verdadera, b verdadera, c verdadera: o (a ∧ b) es verdadera. d: (a ∧ b) ∨ c es verdadera. • Estado a verdadera, b verdadera, c falsa: o (a ∧ b) es verdadera. d: (a ∧ b) ∨ c es verdadera. • Estado a verdadera, b falsa, c verdadera: o (a ∧ b) es falsa. d: (a ∧ b) ∨ c es verdadera. • Estado a verdadera, b falsa, c falsa: o (a ∧ b) es falsa. d: (a ∧ b) ∨ c es falsa. • Estado a falsa, b verdadera, c verdadera: o (a ∧ b) es falsa. d: (a ∧ b) ∨ c es verdadera.

7

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



Estado a falsa, b verdadera, c falsa: o (a ∧ b) es falsa. d: (a ∧ b) ∨ c es falsa. • Estado a falsa, b falsa, c verdadera: o (a ∧ b) es falsa. d: (a ∧ b) ∨ c es verdadera. • Estado a falsa, b falsa, c falsa: o (a ∧ b) es falsa. d: (a ∧ b) ∨ c es falsa. Se tiene entonces que 5 de los posibles de estados de la Proposición d hacen que ésta sea verdadera. Evidentemente los 3 restantes estados provocan que d sea falsa. En este punto debe haberse observado ya un patrón que relaciona al número posible de estados con el número de Proposiciones Simples que forman a una Proposición: Toda Proposición formada por n Proposiciones Simples tiene 2n posibles estados. • Si n = 1 entonces la Proposición tiene 21 = 2 estados. • Si n = 2 entonces la Proposición tiene 22 = 4 estados. • Si n = 3 entonces la Proposición tiene 23 = 8 estados. • Si n = 4 entonces la Proposición tiene 24 = 16 estados. Y así sucesivamente.

Sea ℘ el conjunto en el cual se encuentre cualquier Proposición ya sea simple o compuesta. Debe ser claro que ℘ se forma por un número infinito de Proposiciones. Sin embargo, ℘ establecerá nuestro Universo de trabajo. A partir de este punto simplemente consideraremos a las Proposiciones como elementos que se pueden tomar de ℘ y no nos interesará lo que afirmen. Sólo nos interesa que cada una puede ser caracterizada como verdadera o como falsa. Ahora sea p cualquier proposición en el conjunto ℘. Definimos a la Tabla de Verdad de p como una tabla en la que se listan todos sus posibles estados. Además también se presentará el valor de verdad o falsedad de p de acuerdo a cada uno de los estados. El número de renglones y columnas en la tabla dependerá del número de proposiciones que conformen a p. Por ejemplo, sea p una proposición simple. Entonces su tabla de verdad es la siguiente: p V F

p V F

Dado que no tenemos información adicional sobre p entonces únicamente sabemos que puede ser verdadera o falsa. Por ello solo se tiene una columna en donde se listan sus dos posibles estados. Ahora bien, en la segunda columna se listan los valores de verdad o falsedad de p en función de cada uno de sus estados. Pero dado que no hay conectivos y otras proposiciones involucradas es que la segunda columna es igual a la primera.

8

Capítulo 1. Lógica Matemática

Ahora consideremos a la proposición p ∨ q. Es claro que ésta es una proposición compuesta formada por dos proposiciones simples p y q conectadas por una disyunción. Entonces la tabla de verdad de p ∨ q estará dada por: p V V F F

q V F V F

p∨q V V V F

En este caso tenemos 4 posibles estados y la última columna presenta el valor de verdad o falsedad de p ∨ q de acuerdo a cada uno de los estados en consideración. De hecho, hemos presentado a la Tabla de Verdad para la Disyunción. La siguiente es la Tabla de Verdad para la Conjunción: p V V F F

q V F V F

p∧q V F F F

La Tabla de Verdad para la Implicación o Condicional: p V V F F

q V F V F

pŸq V F V V

Y finalmente tenemos a la Tabla de Verdad para la Negación: p V F

¬p F V

Reconsideremos a la Proposición compuesta (a ∧ b) ∨ c. Sabemos que cuenta con 8 estados. Sabemos que su tabla de verdad deberá presentar tres columnas asociadas a las proposiciones a, b y c. Sin embargo, es también válido agregar columnas adicionales que nos auxilien para determinar de manera clara los estados con los cuales la proposición en cuestión es verdadera o falsa. En nuestro caso actual podemos agregar una columna en donde se presenten los valores asociados a la proposición a ∧ b los cuales a su vez van en función de los estados formados únicamente por a y b. Ya contando con éstos últimos simplemente procedemos a evaluarlos con aquellos valores que puede tomar la proposición c, considerando el conectivo ∨, a fin de determinar los valores finales de (a ∧ b) ∨ c. Entonces se tendrá: 9

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

a V V V V F F F F

b V V F F V V F F

c a ∧ b (a ∧ b) ∨ c V V V F V V V F V F F F V F V F F F V F V F F F

Considérese la Proposición ((p Ÿ q) ∧ (q Ÿ r)) ∧ (p Ÿ r). Ésta depende de las proposiciones simples p, q y r. Para determinar la tabla de verdad agregaremos cuatro columnas adicionales. Cada una de estas columnas corresponderá respectivamente a p Ÿ q, q Ÿ r, p Ÿ r y finalmente (p Ÿ q) ∧ (q Ÿ r). Debe ser claro que los valores asociados a la proposición (p Ÿ q) ∧ (q Ÿ r) irán en función de los valores asociados a las proposiciones p Ÿ q y q Ÿ r. Éstos a su vez estarán dados por los posibles estados formados por p y q, en el caso de p Ÿ q, y por lo estados formados por q y r, en el caso de q Ÿ r. Una vez que se cuente con toda esta información entonces podremos dar solución inmediata a la proposición objetivo ((p Ÿ q) ∧ (q Ÿ r)) ∧ (p Ÿ r). p V V V V F F F F

q V V F F V V F F

r p Ÿ q q Ÿ r p Ÿ r (p Ÿ q) ∧ (q Ÿ r) ((p Ÿ q) ∧ (q Ÿ r)) ∧ (p Ÿ r) V V V V V V F V F F F F V F V V F F F F V F F F V V V V V V F V F V F F V V V V V V F V V V V V

Supóngase que se tienen dos proposiciones p y q en ℘ para las cuales con el mismo estado ambas presentan el mismo valor de verdad o falsedad. Si esta propiedad se cumple para cada uno de sus posibles estados entonces se dice que p y q son Lógicamente Equivalentes y se le denota como p ≡ q. En términos llanos esto se traduce en que las tablas de verdad de p y q son iguales. Nótese que el verificar mediante tablas de verdad si para cualesquiera dos proposiciones p y q en ℘ se tiene su equivalencia lógica es en sí una Demostración o Prueba. Ello se debe a que estamos comprobando que efectivamente la Proposición p≡q es verdadera. Toda Proposición para la cual se presenta una demostración que permite concluir que lo que afirma su enunciado es verdadero es llamada Teorema. La manera en que se plantea el enunciado y la forma en que se aborda su demostración depende del área 10

Capítulo 1. Lógica Matemática

al cual esté asociado el Teorema en cuestión. Por ejemplo, un Teorema que afirme algo dentro del área de la Geometría seguramente utilizará simbología y métodos de demostración aparentemente diferentes a aquellos presentes en el área de la Aritmética. Sin embargo, algo que tendrán en común todas las áreas de la Matemática es que los Teoremas finalmente son proposiciones y sus métodos de demostración utilizarán herramientas proporcionadas precisamente por la Lógica Matemática. En las siguientes secciones ahondaremos más en este último punto. Por el momento, consideraremos Teoremas referentes a la verificación de Equivalencia Lógica de proposiciones usando Tablas de Verdad como método de demostración. Demostremos entonces nuestro primer Teorema. La formalidad establece que se debe enunciar debidamente el enunciado que se quiere verificar es verdadero. Posteriormente se establece mediante la palabra “Demostración” que ésta ha iniciado como tal. Cuando se ha finalizado la demostración, haciendo ver que efectivamente el Teorema es verdadero, entonces se utiliza el símbolo para indicar el fin de la demostración. Teorema 1.1: Para cualesquiera proposiciones p, q, r en ℘ se tiene que

(p ∨ q) ∨ r ≡ p ∨ (q ∨ r) Demostración: Al comparar las tablas de verdad de (p ∨ q) ∨ r y p ∨ (q ∨ r) se verifica la equivalencia lógica (nótese que se han introducido columnas auxiliares). p V V V V F F F F

q V V F F V V F F

r (p ∨ q) (q ∨ r) (p ∨ q) ∨ r p ∨ (q ∨ r) V V V V V F V V V V V V V V V F V F V V V V V V V F V V V V V F V V V F F F F F

Nótese que nuestro Teorema inicia estableciendo “Para cualesquiera proposiciones p, q, r en ℘”. Ello quiere decir que la validez de la equivalencia lógica entre (p ∨ q) ∨ r y p ∨ (q ∨ r) es independiente de lo que específicamente afirmen las proposiciones p, q y r. Sabemos que el número de proposiciones en ℘ es infinito, sin embargo el Teorema que acabamos de probar es válido para cualquier terna de proposiciones p, q, r que tomemos de ℘. Esto es posible ya que lo que tienen en común todas esas proposiciones es que pueden ser verdaderas o falsas y es precisamente la única propiedad que nos interesa de ellas.

11

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Teorema 1.2: Para cualquier proposición p en ℘ se tiene que

¬(¬p) ≡ p Demostración: Al comparar las tablas de verdad de p y ¬(¬p) se verifica la equivalencia lógica. p V F

¬p F V

p V F

¬(¬p) V F

Teorema 1.3: Para cualesquiera proposiciones p, q en ℘ se tiene que

p Ÿ q ≡ ¬p ∨ q Demostración: Al comparar las tablas de verdad de p Ÿ q y ¬p ∨ q se verifica la equivalencia lógica. p V V F F

q V F V F

¬p F F V V

pŸq V F V V

¬p ∨ q V F V V

Una proposición es llamada Tautología si para cada uno de sus estados ésta toma siempre el valor de verdadero.

Teorema 1.4: Para cualesquiera proposiciones p y q en ℘ se tiene que la proposición compuesta (p ∧ q) Ÿ p es una tautología.

12

Capítulo 1. Lógica Matemática

Demostración: Mediante la tabla de verdad de (p ∧ q) Ÿ p se verifica que para todos sus posibles estados ésta es verdadera. p V V F F

q V F V F

p∧q V F F F

(p ∧ q) Ÿ p V V V V

Teorema 1.5: Para cualquier proposición p en ℘ se tiene que p ∨ ¬p es una tautología.

Demostración: Mediante la tabla de verdad de p ∨ ¬p se verifica que para todos sus posibles estados ésta es verdadera. p V F

¬p F V

p ∨ ¬p V V

Una proposición es una Contradicción si para cada uno de sus estados ésta toma siempre el valor de falso. Teorema 1.6: Para cualquier proposición p en ℘ se tiene que p ∧ ¬p es una contradicción.

Demostración: Mediante la tabla de verdad de p ∧ ¬p se verifica que para todos sus posibles estados ésta es falsa. p V F

¬p F V

p ∧ ¬p F F

13

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Cuando se identifican proposiciones las cuales han sido caracterizadas como Tautologías o Contradicciones se tiene que es posible utilizar la noción de equivalencia lógica para denotarlas como tal sin tener que recurrir a una mención textual o a su tabla de verdad. En este sentido si se cuenta con una proposición p la cual es una tautología entonces simplemente se dirá que p es Lógicamente Equivalente al Valor Verdadero, denotándolo como p ≡ V. Si q es una proposición caracterizada como contradicción entonces se dirá que q es Lógicamente Equivalente al Valor Falso, q ≡ F. Por lo tanto, los enunciados de los Teoremas 1.4, 1.5 y 1.6 pueden ser también establecidos de la siguiente manera: • Teorema 1.4: Para cualesquiera proposiciones p y q en ℘ se tiene (p ∧ q) Ÿ p ≡ V. • Teorema 1.5: Para cualquier proposición p en ℘ se tiene que p ∨ ¬p ≡ V. • Teorema 1.6: Para cualquier proposición p en ℘ se tiene que p ∧ ¬p ≡ F. Una cuestión que surge ahora es que si expresamos que p ≡ V o p ≡ F ello quiere decir que entonces tanto el valor de Verdad como el de Falsedad son ambos proposiciones ya que la notación introducida los compara precisamente contra proposiciones. Por lo tanto, los valores V y F pueden verse y manipularse como proposiciones. Simplemente debemos tomar en cuenta, y en realidad no debería ser difícil apreciarlo, que V representa a cualquier proposición que sea una tautología y que F representa a cualquier proposición que sea una contradicción. Si una proposición tiene la siguiente estructura, donde p y q son cualesquiera proposiciones en ℘: pŸq∧qŸp Entonces a tal proposición la llamaremos Bicondicional y la denotaremos por p⇔q Construimos la tabla de verdad de la bicondicional a partir de su definición en términos de los conectivos condicional y conjunción: p V V F F

q V F V F

pŸq V F V V

qŸp pŸq∧qŸp V V V F F F V V

De acuerdo a la tabla tenemos entonces que p ⇔ q es verdadera cuando ambas p y q son verdaderas o cuando ambas son falsas. En la práctica a p ⇔ q se le traduce como “p si y sólo si q”. Veamos como es que mediante el uso de la bicondicional podemos establecer un mecanismo de demostración alternativo para la verificación de proposiciones lógicamente equivalentes. 14

Capítulo 1. Lógica Matemática

Dos proposiciones p y q son lógicamente equivalentes si la bicondicional p ⇔ q es una tautología, es decir: p ≡ q si se cumple que p ⇔ q ≡ V. Por ejemplo, probaremos que ¬(p Ÿ q) es lógicamente equivalente a p ∧ ¬q mediante el uso de la bicondicional. Es decir, se demostrará el siguiente

Teorema 1.7: Para cualesquiera proposiciones p, q en ℘ se tiene que

¬(p Ÿ q) ≡ (p ∧ ¬q)

Demostración: Se procederá a verificar que ¬(p Ÿ q) ⇔ (p ∧ ¬q) ≡ V. p V V F F

q V F V F

¬q p Ÿ q F V V F F V V V

¬(p Ÿ q) F V F F

p ∧ ¬q F V F F

¬(p Ÿ q) ⇔ (p ∧ ¬q) V V V V

Dado que ¬(p Ÿ q) ⇔ (p ∧ ¬q) es una tautología entonces ¬(p Ÿ q) ≡ (p ∧ ¬q).

Teorema 1.8: Para cualesquiera proposiciones p, q en ℘ se tiene que

p Ÿ q ≡ ¬q Ÿ ¬p

15

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Demostración: Se procederá a verificar que (p Ÿ q) ⇔ (¬q Ÿ ¬p) ≡ V. p V V F F

q V F V F

¬p ¬q p Ÿ q F F V F V F V F V V V V

¬q Ÿ ¬p V F V V

(p Ÿ q) ⇔ (¬q Ÿ ¬p) V V V V

Dado que (p Ÿ q) ⇔ (¬q Ÿ ¬p) es una tautología entonces p Ÿ q ≡ ¬q Ÿ ¬p.

Teorema 1.9: Para cualesquiera proposiciones p, q en ℘ se tiene que

p∨q≡q∨p

Demostración: Se procederá a verificar que (p ∨ q) ⇔ (q ∨ p) ≡ V. p V V F F

q V F V F

p∨q V V V F

q∨p V V V F

(p ∨ q) ⇔ (q ∨ p) V V V V

Dado que (p ∨ q) ⇔ (q ∨ p) es una tautología entonces p ∨ q ≡ q ∨ p.

Teorema 1.10: Para cualesquiera proposiciones p, q, r en ℘ se tiene que

p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r)

16

Capítulo 1. Lógica Matemática

Demostración: Se procederá a verificar que (p ∧ (q ∨ r)) ⇔ ((p ∧ q) ∨ (p ∧ r)) ≡ V. p

q

r

V V V V F F F F

V V F F V V F F

V F V F V F V F

p ∧ q p ∧ r q ∨ r p ∧ (q ∨ r) V V F F F F F F

V F V F F F F F

V V V F V V V F

V V V F F F F F

(p ∧ q) ∨ (p ∧ (q ∨ r)) ⇔ (p ∧ r) ((p ∧ q) ∨ (p ∧ r)) V V V V V V F V F V F V F V F V

Dado que (p ∧ (q ∨ r)) ⇔ ((p ∧ q) ∨ (p ∧ r)) es una tautología entonces p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r).

Teorema 1.11: Para cualesquiera proposiciones p, q en ℘ se tiene que

¬(p ∨ q) ≡ ¬p ∧ ¬q Demostración: Se procederá a verificar que ¬(p ∨ q) ⇔ ¬p ∧ ¬q ≡ V. p V V F F

q p ∨ q ¬(p ∨ q) ¬p ¬q ¬p ∧ ¬q ¬(p ∨ q) ⇔ ¬p ∧ ¬q V V F F F F V F V F F V F V V V F V F F V F F V V V V V

Dado que ¬(p ∨ q) ⇔ ¬p ∧ ¬q es una tautología entonces ¬(p ∨ q) ≡ ¬p ∧ ¬q

Teorema 1.12: Para cualquier proposición p en ℘ se tiene que

p∧V≡p

17

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Demostración: Recordemos que V como proposición es una tautología. La proposición p puede ser verdadera o falsa. Ello implica que en la tabla de verdad p ∧ V simplemente evaluaremos los posibles valores de p siempre contra V, que es el único valor que puede tomar una tautología. Finalmente determinaremos si p ∧ V ⇔ p es una tautología. p V p∧V p∧V⇔p V V V V F V F V Dado que p ∧ V ⇔ p es una tautología entonces p ∧ V ≡ p.

Antes de cerrar la presente Sección consideremos el siguiente procedimiento. Por ejemplo, sea f una proposición cuyos valores de verdad o falsedad dependen de tres proposiciones p, q y r. Se sabe de antemano que la Tabla de Verdad de f es tal y como se presenta en la Tabla 1.1. Tabla 1.1. Tabla de Verdad asociada a una proposición f compuesta por 3 proposiciones simples.

p V V V V F F F F

q V V F F V V F F

r V F V F V F V F

f V F F F F V V F

La pregunta a plantear es: ¿Cómo se expresa a f como una proposición compuesta formada por las proposiciones p, q y r? Es claro que contamos con los estados de f y también contamos con los valores que ésta toma para cada uno de tales estados. El problema sería determinar qué conectivos utilizar y como colocarlos entre p, q y r. El procedimiento a definir permitirá determinar a f como proposición compuesta formada precisamente por p, q y r pero utilizando únicamente los conectivos conjunción, disyunción y negación.

Tomemos únicamente los renglones en los que f tiene la instancia V. Véase la Tabla 1.2.

18

Capítulo 1. Lógica Matemática

Tabla 1.2. Los estados para los cuales la proposición f, de la Tabla 1.1, es verdadera.

p V F F

q V V F

r V F V

f V V V

Considérese el estado de p, q y r en el tercer renglón (Tabla 1.2) el cual está dado por (F, F, V). Nótese que: • Si p es falso entonces ¬p es verdadero. • Si q es falso entonces ¬q es verdadero. • Si r es verdadero entonces obviamente r es verdadero. Nótese que si p, q y r son falso, falso y verdadero, respectivamente, entonces la proposición ¬p ∧ ¬q ∧ r se hace verdadera. Se puede comprobar, mediante tabla de verdad, que el estado (F, F, V) es el único que hace que la proposición ¬p ∧ ¬q ∧ r sea verdadera. Ahora considérese el estado de p, q y r en el segundo renglón de la Tabla 1.2 el cual está dado por (F, V, F): • Si p es falso entonces ¬p es verdadero. • Si q es verdadero entonces obviamente q es verdadero. • Si r es falso entonces ¬r es verdadero. Si p, q y r es falsa, verdadera y falsa, respectivamente, entonces la proposición ¬p ∧ q ∧ ¬r es verdadera. Nuevamente se puede verificar que la instancia (F, V, F) es la única que hace que la proposición ¬p ∧ q ∧ ¬r sea verdadera. Finalmente considérese el estado de p, q y r en el primer renglón de la Tabla 1.2 el cual está dado por (V, V, V): • Si p es verdadero entonces obviamente p es verdadero. • Si q es verdadero entonces obviamente q es verdadero. • Si r es verdadero entonces obviamente r es verdadero. Si p, q y r son todas verdaderas entonces la proposición p∧q∧r es verdadera. Análogamente a las proposiciones ¬p ∧ ¬q ∧ r y ¬p ∧ q ∧ ¬r, la instancia (V, V, V) es la única que hace que la proposición p ∧ q ∧ r sea verdadera.

19

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Nótese que lo que hemos hecho ha sido considerar únicamente a los tres estados de la proposición f para los cuales ésta es verdadera. A partir de estos estados hemos construido tres proposiciones compuestas que involucran a p, q y r así como los conectivos de conjunción y negación: • ¬p ∧ ¬q ∧ r • ¬p ∧ q ∧ ¬r • p∧q∧r Ahora uniremos a estas tres proposiciones utilizando el conectivo de disyunción para formar la siguiente proposición compuesta: (¬p ∧ ¬q ∧ r) ∨ (¬p ∧ q ∧ ¬r) ∨ (p ∧ q ∧ r) Verifiquemos que la proposición compuesta que acabamos de obtener tenga la misma Tabla de Verdad que la proposición f:

p

q

r

V V V V F F F F

V V F F V V F F

V F V F V F V F

(¬p ∧ ¬q ∧ r) ¬p ∧ ¬q ∧ r ¬p ∧ q ∧ ¬r p ∧ q ∧ r ∨ (¬p ∧ q ∧ ¬r) ∨ (p ∧ q ∧ r) F F V V F F F F F F F F F F F F F F F F F V F V V F F V F F F F

f V F F F F V V F

Por lo tanto se ha demostrado que f ≡ (¬p ∧ ¬q ∧ r) ∨ (¬p ∧ q ∧ ¬r) ∨ (p ∧ q ∧ r) Es decir, hemos ilustrado un procedimiento mediante el cual es posible obtener para cualquier proposición, dada su tabla de verdad, aquella proposición compuesta que le es lógicamente equivalente. Tal proposición compuesta estará dada en términos de los conectivos lógicos de conjunción, disyunción y negación.

Veamos un segundo ejemplo. Considérese a la proposición g con la siguiente tabla de verdad:

20

Capítulo 1. Lógica Matemática

Tabla 1.3. Tabla de Verdad asociada a una proposición g compuesta por 4 proposiciones simples.

a V V V V V V V V F F F F F F F F

b V V V V F F F F V V V V F F F F

c V V F F V V F F V V F F V V F F

d V F V F V F V F V F V F V F V F

g V V F F F F V V F F F V V F F F

Consideremos únicamente a aquellos estados para los cuales g es verdadera. Véase la Tabla 1.4.

Tabla 1.4. Los estados para los cuales la proposición g, de la Tabla 1.3, es verdadera.

a V V V V F F

b V V F F V F

c V V F F F V

D V F V F F V

g V V V V V V

De la Tabla 1.4 consideremos cada uno de los estados a fin de construir nuestras proposiciones compuestas auxiliares: •

Estado (V,V,V,V) o Si a es verdadero entonces a es verdadero. o Si b es verdadero entonces b es verdadero. o Si c es verdadero entonces c es verdadero. o Si d es verdadero entonces d es verdadero. o Por lo tanto se tiene que a ∧ b ∧ c ∧ d es verdadera únicamente con (V,V,V,V).

21

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



Estado (V,V,V,F) o Si a es verdadero entonces a es verdadero. o Si b es verdadero entonces b es verdadero. o Si c es verdadero entonces c es verdadero. o Si d es falso entonces ¬d es verdadero. o Por lo tanto se tiene que a ∧ b ∧ c ∧ ¬d es verdadera únicamente con (V,V,V,F).



Estado (V,F,F,V) o Si a es verdadero entonces a es verdadero. o Si b es falso entonces ¬b es verdadero. o Si c es falso entonces ¬c es verdadero. o Si d es verdadero entonces d es verdadero. o Por lo tanto se tiene que a ∧ ¬b ∧ ¬c ∧ d es verdadera únicamente con (V,F,F,V).



Estado (V,F,F,F) o Si a es verdadero entonces a es verdadero. o Si b es falso entonces ¬b es verdadero. o Si c es falso entonces ¬c es verdadero. o Si d es falso entonces ¬d es verdadero. o Por lo tanto se tiene que a ∧ ¬b ∧ ¬c ∧ ¬d es verdadera únicamente con (V,F,F,F).



Estado (F,V,F,F) o Si a es falso entonces ¬a es verdadero. o Si b es verdadero entonces b es verdadero. o Si c es falso entonces ¬c es verdadero. o Si d es falso entonces ¬d es verdadero. o Por lo tanto se tiene que ¬a ∧ b ∧ ¬c ∧ ¬d es verdadera únicamente con (F,V,F,F).



Estado (F,F,V,V) o Si a es falso entonces ¬a es verdadero. o Si b es falso entonces ¬b es verdadero. o Si c es verdadero entonces c es verdadero. o Si d es verdadero entonces d es verdadero. o Por lo tanto se tiene que ¬a ∧ ¬b ∧ c ∧ d es verdadera únicamente con (F,F,V,V).

Ahora se procede a conectar mediante disyunciones a las seis proposiciones compuestas que hemos obtenido a fin de obtener la correspondiente proposición lógicamente equivalente a g: g ≡ (a ∧ b ∧ c ∧ d) ∨ (a ∧ b ∧ c ∧ ¬d) ∨ (a ∧ ¬b ∧ ¬c ∧ d) ∨ (a ∧ ¬b ∧ ¬c ∧ ¬d) ∨ (¬a ∧ b ∧ ¬c ∧ ¬d) ∨ (¬a ∧ ¬b ∧ c ∧ d)

22

Capítulo 1. Lógica Matemática

1.3 Algebra de Proposiciones Consideremos al conjunto de los Números Reales, \ , tomando en cuenta únicamente sus operaciones de suma (+) y producto (⋅). Tenemos pleno conocimiento de que bajo estas dos operaciones para cualesquiera números reales x, y, z se cumplen las siguientes propiedades que forman parte de la bien conocida Álgebra de los Números Reales: • Cerradura: o x + y es un número real. o x ⋅ y es un número real. • Conmutatividad: o x+y=y+x o x⋅y=y⋅x • Asociatividad: o x + (y + z) = (x + y) + z o x ⋅ (y ⋅ z) = (x ⋅ y) ⋅ z • Distributividad: o x ⋅ (y + z) = x ⋅ y + x ⋅ z • Existencia de Elementos Neutros: o Existe un número real 0 (cero) tal que x + 0 = 0 + x = x o Existe un número real 1 (uno) tal que x⋅1 = 1⋅x = x • Existencia de los Elementos Inversos: o Existe un número real (–x) tal que x + (-x) = 0 o Existe un número real x-1 ≠ 0 tal que x⋅x-1 = 1 Estas propiedades representan un conjunto de herramientas útiles para dar solución a problemas bien conocidos como el siguiente: Encontrar el número real x tal que 3x + 10 = -4 De hecho, nótese que el problema antes planteado puede ser reespecificado como la siguiente proposición: Existe un número real x tal que 3x + 10 = -4 Si efectivamente existe el número deseado x entonces es que nuestra proposición es Verdadera. De lo contrario ésta tendría que ser caracterizada como Falsa. Lo más interesante es que entonces al momento de dar solución a una Ecuación estamos demostrando que una proposición es verdadera. Ello quiere decir que siempre que hemos resuelto una ecuación en realidad hemos demostrado un Teorema. Ahora bien, debe ser claro que debemos contar con herramientas y una metodología para abordar la correspondiente demostración. Una opción, totalmente válida, podría ser el considerar uno por uno a todo número real, sustituirlo en la expresión 3x + 10 y si la evaluación da a lugar al valor -4 entonces finalizamos. Sin embargo esto en realidad no es del todo práctico. Precisamente contamos con un álgebra de los números reales que nos permitirá identificar 23

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

al valor de x si éste existe. La metodología a seguir es simplemente aplicar las propiedades que sean convenientes a fin de “despejar” a x tomando en cuenta que también deberá mantenerse en todo momento el “equilibrio” de la ecuación:

Teorema 1.13: Existe un número real x tal que 3x + 10 = -4.

Demostración: 3x + 10 = -4 Ÿ

3x + 10 + (-10) = -4 + (-10)

Ÿ

3x + 0 = -4 + (-10)

Ÿ

3x = -14

Ÿ

§1· §1· 3 ¨ ¸ x = -14 ¨ ¸ ©3¹ ©3¹

Ÿ

§1· 1 ⋅ x = -14 ¨ ¸ ©3¹

Ÿ

x= −

14 3

Justificación: Lado izquierdo: Existe un número real (–10) tal que 10 + (-10) = 0. Justificación: Lado izquierdo: El 0 (cero) es el elemento neutro bajo la suma de reales. Lado derecho: La suma de los reales -4 + (-10) es el número real -14. Justificación: Lado izquierdo: 1 Existe un número real tal que 3 §1· 3 ¨ ¸ = 1. ©3¹

Justificación: Lado izquierdo: El 1 (uno) es el elemento neutro bajo el producto de reales. Lado derecho: 1 El producto de los reales -14 y es 3 14 el número real − . 3

Por lo tanto, al aplicar las propiedades de los números reales se ha verificado la existencia 14 del número real x = − para el cual 3x + 10 = -4. 3

24

Capítulo 1. Lógica Matemática

Nótese como es que los pasos en la demostración del Teorema 1.13 no son más que aquellas operaciones utilizadas comúnmente para resolver nuestra ecuación. Cada paso es debidamente justificado al hacer mención de la propiedad de los números reales que se esté utilizando. Obsérvese que inicialmente partimos de la proposición 3x + 10 = -4 la cual suponemos que es verdadera. Posteriormente se aplicó la propiedad que nos garantiza la existencia de los elementos inversos bajo la suma. Con ello se obtuvo la proposición 3x + 10 + (-10) = -4 + (-10) la cual debe ser claro que es consecuencia de 3x + 10 = -4 y de la propiedad considerada. De allí que 3x + 10 = -4 es el antecedente de 3x + 10 + (-10) = -4 + (-10) y por ello el uso del conectivo Ÿ. Ahora bien, previamente mencionamos que 3x + 10 = -4 se asumía verdadera y también sabemos que la propiedad referente a la existencia de elemento inverso bajo la suma es también verdadera, por lo tanto, la proposición 3x + 10 + (-10) = -4 + (-10) debe asumirse verdadera. A partir de ésta se obtiene la proposición 3x + 0 = -4 + (-10). Por lo tanto 3x + 10 + (-10) = -4 + (-10) es el antecedente de 3x + 0 = -4 + (-10). Por ello se tiene nuevamente el uso del conectivo Ÿ. Debe ser evidente que se tiene entonces la cadena de implicaciones: 14 · § (3x + 10 = -4) Ÿ (3x + 10 + (-10) = -4 + (-10)) Ÿ (3x + 0 = -4+(-10)) Ÿ … Ÿ ¨ x = − ¸ 3¹ © Donde el último consecuente es precisamente la solución de la ecuación. Todas las proposiciones son efectivamente verdaderas: recuérdese que durante la demostración asumíamos que eran verdaderas. Pero al llegar a nuestra meta entonces podemos declarar que cada una es lógicamente equivalente al valor V. Sustituyendo tenemos ahora: VŸVŸVŸ…ŸV Y por las propiedades del conectivo Ÿ tenemos que VŸVŸVŸ…ŸV≡V Es claro que desde el punto de vista del álgebra de los números reales esta última expresión no es muy útil, pero desde otro punto de vista tenemos que esta expresión nos proporciona un sustento lógico que valida al Teorema 1.13.

Consideremos al siguiente Teorema: Existe un número real x tal que x2 + 5 = 2.

Procedamos a utilizar nuestra álgebra de los números reales (también recurriremos a las propiedades de los exponentes y del operador ):

25

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

x2 + 5 = 2 Ÿ

x + 5 + (-5) = 2 + (-5)

Ÿ

x2 + 0 = 2 + (-5)

Ÿ

2

x2 = -3

Ÿ

x 2 = ± −3

Ÿ

x = ± −3

Justificación: Lado izquierdo: Existe un número real (–5) tal que 5 + (-5) = 0. Justificación: Lado izquierdo: El 0 (cero) es el elemento neutro bajo la suma de reales. Lado derecho: La suma de los reales 2 + (-5) es el número real -3. Justificación: (-3)2 = (3)2

Efectivamente hemos logrado “despejar” a x. El problema radica en que −3 no es un número real. Por lo tanto, el último consecuente, x = ± −3 es falso, ya que el enunciado establece claramente que se espera que x sea un real (de hecho podíamos haber llegado a tal conclusión desde la proposición x 2 = ± −3 ). Todos los antecedentes se asumieron verdaderos, por lo que se tiene entonces que:

(x2 + 5 = 2) Ÿ (x2 + 5 + (-5) = 2 + (-5)) Ÿ … Ÿ

(

) (

x 2 = ± −3 Ÿ x = ± −3

≡ VŸVŸ…ŸVŸF

)

Verificando las propiedades del conectivo Ÿ se tiene que (V Ÿ V Ÿ … Ÿ V) Ÿ F ≡ V Ÿ F ≡ F Con lo cual queda establecida, desde el punto de vista lógico, la falsedad del Teorema propuesto. Ahora bien, obsérvese que si el conjunto de valores que puede tomar x es ahora el conjunto de los Números Complejos ^ entonces el Teorema se vuelve verdadero ya que efectivamente x = ± −3 es un número complejo:

Teorema 1.14: Existe un número complejo x tal que x2 + 5 = 2.

26

Capítulo 1. Lógica Matemática

Hemos visto como es que el Álgebra de los Números Reales nos dota de un conjunto de proposiciones cuya validez es siempre asumida cierta y por medio de las cuales es posible verificar de manera concreta nuevas afirmaciones. Estas afirmaciones de ser verificadas mediante un proceder exhaustivo, como confirmar usando cada uno de los números reales, simplemente harían impráctico el proceso de demostración de Teoremas dentro del área del Álgebra de los Números Reales. Ahora bien, en la Sección anterior ya se introdujo una metodología para la demostración del Teoremas que tienen que ver con la equivalencia lógica entre Proposiciones. Esta metodología estaba basada en el uso de las Tablas de Verdad. Decíamos que dos proposiciones son lógicamente equivalentes si sus Tablas de Verdad son iguales. De esta forma es como probamos los Teoremas 1.1 a 1.12. Sin embargo, tenemos conocimiento de que el número de estados para una proposición dada crece de manera exponencial conforme aumentan el número de proposiciones simples que la conforman. Al respecto, en su momento se estableció la siguiente propiedad: Toda Proposición formada por n Proposiciones Simples tiene 2n posibles estados.

Las pruebas de los Teoremas 1.1 a 1.12 en realidad fueron sencillas ya que en esos casos estábamos lidiando con proposiciones formadas por 1, 2 o 3 proposiciones simples lo que implicaba analizar 2, 4 u 8 estados respectivamente. Sin embargo, en la práctica es común el requerir verificar la equivalencia lógica de proposiciones conformadas por decenas o cientos de proposiciones simples. Esto impone entonces un problema de índole temporal en el sentido de que si bien es muy sencillo verificar si dos estados son iguales, el número total de estados por verificar es realmente enorme. Veamos unos ejemplos: •

Si una proposición se forma por: o o o o

n = 10 proposiciones simples, se tienen 210 = 1,024 estados. n = 16 proposiciones simples, 216 = 65,536 estados. n = 32 proposiciones simples, 232 = 4,294,967,296 estados. n = 64 proposiciones simples, 264 = 18,446,744,073,709,551,616 estados.

En este punto puede surgir la opción de proponer que una computadora se encargue de generar y comparar los estados, lo cual es en realidad muy fácil de implementar. Supongamos que una cierta computadora procesa 1,000,000 de estados en un segundo (E/Seg). Asumamos que estamos en la situación n = 64 (un caso realmente simple en la práctica). Entonces tendremos que el tiempo que le tomará a nuestro equipo de cómputo en procesar a todos los estados será:

27

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

tn =64 = =

264 E 1, 000, 000 E / Seg 18, 446, 744, 073, 709,551, 616 E 1, 000, 000 E / Seg

= 18,446,744,073,709.551616 Seg ≈ 307,445,734,561.825 minutos ≈ 5,124,095,576.0304 horas ≈ 213,503,982.334 días ≈ 584,942.417 años ≈ 5,849.424 siglos ≈ 584.9 milenios

Debe ser sumamente claro que no es de ninguna manera factible el esperar casi 600 milenios para determinar que efectivamente dos proposiciones con n = 64 proposiciones simples son lógicamente equivalentes. En este punto debe surgir también una comparación con la situación que planteábamos previamente referente a encontrar la solución de una ecuación al evaluar uno por uno cada posible número real.

Por otro lado, hemos de hacer notar algunas observaciones y comparaciones con las propiedades de los números reales, las cuales surgen de los Teoremas demostrados en la Sección anterior. Supóngase por el momento que el operador de suma (+) es análogo al conectivo de disyunción (∨), que el operador de producto (⋅) es análogo al conectivo de conjunción (∧) y finalmente que el operador para denotar un número negativo (-) es análogo al conectivo de negación (¬). •

Teorema 1.1: Para cualesquiera proposiciones p, q, r en ℘ se tiene que (p ∨ q) ∨ r ≡ p ∨ (q ∨ r). o Nótese su similitud con la Propiedad Asociativa de la suma de números reales: (x + y) + z = x + (y + z). Ello quiere decir que entonces es posible nombrar al Teorema 1.1 como Propiedad Asociativa del Operador de Disyunción. Además, será posible aplicar nuestra nueva propiedad bajo el contexto de proposiciones de manera similar a como es aplicado en el contexto de los números reales.



Teorema 1.9: Para cualesquiera proposiciones p, q en ℘ se tiene que p ∨ q ≡ q ∨ p. o Sabemos que el operador de suma bajo los reales conmuta: x + y = y + x. Y lo mismo sucede con el conectivo de disyunción. Es decir, formalmente se tiene la Propiedad Conmutativa de la Disyunción.

28

Capítulo 1. Lógica Matemática



Teorema 1.10: Para cualesquiera proposiciones p, q, r en ℘ se tiene que p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r). o Considérese a la Propiedad Distributiva de los Números Reales respecto al Producto: x ⋅ (y + z) = x ⋅ y + x ⋅ z. Tenemos nuevamente un punto de similitud ya que es claro que en el Teorema 1.10 tenemos precisamente la Distributividad respecto a la Conjunción. Ello quiere decir que la expresión p ∧ (q ∨ r) puede ser “desarrollada” como (p ∧ q) ∨ (p ∧ r). Por otro lado también tenemos que en la expresión (p ∧ q) ∨ (p ∧ r) es posible “factorizar” a la proposición p a fin de obtener p ∧ (q ∨ r).



Teorema 1.12: Para cualquier proposición p en ℘ se tiene que p ∧ V ≡ p. o Sabemos que el número 1 tiene la propiedad de ser el elemento Neutro bajo el producto: x ⋅ 1 = x. Del Teorema 1.12 hemos identificado a una proposición para cual su conjunción con cualquier otra da como resultado ésta última. Es decir, V es precisamente nuestro Elemento Neutro bajo la Conjunción.



Teorema 1.5: Para cualquier proposición p en ℘ se tiene que p ∨ ¬p ≡ V. o Nuestras propiedades del álgebra de los reales nos dicen que la suma de cualquier número con su inverso es cero, el elemento neutro bajo la suma: x + (-x) = 0. El Teorema 1.5 representa un ejemplo en el cual contamos con una propiedad con un comportamiento similar: la disyunción entre una proposición p y su negación, p ∨ ¬p, donde tenemos que el resultado obtenido es V. En este caso hemos verificado, para la proposición p, la existencia de su Elemento Complementario bajo la Disyunción el cual es precisamente ¬p.

En el último punto tenemos que quizás la intuición nos indicaba que el resultado de p ∨ ¬p debería ser el elemento neutro bajo la disyunción, dada la analogía con la propiedad x + (-x) = 0. Este ejemplo representa una situación a tener bien en cuenta: que las relaciones que hemos establecido entre nuestras propiedades de los conectivos con las propiedades de los números reales son únicamente con fines de entender como se comportan las proposiciones bajo los conectivos definidos al observar un álgebra con la cual ya estamos bien familiarizados. Sin embargo, no debe esperarse que los números reales bajo la suma y producto se comporten de la misma manera que las proposiciones bajo los conectivos de disyunción y conjunción. Por ejemplo, el Teorema 1.11 establece que ¬(p ∨ q) ≡ ¬p ∧ ¬q. Nuestras analogías nos indicarían entonces que debería existir la propiedad de los reales –(x + y) = (-x) ⋅ (-y). Es claro que esta afirmación es falsa, pero estos comparativos nos proporcionan indicios para inferir en un momento dado nuevas propiedades las cuales deben ser entonces demostradas con metodologías formales. Tenemos por lo tanto ya los elementos para establecer un Álgebra de Proposiciones en la que algunas de sus propiedades son muy similares a las presentes en el Álgebra de los Números Reales:

29

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Sean p, q y r cualesquiera proposiciones en ℘: • Propiedades de Cerradura: o p ∨ q es una proposición en ℘. o p ∧ q es una proposición en ℘. o p Ÿ q es una proposición en ℘. o ¬p es una proposición en ℘. • Propiedades de Conmutatividad: o p∨q≡q∨p (Teorema 1.9) o p∧q≡q∧p • Propiedades de Asociatividad: o p ∨ (q ∨ r) ≡ (p ∨ q) ∨ r (Teorema 1.1) o p ∧ (q ∧ r) ≡ (p ∧ q) ∧ r • Propiedades de Distributividad: o p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r) (Teorema 1.10) o p ∨ (q ∧ r) ≡ (p ∨ q) ∧ (p ∨ r) • Propiedades de Idempotencia: o p∨p≡p o p∧p≡p • Propiedad de la Doble Negación: o ¬(¬p) = p (Teorema 1.2) • Leyes de D’Morgan: o ¬(p ∨ q) ≡ ¬p ∧ ¬q (Teorema 1.11) o ¬(p ∧ q) ≡ ¬p ∨ ¬q • Existencia de Elementos Neutros: o p∨F≡p o p∧V≡p (Teorema 1.12) • Existencia de Elementos Complementarios: o p ∧ ¬p ≡ F (Teorema 1.6) o p ∨ ¬p ≡ V (Teorema 1.5) • Existencia de Elementos Aniquiladores: o p∨V≡V o p∧F≡F • Propiedad del Condicional: o p Ÿ q ≡ ¬p ∨ q (Teorema 1.3) • Propiedad de la Bicondicional: o p ⇔ q ≡ (p Ÿ q) ∧ (q Ÿ p)

La idea ahora es aplicar las propiedades de nuestra nueva álgebra a fin de dar demostración a Teoremas referentes a equivalencia lógica de manera más concisa respecto al método basado en Tablas de Verdad. Es necesario mencionar que las Tablas de Verdad, como mecanismo de demostración, no pierden de ninguna manera validez sino que al

30

Capítulo 1. Lógica Matemática

contrario, sirven como punto de sostén para la nueva álgebra debido a que para todas las propiedades antes presentadas se tiene que su veracidad está verificada mediante esta metodología Ahora ejemplificaremos el uso de las propiedades del Algebra de Proposiciones para la demostración de algunos Teoremas. Los enunciados que probaremos serán de la forma p ≡ q. La idea es manipular, aplicando nuestras propiedades, a p de forma que obtengamos proposiciones intermedias las cuales serán lógicamente equivalentes a q. Estas proposiciones intermedias a su vez son también manipuladas hasta obtener precisamente a q. Por lo tanto se tiene que p, q y las proposiciones intermedias son todas lógicamente equivalentes, importándonos únicamente la relación entre p y q. Debe ser claro que si se demuestra que p es lógicamente equivalente a q entonces q es también lógicamente equivalente a p. Por lo tanto, el método antes propuesto no necesariamente inicia en p, también puede iniciarse la demostración con la manipulación de q. Abordemos la demostración de nuestro primer Teorema aplicando Álgebra de Proposiciones. Teorema 1.15: Para cualesquiera proposiciones p, q, r en ℘ se tiene que

p Ÿ (q ∨ r) ≡ (p ∧ ¬q) Ÿ r Demostración: p Ÿ (q ∨ r)

≡ ¬p ∨ (q ∨ r) ≡ (¬p ∨ q) ∨ r ≡ ¬(p ∧ ¬q) ∨ r ≡ (p ∧ ¬q) Ÿ r

(Propiedad del Condicional) (Propiedad Asociativa de la Disyunción) (Ley de D’Morgan sobre ¬p ∨ q) (Propiedad del Condicional: (p ∧ ¬q) se considera el antecedente y r como el consecuente).

La demostración anterior no hace referencia en ningún momento a ninguno de los 8 los posibles estados para las proposiciones p Ÿ (q ∨ r) y (p ∧ ¬q) Ÿ r. Uno podría preguntarse si existirá algún estado para el cual la equivalencia entre las proposiciones en cuestión no se haga válida. La respuesta es que para cualquier estado la equivalencia se preserva. Ello se debe a que las propiedades utilizadas se verifican utilizando Tablas de Verdad y en todos los casos las equivalencias resultan ser válidas. Es por ello que, por ejemplo, cuando se plantea inicialmente el uso de la Propiedad del Condicional de manera que se tiene la equivalencia p Ÿ (q ∨ r) ≡ ¬p ∨ (q ∨ r) podemos tener completa seguridad de que independientemente del valor particular de verdad o falsedad que presenten p y (q ∨ r) los valores de p Ÿ (q ∨ r) y ¬p ∨ (q ∨ r) siempre coincidirán porque precisamente para la Propiedad del Condicional todos los posibles estados ya fueron verificados.

31

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Por otro lado, nuestra prueba del Teorema 1.15 requirió de 4 pasos, en donde cada paso representa una Equivalencia Lógica y por ende a una Tabla de Verdad. De hecho, por esta última mención, debe ser claro que al haber demostrado nuestro Teorema también hemos probado en el trayecto otros 4 Teoremas cuya demostración particular es simplemente la aplicación de una propiedad particular del Álgebra de Proposiciones: • p Ÿ (q ∨ r) ≡ ¬p ∨ (q ∨ r). Demostración: Por Propiedad del Condicional. • ¬p ∨ (q ∨ r) ≡ (¬p ∨ q) ∨ r. Demostración: Por Propiedad Asociativa de la Disyunción. • (¬p ∨ q) ∨ r ≡ ¬(p ∧ ¬q) ∨ r. Demostración: Ley de D’Morgan sobre ¬p ∨ q. • ¬(p ∧ ¬q) ∨ r ≡ (p ∧ ¬q) Ÿ r. Demostración: Por Propiedad del Condicional. La conclusión final, p Ÿ (q ∨ r) ≡ (p ∧ ¬q) Ÿ r surge de “encadenar” todos estos resultados intermedios ya que de hecho tenemos demostrada la equivalencia lógica entre 5 proposiciones, de las cuales nos interesan únicamente la primera y la última.

Teorema 1.16: Para cualesquiera proposiciones p, q, r en ℘ se tiene que

p Ÿ (q ∧ r) ≡ (p Ÿ q) ∧ (p Ÿ r) Demostración: p Ÿ (q ∧ r)

≡ ¬p ∨ (q ∧ r) ≡ (¬p ∨ q) ∧ (¬p ∨ r) ≡ (p Ÿ q) ∧ (¬p ∨ r) ≡ (p Ÿ q) ∧ (p Ÿ r)

(Propiedad del Condicional) (Propiedad Distributiva Respecto a la Disyunción) (Propiedad del Condicional: p se considera el antecedente y q como el consecuente). (Propiedad del Condicional: p se considera el antecedente y r como el consecuente).

Teorema 1.17: Para cualesquiera proposiciones p, q en ℘ se tiene que

p Ÿ q ≡ (p ∧ ¬q) Ÿ (r ∧ ¬r) Donde r es cualquier proposición en ℘.

32

Capítulo 1. Lógica Matemática

Demostración: p Ÿ q ≡ ¬p ∨ q ≡ ¬p ∨ ¬(¬q) ≡ ¬(p ∧ ¬q) ≡ ¬(p ∧ ¬q) ∨ F ≡ ¬(p ∧ ¬q) ∨ (r ∧ ¬r) ≡ (p ∧ ¬q) Ÿ (r ∧ ¬r)

(Propiedad del Condicional) (Propiedad de la Doble Negación) (Ley de D’Morgan) (Existencia del Elemento Neutro en la Disyunción) (Existencia del Elemento Complementario en la Conjunción: F ≡ r ∧ ¬r) (Propiedad del Condicional: (p ∧ ¬q) se considera el antecedente y (r ∧ ¬r) como el consecuente)

El Teorema 1.17 resulta interesante debido a que se podrá apreciar que el lado izquierdo de la equivalencia hace mención a dos proposiciones (p y q) mientras que el derecho cuenta con 3: p, q y r. Estamos entonces ante una situación en la cual se tiene que una proposición descrita en términos de 2 proposiciones es lógicamente equivalente a una proposición que cuenta con esas mismas dos proposiciones más una adicional. La demostración parte de manipular a p Ÿ q hasta obtener a (p ∧ ¬q) Ÿ (r ∧ ¬r). Ello implica que de alguna manera se deberá introducir a la proposición r. Esta manera de proceder de ninguna forma nos es extraña. Recurramos al Álgebra de los Números Reales. Recordemos que uno de los principios fundamentales al manipular una ecuación reside en el hecho de que es posible introducir valores para sumarlos o multiplicarlos siempre y cuando esto se haga en ambos lados de la ecuación. Es decir, hay que preservar el “equilibrio”. Sin embargo, y gracias a la existencia de los elementos neutros, es posible sumar o multiplicar en sólo un lado de una ecuación. Recordemos que el producto por 1 o la suma con 0 de ninguna forma alteran a una cantidad. Por ejemplo, considérese la siguiente ecuación de segundo grado: 9x2 + 4 = 10

Es claro que si sumamos 0 únicamente al lado izquierdo no se altera el “equilibrio”: 9x2 + 4 + 0 = 10

Ahora bien, sabemos que para todo número real existe su correspondiente inverso de tal forma que su suma es precisamente 0. Tenemos de manera particular que 12x + (-12x) = 0. Es claro que si sustituimos el 0 por su equivalente 12x + (-12x) nuevamente en el lado izquierdo de la ecuación ésta sigue sin alterarse porque en realidad no hemos dejado de sumarle cero: 9x2 + 4 + (12x + (-12x)) = 10

33

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Es claro que este tipo de manipulaciones van de acuerdo a un objetivo que deseamos alcanzar. Por ejemplo, en el caso de nuestra ecuación quizás deseábamos poder expresar parte de su lado izquierdo como un binomio al cuadrado:

9x2 + 4 + 12x – 12x = 10 Ÿ (9x2 + 4 + 12x) – 12x = 10 Ÿ (3x + 2)(3x + 2) – 12x = 10 Ÿ (3x + 2)2 – 12x = 10

Recordemos entonces que todo esto fue posible gracias a la existencia de nuestro elemento neutro y los inversos bajo la operación de suma. Algo similar es lo que se presentó en la demostración del Teorema 1.17. Unas manipulaciones iniciales nos llevan a obtener que p Ÿ q es lógicamente equivalente a ¬(p ∧ ¬q). En este punto tomamos en cuenta que existe un elemento neutro para la disyunción el cual es F: cualquier disyunción entre una proposición y F da como resultado la misma proposición. Por lo tanto podemos afirmar sin problema alguno y sin alterar la equivalencia lógica que ¬(p ∧ ¬q) ≡ ¬(p ∧ ¬q) ∨ F. Ahora bien, nuestra Álgebra de Proposiciones nos dice que también existen los elementos complementarios de tal forma que la conjunción de éstos da como resultado F. La pregunta a plantear es ¿qué elementos, o mejor dicho proposiciones, consideramos para sustituir a F? En realidad cualquiera nos sirve porque es claro que toda contradicción p ∧ ¬p, q ∧ ¬q, (t Ÿ s) ∧ ¬(t Ÿ s), etc., es lógicamente equivalente a F. Pero el mismo enunciado del Teorema 1.17 nos indica que debería considerarse en particular a r ∧ ¬r. Por lo tanto haciendo F ≡ r ∧ ¬r tenemos entonces la nueva proposición ¬(p ∧ ¬q) ∨ (r ∧ ¬r), con lo cual sólo resta dar por terminada la demostración.

El Teorema 1.17 nos muestra que es posible, y cuando la demostración así lo requiera, agregar nuevas proposiciones haciendo uso de los elementos neutros y complementarios ya sea bajo conjunción o bajo disyunción. Pero el caso en que se tiene que una o más proposiciones pueden llegar a “desaparecer” también se puede presentar, y la demostración del siguiente Teorema nos ilustrará en ese sentido:

Teorema 1.18: Para cualesquiera proposiciones p, q en ℘ se tiene que

¬(p ∧ ¬q) ∧ (p ∨ q) ≡ q

34

Capítulo 1. Lógica Matemática

Demostración: ¬(p ∧ ¬q) ∧ (p ∨ q) ≡ ¬((p ∧ ¬q) ∨ ¬(p ∨ q)) ≡ ¬((p ∧ ¬q) ∨ (¬p ∧ ¬q)) ≡ ¬(¬q ∧ (p ∨ ¬p)) ≡ ¬(¬q ∧ V) ≡ ¬(¬q) ≡q

(Ley de D’Morgan) (Ley de D’Morgan sobre ¬(p ∨ q)) (Propiedad distributiva respecto a la Conjunción) (Existencia del Elemento Complementario en la Disyunción: V ≡ p ∨ ¬p) (Existencia del Elemento Neutro en la Conjunción) (Propiedad de la Doble Negación)

Teorema 1.19: Para cualesquiera proposiciones p y q en ℘ se tiene que

((p Ÿ q) ∧ p) Ÿ q ≡ V Demostración: ((p Ÿ q) ∧ p) Ÿ q ≡ ((¬p ∨ q) ∧ p) Ÿ q ≡ ((¬p ∧ p) ∨ (q ∧ p)) Ÿ q ≡ (F ∨ (q ∧ p)) Ÿ q ≡ (q ∧ p) Ÿ q ≡ ¬(q ∧ p) ∨ q ≡ (¬q ∨ ¬p) ∨ q ≡ V ∨ ¬p ≡V

(Propiedad del Condicional sobre p Ÿ q) (Propiedad Distributiva sobre (¬p ∨ q) ∧ p) (Existencia de los Elementos Complementarios para la Conjunción) (Existencia del Elemento Neutro en la Disyunción) (Propiedad del Condicional) (Ley de D’Morgan sobre ¬(q ∧ p)) (Existencia de los Elementos Complementarios para la Disyunción) (Existencia del Elemento Aniquilador para la Disyunción)

Teorema 1.20: Para cualesquiera proposiciones p y q en ℘ se tiene que

((p Ÿ q) ∧ ¬q) Ÿ ¬p ≡ V

35

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Demostración: ((p Ÿ q) ∧ ¬q) Ÿ ¬p ≡ ((¬p ∨ q) ∧ ¬q) Ÿ ¬p ≡ ((¬p ∧ ¬q) ∨ (q ∧ ¬q)) Ÿ ¬p ≡ ((¬p ∧ ¬q) ∨ F) Ÿ ¬p ≡ (¬p ∧ ¬q) Ÿ ¬p ≡ ¬(¬p ∧ ¬q) ∨ ¬p ≡ (p ∨ q) ∨ ¬p ≡V∨q ≡V

(Propiedad del Condicional sobre p Ÿ q) (Propiedad Distributiva sobre (¬p ∨ q) ∧ ¬q) (Existencia de los Elementos Complementarios en la Conjunción) (Existencia del Elemento Neutro en la Disyunción) (Propiedad del Condicional) (Ley de D’Morgan sobre ¬(¬p ∧ ¬q)) (Existencia de los Elementos Complementarios en la Disyunción) (Existencia del Elemento Aniquilador para la Disyunción)

Teorema 1.21: Para cualesquiera proposiciones p y q en ℘ se tiene que

(p ∧ q) Ÿ (p ∧ q) ≡ V Demostración: (p ∧ q) Ÿ (p ∧ q) ≡ ¬(p ∧ q) ∨ (p ∧ q) ≡V

(Propiedad del Condicional) (Existencia de los Elementos Complementarios en la Disyunción)

Teorema 1.22: Para cualesquiera proposiciones p y q en ℘ se tiene que

a) b)

36

(p ∧ q) Ÿ p ≡ V (p ∧ q) Ÿ q ≡ V

Capítulo 1. Lógica Matemática

Demostración:

a)

(p ∧ q) Ÿ p ≡ ¬(p ∧ q) ∨ p ≡ (¬p ∨ ¬q) ∨ p ≡ V ∨ ¬q ≡V

b)

(p ∧ q) Ÿ q ≡ ¬(p ∧ q) ∨ q ≡ (¬p ∨ ¬q) ∨ q ≡ V ∨ ¬p ≡V

(Propiedad del Condicional) (Ley de D’Morgan sobre ¬(p ∧ q)) (Existencia de los Elementos Complementarios en la Disyunción) (Existencia del Elemento Aniquilador para la Disyunción)

(Propiedad del Condicional) (Ley de D’Morgan sobre ¬(p ∧ q)) (Existencia de los Elementos Complementarios en la Disyunción) (Existencia del Elemento Aniquilador para la Disyunción)

Teorema 1.23: Para cualesquiera proposiciones p y q en ℘ se tiene que

a) b)

((p ∨ q) ∧ ¬p) Ÿ q ≡ V ((p ∨ q) ∧ ¬q) Ÿ p ≡ V

Demostración: a)

((p ∨ q) ∧ ¬p) Ÿ q ≡ ((p ∧ ¬p) ∨ (q ∧ ¬p)) Ÿ q ≡ (F ∨ (q ∧ ¬p)) Ÿ q ≡ (q ∧ ¬p) Ÿ q ≡ ¬(q ∧ ¬p) ∨ q ≡ (¬q ∨ p) ∨ q ≡V∨p ≡V

(Propiedad Distributiva sobre (p ∨ q) ∧ ¬p) (Existencia de los Elementos Complementarios en la Conjunción) (Existencia del Elemento Neutro en la Disyunción) (Propiedad del Condicional) (Ley de D’Morgan sobre ¬(q ∧ ¬p)) (Existencia de los Elementos Complementarios en la Disyunción) (Existencia del Elemento Aniquilador en la Disyunción)

37

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

b)

((p ∨ q) ∧ ¬q) Ÿ p ≡ ((p ∧ ¬q) ∨ (q ∧ ¬q)) Ÿ p ≡ (F ∨ (p ∧ ¬q)) Ÿ p ≡ (p ∧ ¬q) Ÿ p ≡ ¬(p ∧ ¬q) ∨ p ≡ (¬p ∨ q) ∨ p ≡V∨q ≡V

(Propiedad Distributiva sobre (p ∨ q) ∧ ¬q) (Existencia de los Elementos Complementarios en la Conjunción) (Existencia del Elemento Neutro en la Disyunción) (Propiedad del Condicional) (Ley de D’Morgan sobre ¬(p ∧ ¬q)) (Existencia de los Elementos Complementarios en la Disyunción) (Existencia del Elemento Aniquilador en la Disyunción)

Teorema 1.24: Para cualesquiera proposiciones p, q y r en ℘ se tiene que

((p Ÿ q) ∧ (q Ÿ r)) Ÿ (p Ÿ r) ≡ V

Demostración: ((p Ÿ q) ∧ (q Ÿ r)) Ÿ (p Ÿ r) ≡ ((¬p ∨ q) ∧ (q Ÿ r)) Ÿ (p Ÿ r) (Propiedad del Condicional sobre p Ÿ q) ≡ ((¬p ∨ q) ∧ (¬q ∨ r)) Ÿ (p Ÿ r) (Propiedad del Condicional sobre q Ÿ r) ≡ ¬((¬p ∨ q) ∧ (¬q ∨ r)) ∨ (p Ÿ r) (Propiedad del Condicional sobre ((¬p ∨ q) ∧ (¬q ∨ r)) Ÿ (p Ÿ r)) ≡ (¬(¬p ∨ q) ∨ ¬(¬q ∨ r)) ∨ (p Ÿ r) (Ley de D’Morgan sobre ¬((¬p ∨ q) ∧ (¬q ∨ r))) ≡ ((p ∧ ¬q) ∨ (q ∧ ¬r)) ∨ (p Ÿ r) (Ley de D’Morgan sobre ¬(¬p ∨ q) y sobre ¬(¬q ∨ r)) ≡ ((p ∧ ¬q) ∨ (q ∧ ¬r)) ∨ (¬p ∨ r) (Propiedad del Condicional) ≡ (p ∧ ¬q) ∨ ((q ∧ ¬r) ∨ (¬p ∨ r)) (Propiedad Asociativa de la Disyunción) ≡ (p ∧ ¬q) ∨ ((q ∨ (¬p ∨ r)) ∧ (¬r ∨ (¬p ∨ r))) (Propiedad Distributiva sobre (q ∧ ¬r) ∨ (¬p ∨ r)) ≡ (p ∧ ¬q) ∨ ((q ∨ (¬p ∨ r)) ∧ (V ∨ ¬p)) (Existencia de los Elementos Complementarios en la Disyunción: ¬r ∨ r) 38

Capítulo 1. Lógica Matemática

≡ (p ∧ ¬q) ∨ ((q ∨ (¬p ∨ r)) ∧ V) ≡ (p ∧ ¬q) ∨ (q ∨ (¬p ∨ r)) ≡ ((p ∧ ¬q) ∨ q) ∨ (¬p ∨ r) ≡ ((p ∨ q) ∧ (¬q ∨ q)) ∨ (¬p ∨ r) ≡ ((p ∨ q) ∧ V) ∨ (¬p ∨ r) ≡ (p ∨ q) ∨ (¬p ∨ r) ≡ (V ∨ q) ∨ r ≡V∨r ≡V

(Existencia del Elemento Aniquilador en la Disyunción) (Existencia del Elemento Neutro en la Conjunción) (Propiedad Asociativa de la Disyunción) (Propiedad Distributiva sobre (p ∧ ¬q) ∨ q) (Existencia de los Elementos Complementarios en la Disyunción) (Existencia del Elemento Neutro en la Conjunción) (Existencia de los Elementos Complementarios en la Disyunción) (Existencia del Elemento Aniquilador en la Disyunción) (Existencia del Elemento Aniquilador en la Disyunción)

Teorema 1.25: Para cualesquiera proposiciones p y q en ℘ se tiene que

a) p Ÿ (p ∨ q) ≡ V b) q Ÿ (p ∨ q) ≡ V Demostración: a)

p Ÿ (p ∨ q)

≡ ¬p ∨ (p ∨ q) ≡ (¬p ∨ p) ∨ q ≡V∨q ≡V

b)

q Ÿ (p ∨ q)

≡ ¬q ∨ (p ∨ q) ≡ (¬q ∨ q) ∨ p ≡V∨p ≡V

(Propiedad del Condicional) (Propiedad Asociativa de la Disyunción) (Existencia de los Elementos Inversos en la Disyunción) (Existencia del Elemento Aniquilador en la Disyunción) (Propiedad del Condicional) (Propiedad Asociativa de la Disyunción) (Existencia de los Elementos Inversos en la Disyunción) (Existencia del Elemento Aniquilador en la Disyunción)

39

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

1.4 Inferencia Lógica En la Sección anterior reconocimos al Álgebra de Proposiciones como un conjunto de herramientas que nos permiten verificar equivalencias lógicas sin tener que recurrir a las Tablas de Verdad. Sin embargo, estas herramientas están cimentadas, entiéndase demostradas, precisamente por el método basado en Tablas de Verdad. La ventaja en el uso del Álgebra Proposicional radica por un lado en que nos permite obtener demostraciones más concisas y por otro lado nos permite abordar casos en los cuales se consideran un número elevado de proposiciones, una situación que si bien es factible de ser atacada por las Tablas de Verdad, hemos visto que en la práctica no es recomendable. Hasta este punto hemos demostrado Teoremas de la forma p ≡ q. Se parte ya sea de p (o de q), se manipulan las expresiones y se llega entonces a q (o a p). Este tipo de enunciados nos presentan desde un principio el objetivo que debemos alcanzar. Pero en la práctica es común que contemos con una serie de proposiciones unidas mediante ciertos conectivos y deseamos saber que nueva información podemos obtener a partir de éstas. Por ejemplo, supongamos que las proposiciones G, E, K, L, M y B contienen afirmaciones referentes a propiedades de nuestro Universo. Y tenemos además que éstas se conjuntan en una sola proposición compuesta: (¬G Ÿ E) ∧ (E Ÿ K) ∧ ¬G ∧ (K Ÿ ¬L) ∧ (¬L Ÿ M) ∧ (M Ÿ B) La pregunta ahora es: ¿qué nueva información podemos obtener a partir de la proposición anterior? O en otros términos, ¿qué podemos Inferir a partir de tal proposición compuesta? La buena noticia es que algunos Teoremas que hemos probado en la Sección anterior nos servirán como modelos de Inferencia, o mejor dicho, Reglas de Inferencia. Toda Regla de Inferencia se dividirá en dos partes: 1) un conjunto de Premisas y 2) una Conclusión. Para aplicarla se deberá verificar primeramente que las proposiciones a considerar se ajusten perfectamente a la manera en la cual las premisas están especificadas. Si es el caso, entonces simplemente se observa la forma de la conclusión y se utilizan aquellas premisas adecuadas para ajustarla debidamente. Como veremos más adelante una Regla de Inferencia no es más que una Condicional p Ÿ q en la que la conclusión forma el consecuente q mientras que las premisas son proposiciones conectadas mediante conjunciones y con ello se forma el antecedente p. Ello quiere decir que p = p1 ∧ p2 ∧ … ∧ pm, donde p1, p2, …, pm son las premisas en consideración. Nótese que si una de las premisas es falsa entonces por las propiedades de la conjunción se tiene que p será también falsa. En consecuencia, por las propiedades de la Condicional, tendremos que p Ÿ q ≡ F. Ello quiere decir que para generar inferencias válidas se deben considerar siempre Premisas verdaderas. Ahora bien, formalmente diremos que una proposición de la forma p1 ∧ p2 ∧ … ∧ pm Ÿ q es una Regla de Inferencia si y sólo si p1 ∧ p2 ∧ … ∧ pm Ÿ q es una Tautología, i.e. p1 ∧ p2 ∧ … ∧ pm Ÿ q ≡ V. En el párrafo anterior mencionábamos que las premisas deben ser verdaderas para que la conclusión sea verdadera. Sin embargo, sabemos que lógicamente una proposición puede ser verdadera o falsa. Este puede verse con facilidad en la Tabla de Verdad de una Regla de Inferencia. En realidad la validez de una inferencia no depende de un estado

40

Capítulo 1. Lógica Matemática

particular en su Tabla de Verdad o de lo que afirmen sus premisas, sino de la forma que tenga la Regla de Inferencia en consideración. Mencionábamos previamente que para aplicar una Regla de Inferencia se deberá verificar primeramente que las proposiciones a considerar se ajusten perfectamente a la manera en la cual las premisas están especificadas: a ello nos referimos cuando relacionamos a la validez de una inferencia con la forma que tenga su correspondiente Regla de Inferencia. La existencia de premisas falsas de ninguna manera impide que una Regla de Inferencia pueda ser aplicada, pero es claro que la conclusión que se obtenga será definitivamente errónea. A final de cuentas, una Regla de Inferencia p1 ∧ p2 ∧ … ∧ pm Ÿ q debe ser una Tautología para caracterizarse como tal y debe ser vista como una “Regla de Sustitución”. A continuación describiremos algunas Reglas de Inferencia. Éstas en un principio fueron ya presentadas en la Sección anterior como proposiciones lógicamente equivalentes a V, es decir, son Tautologías. •

El Teorema 1.19 establece que ((p Ÿ q) ∧ p) Ÿ q ≡ V: Modus Ponens:

Premisa 1: p Ÿ q Premisa 2: p Conclusión: q •

Por el Teorema 1.20 tenemos que ((p Ÿ q) ∧ ¬q) Ÿ ¬p ≡ V: Modus Tollens:

Premisa 1: p Ÿ q Premisa 2: ¬q Conclusión: ¬p •

El Teorema 1.21 nos dice que (p ∧ q) Ÿ (p ∧ q) ≡ V: Regla de Adjunción:

Premisa 1: p Premisa 2: q Conclusión: p ∧ q

41

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



El Teorema 1.22 establece que (p ∧ q) Ÿ p ≡ V y que (p ∧ q) Ÿ q ≡ V: Reglas de Simplificación:

Premisa 1: p ∧ q Conclusión: p •

Premisa 1: p ∧ q Conclusión q

Por el Teorema 1.23 tenemos que ((p ∨ q) ∧ ¬p) Ÿ q ≡ V y ((p ∨ q) ∧ ¬q) Ÿ p ≡ V: Modus Tollendo Ponens:

Premisa 1: p ∨ q Premisa 2: ¬p Conclusión: q •

Premisa 1: p ∨ q Premisa 2: ¬q Conclusión p

El Teorema 1.24 nos dice que ((p Ÿ q) ∧ (q Ÿ r)) Ÿ (p Ÿ r) ≡ V: Ley del Silogismo Hipotético:

Premisa 1: p Ÿ q Premisa 2: q Ÿ r Conclusión: p Ÿ r •

El Teorema 1.25 establece que p Ÿ (p ∨ q) ≡ V y que q Ÿ (p ∨ q) ≡ V: Reglas de Adición:

Premisa 1: p Conclusión: p ∨ q

Premisa 1: q Conclusión: p ∨ q

Ahora aplicaremos las reglas anteriores a fin de hacer inferencias sobre algunas premisas. Por lo regular al aplicar reglas de inferencia simplemente se listan y enumeran las premisas sobreentendiendo que éstas se encuentran conectadas mediante conjunciones. La idea es poder identificar rápidamente que premisas se utilizarán. Al aplicar una Regla de Inferencia se debe mencionar la regla aplicada y las premisas involucradas.

42

Capítulo 1. Lógica Matemática

• •



Ejemplo: Sean las proposiciones: o p: Juan está en el partido de Basketball. o q: Juan está en la cancha. Las proposiciones p y q darán lugar a las siguientes premisas: o Si Juan está en el partido de Basketball entonces Juan está en la cancha. Premisa 1: p Ÿ q o Juan está en la cancha. Premisa 2: p Tenemos entonces: Premisa 1: p Ÿ q Premisa 2: p Conclusión: q



• •





(Modus Ponens Premisas 1y 2)

Es decir, mediante la regla Modus Ponens concluimos que “Juan está en la cancha”.

Ejemplo: Proposiciones: o p: El clima está helado. o q: El lago se helará. Premisas: o Si el clima no está helado entonces el lago no se helará. Premisa 1: ¬p Ÿ ¬q o El clima no está helado. Premisa 2: ¬p Inferencias: Premisa 1: ¬p Ÿ ¬q Premisa 2: ¬p Conclusión: ¬q (Modus Ponens Premisas 1 y 2) Se ha concluido entonces que “El lago no se helará”.

Ejemplo: A partir del siguiente conjunto de premisas concluir la proposición r. Premisa 1: Premisa 2: Premisa 3: Conclusión/Premisa 4: Conclusión:

(s ∧ u) Ÿ ¬t (s ∧ u) ¬t Ÿ r ¬t (Modus Ponens Premisas 1 y 2) r (Modus Ponens Premisas 3 y 4)

43

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

El ejemplo anterior nos pone de muestra que una proposición que resulte de la aplicación de una Regla de Inferencia, tal como sucedió con la aplicación del Modus Ponens sobre las premisas 1 y 2, también puede ser utilizada como una nueva Premisa que permita la aplicación de otra regla de inferencia si es que se requiere. En nuestro caso en cuestión la nueva premisa 4 fue fundamental para aplicar nuevamente el Modus Ponens y entonces obtener la conclusión deseada r.

• •





Ejemplo: Proposiciones: o p: El objeto astral tiene luz propia. o q: El objeto astral es una estrella. Premisas: o Si el objeto astral tiene luz propia entonces el objeto astral es una estrella. Premisa 1: p Ÿ q o El objeto astral no es una estrella. Premisa 2: ¬q Inferencias: Premisa 1: p Ÿ q Premisa 2: ¬q Conclusión: ¬p (Modus Tollens Premisas 1 y 2) Se ha concluido entonces que “El objeto astral no tiene luz propia”.

Ejemplo: Dadas las siguientes premisas concluir ¬(¬r). Premisa 1: Premisa 2: Premisa 3: Conclusión/Premisa 4: Conclusión/Premisa 5: Conclusión:

pŸq ¬q ¬p Ÿ r ¬p r ¬(¬r)

(Modus Tollens Premisas 1 y 2) (Modus Ponens Premisas 3 y 4) (Propiedad de la Doble Negación, Premisa 5)

Nuestro ejemplo anterior nos ha ilustrado en el sentido de que para llegar a una conclusión final por un lado pueden aplicarse diferentes reglas de inferencia, en este caso se utilizó primeramente un Modus Tollens y posteriormente un Modus Ponens. Por otro lado, también nos hace ver con claridad que es totalmente válido recurrir a nuestras propiedades 44

Capítulo 1. Lógica Matemática

del Álgebra de Proposiciones: se aplicó a la Premisa 5 la propiedad de Idempotencia de la Negación para obtener la conclusión deseada ¬(¬r). En realidad no debe sorprendernos ya que sabemos con anterioridad que para tal propiedad se tiene que r ≡ ¬(¬r).

Ejemplo: Para el siguiente par de premisas concluir a. Premisa 1: ¬a Ÿ ¬((b ∧ c) ∨ (b ∧ d)) Premisa 2: b ∧ (c ∨ d) Conclusión/Premisa 3: (b ∧ c) ∨ (b ∧ d) Conclusión/Premisa 4: ¬(¬(b ∧ c) ∨ (b ∧ d)) Conclusión/Premisa 5: ¬(¬a) Conclusión:

• •

a

(Propiedad Distributiva sobre la Premisa 2) (Propiedad de la Doble Negación, Premisa 3) (Modus Tollens Premisas 1 y 4) (Propiedad de la Doble Negación, Premisa 5)

Ejemplo: Proposiciones: o p: Jorge es adulto. o q: María es adolescente. Premisas: o Jorge es adulto. o María es adolescente.

Premisa 1: p Premisa 2: q





Inferencias: Premisa 1: p Premisa 2: q Conclusión: p ∧ q (Regla de Adjunción Premisas 1 y 2) Se ha concluido entonces que “Jorge es adulto y María es adolescente”.

45

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Ejemplo: Para el siguiente conjunto de premisas concluir (r ∨ s) ∧ ¬f.

• • •

Premisa 1: Premisa 2: Premisa 3: Premisa 4: Conclusión/Premisa 5:

c∨d (c ∨ d) Ÿ ¬f ¬f Ÿ (a ∧ ¬b) (a ∧ ¬b) Ÿ (r ∨ s) ¬f

Conclusión/Premisa 6:

a ∧ ¬b

Conclusión/Premisa 7:

r∨s

Conclusión:

(r ∨ s) ∧ ¬f

(Modus Ponens Premisas 1 y 2) (Modus Ponens Premisas 3 y 5) (Modus Ponens Premisas 4 y 6) (Regla de Adjunción Premisas 5 y 7)

Ejemplo: Proposiciones: o p: Jorge es adulto. o q: María es adolescente. Premisas: o Jorge es adulto y María es adolescente. Premisa 1: p ∧ q Por la aplicación de la Regla de Simplificación se pueden presentar dos posibles inferencias: Premisa 1: p ∧ q Premisa 1: p ∧ q Conclusión: p Conclusión: q

Ejemplo: Para el siguiente par de premisas concluir a ∧ c.

46

Premisa 1: Premisa 2: Conclusión/Premisa 3:

a ∧ ¬b ¬c Ÿ b ¬b

Conclusión/Premisa 4: Conclusión/Premisa 5:

¬(¬c) c

Conclusión/Premisa 6:

a

Conclusión:

a∧c

(Regla de Simplificación Premisa 1) (Modus Tollens Premisas 2 y 3) (Propiedad de la Doble Negación sobre Premisa 4) (Regla de Simplificación Premisa 1) (Regla de Adjunción Premisas 5 y 6)

Capítulo 1. Lógica Matemática

Ejemplo: Concluir ¬s con la premisas dadas.

• •





Premisa 1: Premisa 2: Premisa 3: Conclusión/Premisa 4: Conclusión/Premisa 5: Conclusión/Premisa 6:

(s ∨ g) Ÿ p ¬a pŸa ¬p ¬(s ∨ g) ¬s ∧ ¬g

Conclusión:

¬s

(Modus Tollens Premisas 2 y 3) (Modus Tollens Premisas 1 y 4) (Ley de D’Morgan sobre la Premisa 5) (Regla de Simplificación Premisa 6)

Ejemplo: Proposiciones: o p: La sustancia contiene hidrógeno. o q: La sustancia contiene oxígeno. Premisas: o La sustancia contiene hidrógeno o la sustancia contiene oxígeno. Premisa 1: p ∨ q o La sustancia no contiene hidrógeno. Premisa 2: ¬p Inferencias: Premisa 1: p∨q Premisa 2: ¬p Conclusión: q (Modus Tollendo Ponens Premisas 1 y 2) Se ha concluido entonces que “La sustancia contiene oxígeno”.

Ejemplo: Concluir p con la premisas dadas. Premisa 1: Premisa 2: Premisa 3: Conclusión/Premisa 4:

t Ÿ (p ∨ q) ¬(¬t) ¬q t

Conclusión/Premisa 5: Conclusión:

p∨q p

(Propiedad de la Doble Negación sobre Premisa 2) (Modus Ponens Premisas 1 y 4) (Modus Tollendo Ponens Premisas 3 y 5)

47

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Ejemplo: concluir r con las premisas dadas. Premisa 1: Premisa 2: Premisa 3: Conclusión/Premisa 4: Conclusión/Premisa 5: Conclusión/Premisa 6: Conclusión:









¬q ∨ s ¬s ¬(r ∧ s) Ÿ q ¬q (Modus Tollendo Ponens Premisas 1 y 2) ¬(¬(r ∧ s)) (Modus Tollens Premisas 3 y 4) r∧s (Propiedad de la Doble Negación sobre Premisa 5) r (Regla de Simplificación sobre Premisa 6)

Ejemplo: Proposiciones: o p: Está lloviendo. o q: El cielo está nublado. o r: El clima está helado. Premisas: o Si está lloviendo entonces el cielo está nublado. Premisa 1: p Ÿ q o Si el cielo está nublado entonces el clima está helado. Premisa 2: q Ÿ r Inferencias: Premisa 1: pŸq Premisa 2: qŸr Conclusión: p Ÿ r (Ley del Silogismo Hipotético Premisas 1 y 2) Se ha concluido entonces que “Si está lloviendo entonces el clima está helado”.

Ejemplo: concluir ¬r ∨ ¬n con las premisas dadas.

48

Premisa 1: Premisa 2: Premisa 3: Conclusión/Premisa 4:

r Ÿ ¬s ¬s Ÿ q q Ÿ ¬n rŸq

Conclusión/Premisa 5:

r Ÿ ¬n

Conclusión:

¬r ∨ ¬n

(Ley del Silogismo Hipotético Premisas 1 y 2) (Ley del Silogismo Hipotético Premisas 3 y 4) (Propiedad del Condicional Premisa 5)

Capítulo 1. Lógica Matemática

Ejemplo: concluir ¬g Ÿ b con las premisas dadas. Premisa 1: Premisa 2: Premisa 3: Premisa 4: Premisa 5: Conclusión/Premisa 6:

¬g Ÿ e eŸk k Ÿ ¬l ¬l Ÿ m mŸb ¬g Ÿ k

Conclusión/Premisa 7:

¬g Ÿ ¬l

Conclusión/Premisa 8:

¬g Ÿ m

Conclusión

¬g Ÿ b

(Ley del Silogismo Hipotético Premisas 1 y 2) (Ley del Silogismo Hipotético Premisas 3 y 6) (Ley del Silogismo Hipotético Premisas 4 y 7) (Ley del Silogismo Hipotético Premisas 5 y 8)

1.5 Cuantificadores Hasta ahora se han considerado proposiciones de las que se sabe o asume su valor de verdad o falsedad. Sin embargo, en ocasiones se requiere considerar expresiones llamadas Proposiciones Abiertas cuyo valor de verdad o falsedad depende de una sustitución. Por ejemplo, considérese a la siguiente proposición: x estudia Ingeniería en Computación A esta proposición, y tal como hemos hecho antes, se le puede asignar una letra para denotarla. Por ejemplo, usemos la letra p. Pero dado que p requiere de un valor específico para x a fin de poder ser evaluada, entonces indicaremos que la proposición requiere se le pase un valor de entrada x. De tal forma que tenemos ahora: p(x): x estudia Ingeniería en Computación A x se le llama Variable Individual. El valor de p(x) depende de qué o quién sea x. Los valores específicos que puede tomar una variable individual son llamados Constantes Individuales. Tenemos entonces que una Proposición Abierta es una expresión la cual se convierte en una proposición cuando sus variables individuales se sustituyen por constantes individuales. Por ejemplo, retomando nuestro ejemplo p(x): x estudia Ingeniería en Computación, asumamos que x puede tomar el valor Juan o el valor Edna. Sin embargo nosotros sabemos de antemano que Juan efectivamente estudia Ingeniería en Computación y que por otro lado Edna estudia Medicina, entonces tendremos las proposiciones y sus correspondientes valores: • p(Juan): Juan estudia Ingeniería en Computación (V) • p(Edna): Edna estudia Ingeniería en Computación (F) 49

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

A las proposiciones abiertas también se les llamará Funciones Proposicionales. Cuando una función proposicional espera n argumentos de entrada entonces se dice que es de Aridad n. Es claro que nuestra primera función proposicional, p(x): x estudia Ingeniería en Computación, tiene aridad 1. Por ejemplo, la siguiente sería una función proposicional de aridad 3: q(x, y, z): (x + 3) ⋅

y =z 2

En este caso debe ser intuitivo que las variables individuales x, y, z deberán ser sustituidas por números. Si los valores asignados a las variables individuales x, y al ser evaluados en el lado izquierdo de la ecuación proporcionan un valor igual al de la variable individual z entonces las proposiciones resultantes serán verdaderas: 4 (V) • q(3, 4, 12): (3 + 3) ⋅ = 12 2 20 = -10 (V) • q(-4, 20, -10): (-4 + 3) ⋅ 2 2 (F) • q(5, 2, -3): (5 + 3) ⋅ = -3 2 Inicialmente recurrimos a la intuición para determinar con que constantes individuales podían ser sustituidas nuestras variables. Sin embargo, una falla en nuestra intuición podría indicarnos evaluar a la proposición

q(Juan, Carlos, María) = (Juan + 3) ⋅

Carlos = María 2

lo cual no tendría sentido (también depende del contexto en que nuestras proposiciones están inmersas). En los siguientes párrafos se introducirá notación a fin de que se especifiquen de manera formal los valores que pueden tomar las variables individuales en una función proposicional.

Una Proposición General se obtiene al anteponer un Cuantificador a una función proposicional. La expresión “Existe” será nuestro primer cuantificador, también llamado Cuantificador Existencial, al cual se le denotará matemáticamente como ∃. Por ejemplo, reconsideremos a la expresión que da a lugar a nuestra función proposicional p(x):

x estudia Ingeniería en Computación Al anteponerle el cuantificador existencial se tendrá ahora la proposición general: (∃x ∈ ESTD)(x estudia Ingeniería en Computación)

50

Capítulo 1. Lógica Matemática

La primera parte de la proposición general está dada por (∃x ∈ ESTD) Ésta indica de qué conjunto x puede tomar sus posibles valores. El símbolo ∈ se interpreta como “pertenece a” y está siempre seguido de un conjunto, en este caso es un conjunto que llamamos ESTD. Formalmente el conjunto ESTD contiene a todas las constantes individuales para x. Por el contexto de la función proposicional original sabemos que ESTD deberá contener nombres de estudiantes: al menos sabemos, por los párrafos anteriores, que Juan y Edna están en ESTD. La expresión (∃x ∈ ESTD) se lee entonces como “existe un x en el conjunto ESTD”. La segunda parte de la proposición general está dada por (x estudia Ingeniería en Computación) Que no es más que la expresión de nuestra función proposicional original. Las dos partes, como ya comentamos antes, forman una proposición general con cuantificador existencial. Entonces nuestra proposición general deberá leerse como:

Existe un x en el conjunto ESTD tal que x estudia Ingeniería en Computación Sabemos de antemano que p(x): x estudia Ingeniería en Computación. Entonces la proposición general anterior puede ser reescrita como (∃x ∈ ESTD)(p(x)) Ahora tenemos que una proposición general con cuantificador existencial es Verdadera cuando y sólo cuando encontramos una instancia de sustitución en la función proposicional que hace que la proposición resultante sea verdadera. Tal instancia de sustitución deberá ser tomada del conjunto que contiene a todas las constantes individuales. Por ejemplo, nuestra proposición general del ejemplo anterior, (∃x ∈ ESTD)(P(x)) se hará Verdadera al asignar a x un estudiante que efectivamente estudie Ingeniería en Computación. Por ejemplo, sabemos que Juan cumple con lo anterior. Para asignar el valor de verdad o falsedad final se requiere, como ya se comentó con anterioridad, evaluar a P(Juan). Sabemos que P(Juan) ≡ V por lo tanto tenemos para nuestra proposición que (∃x ∈ ESTD)(p(x)) ≡ V Nótese que pueden existir sustituciones para x en donde se considera a un estudiante en el conjunto ESTD que NO estudia Ingeniería en Computación. Por ejemplo, sabemos que Edna estudia medicina, P(Edna) ≡ F. Sin embargo, deberá ser claro que (∃x ∈ ESTD)(P(x)) es verdadera gracias a que encontramos al menos a un valor para x que hace que la función proposicional P(x) genere una proposición verdadera, independientemente de que existan valores de x que hacen que la función proposicional P(x) genere proposiciones falsas.

51

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Retomando nuestra función proposicional q(x, y, z): (x + 3) ⋅

y = z tenemos ahora 2

a la proposición general con cuantificador existencial:

y § · (∃x,y,z ∈ \ ) ¨ ( x + 3) ⋅ = z ¸ 2 © ¹ La expresión (∃x,y,z ∈ \ ) deberá leerse como “Existen x, y, z en el conjunto de los números reales”. La proposición general se lee por completo como:

Existen x, y, z en el conjunto de los números reales tales que ( x + 3) ⋅

y =z. 2

Sabemos que al menos con los valores 3, 4, 12 para x, y, z respectivamente se cumple que y y § · ( x + 3) ⋅ = z ≡ V. Por lo tanto, se tiene que (∃x,y,z ∈ \ ) ¨ ( x + 3) ⋅ = z ¸ ≡ V. 2 2 © ¹

Analicemos otros ejemplos. Considérense las siguientes proposicionales generales. Encontremos un valor de x que hace que éstas verdaderas. Recuérdese que ` denota al conjunto de los números naturales: 1, 2, 3, 4, 5, …



(∃x ∈ ` )(x < 3) o Haciendo x = 1 o bien x = 2 se tiene que (∃x ∈ ` )(x < 3) ≡ V.



(∃x ∈ ` )(x es un número impar) o Cualquier sustitución de x por 2, 4, 6, 8, … sirve para verificar que la proposición general es verdadera.



(∃x ∈ ` )(x es múltiplo de 5) o Cualquier sustitución de x por 5, 10, 15, 20, … sirve para verificar que (∃x ∈ ` )(x es múltiplo de 5) ≡ V.



(∃x ∈ ` )(1 < x < 3) o En este caso es claro que existe un único posible valor para x, 2, tal que la proposición general es verdadera.

52

Capítulo 1. Lógica Matemática



(∃x ∈ ` )(x2 – 4x + 4 = 0) o Esta proposición general resulta interesante porque finalmente tenemos una conexión directa entre la lógica matemática y el álgebra de los números reales. Nótese que se trata de encontrar un valor de x que al sustituir en el lado izquierdo de la ecuación proporcione la solución 0, en el lado derecho. Dar solución a la ecuación es equivalente a establecer que la proposición general (∃x ∈ ` )(x2 – 4x + 4 = 0) es verdadera. En este caso nos apoyamos en la bien conocida fórmula general para la solución de ecuaciones de segundo grado para determinar la existencia de x: x=

−(−4) ± (−4) 2 − 4(1)(4) 4 ± 16 − 16 = =2 2(1) 2

Se tiene entonces que la ecuación x2 – 4x + 4 = 0 tiene solución única x = 2. Nótese que efectivamente 2 es un número natural tal como nos lo requiere cuantificador existencial. Por lo tanto tenemos que (∃x ∈ ` )(x2 – 4x + 4 = 0) ≡ V A las expresiones “Para todo” o “Para cualesquiera” se les llama Cuantificador Universal el cual se denota como ∀. Por ejemplo, supóngase que tenemos a la función proposicional f(x): 1 ≤ x. Sea el conjunto NUM aquel que contiene a los números naturales del 1 al 5. Entonces usando a f(x) y a NUM podemos formar a la proposición general (∀x ∈ NUM)(1 ≤ x) O de manera equivalente, entendiendo que f(x): 1 ≤ x: (∀x ∈ NUM)(f(x)) Ésta se lee como “Para todo x en el conjunto NUM se cumple que 1 ≤ x” O también como “Para cualesquiera x en el conjunto NUM se cumple que 1 ≤ x”

Una proposición general con cuantificador universal es verdadera cuando y sólo cuando toda instancia de sustitución en la función proposicional hace que la proposición resultante sea verdadera. Tales instancias de sustitución deberán ser tomadas del conjunto que contiene a todas las constantes individuales. Retomemos nuestra proposición general

53

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

(∀x ∈ NUM)(1 ≤ x). Veamos si efectivamente es verdadera. Para ello tomamos en cuenta que las posibles instancias de sustitución para x están dadas por los valores 1, 2, 3, 4 y 5. Entonces se evaluará uno por uno cada posible valor de x en la función proposicional:

• • • • •

x = 1, f(1): 1 ≤ 1 x = 2, f(2): 1 ≤ 2 x = 3, f(3): 1 ≤ 3 x = 4, f(4): 1 ≤ 4 x = 5, f(5): 1 ≤ 5

(V) (V) (V) (V) (V)

Nótese que con los 5 valores que puede tomar x hemos obtenido siempre una proposición que es verdadera. Por lo tanto tenemos para nuestra proposición general con cuantificador universal que (∀x ∈ NUM)(1 ≤ x) ≡ V. Un punto interesante que puede surgir al determinar la veracidad de una proposición general con cuantificador universal es cuando los conjuntos que contienen a las constantes individuales son de tamaño infinito. Pensemos por ejemplo en el conjunto de los números reales \ , el conjunto de los números naturales ` o inclusive en nuestro conjunto de proposiciones ℘. En estos casos resulta sumamente infactible verificar uno a uno cada posible sustitución. Es por ello que se recurre a otro tipo de argumentos y propiedades a fin de validar a las correspondientes proposiciones generales. Por ejemplo: ¿por qué es verdadera la siguiente proposición general? (∀x ∈ \ )(x2 ≥ 0) En este caso debemos recurrir al hecho de que todo número real, ya sea positivo, negativo o cero, al ser elevado al cuadrado siempre se obtiene un número positivo o el cero. Por lo tanto, para cualesquiera x en los reales se cumple que x2 ≥ 0. Es decir, tuvimos que recurrir a una propiedad presente en el Álgebra de los Números Reales.

Consideremos ahora a la siguiente proposición general: (∀p, q ∈ ℘)(p Ÿ q ≡ ¬p ∨ q) Nótese que esta proposición es aquella presentada originalmente en el Teorema 1.3, simplemente que se ha reemplazado la expresión “Para cualesquiera proposiciones p, q en ℘” por la notación formal (∀p, q ∈ ℘). Ahora bien, sabemos que ℘ tiene un conjunto infinito de proposiciones. Pero tal como establecimos en su momento, aunque todas estas proposiciones pueden afirmar cosas diferentes en realidad todas tienen en común la propiedad de que pueden ser verdaderas o falsas. Y esta es la propiedad que se utiliza para verificar, mediante una Tabla de Verdad, que efectivamente cualesquiera dos proposiciones p y q, independientemente de lo que afirmen, satisfacen p Ÿ q ≡ ¬p ∨ q. Por lo tanto se tiene que, y tal como se observó en su momento, (∀p, q ∈ ℘)(p Ÿ q ≡ ¬p ∨ q) ≡ V.

54

Capítulo 1. Lógica Matemática

El párrafo anterior nos ha ilustrado en el sentido de que los cuantificadores existencial y universal nos permitirán expresar a nuestros Teoremas antes presentados de manera estandarizada desde el punto de vista de notación Matemática. Por lo tanto ahora tendremos: • Teorema 1.1: (∀p, q, r ∈ ℘)((p ∨ q) ∨ r ≡ p ∨ (q ∨ r)) • Teorema 1.2: (∀p ∈ ℘)(¬(¬p) ≡ p) • Teorema 1.3: (∀p, q ∈ ℘)(p Ÿ q ≡ ¬p ∨ q) • Teorema 1.4: (∀p, q ∈ ℘)((p ∧ q) Ÿ p ≡ V) • Teorema 1.5: (∀p ∈ ℘)(p ∨ ¬p ≡ V) • Teorema 1.6: (∀p ∈ ℘)(p ∧ ¬p ≡ F) • Teorema 1.7: (∀p, q ∈ ℘)(¬(p Ÿ q) ≡ (p ∧ ¬q)) • Teorema 1.8: (∀p, q ∈ ℘)(p Ÿ q ≡ ¬q Ÿ ¬p) • Teorema 1.9: (∀p, q ∈ ℘)(p ∨ q ≡ q ∨ p) • Teorema 1.10: (∀p, q, r ∈ ℘)(p ∧ (q ∨ r) ≡ (p ∧ q) ∨ (p ∧ r)) • Teorema 1.11: (∀p, q ∈ ℘)(¬(p ∨ q) ≡ ¬p ∧ ¬q) • Teorema 1.12: (∀p ∈ ℘)(p ∧ V ≡ p) • Teorema 1.13: (∃x ∈ \ )(3x + 10 = -4) • Teorema 1.14: (∃x ∈ ^ )(x2 + 5 = 2) • Teorema 1.15: (∀p, q, r ∈ ℘)(p Ÿ (q ∨ r) ≡ (p ∧ ¬q) Ÿ r) • Teorema 1.16: (∀p, q, r ∈ ℘)(p Ÿ (q ∧ r) ≡ (p Ÿ q) ∧ (p Ÿ r)) • Teorema 1.18: (∀p, q ∈ ℘)(¬(p ∧ ¬q) ∧ (p ∨ q) ≡ q) • Teorema 1.19: (∀p, q ∈ ℘)(((p Ÿ q) ∧ p) Ÿ q ≡ V) • Teorema 1.20: (∀p, q ∈ ℘)(((p Ÿ q) ∧ ¬q) Ÿ ¬p ≡ V) • Teorema 1.21: (∀p, q ∈ ℘)((p ∧ q) Ÿ (p ∧ q) ≡ V) • Teorema 1.22: a) (∀p, q ∈ ℘)((p ∧ q) Ÿ p ≡ V) b) (∀p, q ∈ ℘)((p ∧ q) Ÿ q ≡ V) • Teorema 1.23: a) (∀p, q ∈ ℘)(((p ∨ q) ∧ ¬p) Ÿ q ≡ V) b) (∀p, q ∈ ℘)(((p ∨ q) ∧ ¬q) Ÿ p ≡ V) • Teorema 1.24: (∀p, q, r ∈ ℘)(((p Ÿ q) ∧ (q Ÿ r)) Ÿ (p Ÿ r) ≡ V) • Teorema 1.25: a) (∀p, q ∈ ℘)(p Ÿ (p ∨ q) ≡ V) b) (∀p, q ∈ ℘)(q Ÿ (p ∨ q) ≡ V) Mención especial nos merece el Teorema 1.17. Tenemos que éste quedará expresado como una proposición general en la cual aparecen ambos cuantificadores: (∀p, q ∈ ℘)(∃r ∈ ℘)(p Ÿ q ≡ (p ∧ ¬q) Ÿ (r ∧ ¬r)) El enunciado debería leerse como “Para cualesquiera p, q en el conjunto ℘ existe un r en el conjunto ℘ tal que p Ÿ q ≡ (p ∧ ¬q) Ÿ (r ∧ ¬r)”. Los cuantificadores se interpretan de forma que dados un par de proposiciones p y q debe elegirse una proposición r que permita que se satisfaga p Ÿ q ≡ (p ∧ ¬q) Ÿ (r ∧ ¬r). Ello quiere decir que la elección de r va

55

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

directamente de la mano respecto a quienes sean las proposiciones p y q en consideración. Tenemos conocimiento, por la demostración del Teorema que en realidad r es cualquier proposición ya que lo que nos interesa es considerar el término r ∧ ¬r, el cual, independientemente de lo que exprese r, sabemos es siempre una Contradicción. Este último punto no causa conflicto con lo establecido respecto a la interpretación que se debe dar cuando los dos cuantificadores aparecen en la misma proposición general ya que al asegurar que se puede elegir a cualquier proposición r implica que también se asegura que existe r. Supongamos que contamos con un conjunto U que contiene a los números 2, 3, 6 y 9. Consideremos a la siguiente proposición general con cuantificador universal: (∀x ∈ U)(x es un múltiplo de 3) Determinemos si esta proposición efectivamente es verdadera: • x = 2, 2 es múltiplo de 3 (F) • x = 3, 3 es múltiplo de 3 (V) • x = 6, 6 es múltiplo de 3 (V) • x = 9, 9 es múltiplo de 3 (V) Todas las instancias de sustitución para x se cumplen excepto cuando x = 2. Para que nuestra proposición fuese caracterizada como verdadera se deben satisfacer todas las instancias de sustitución. Por lo tanto se tiene que (∀x ∈ U)(x es un múltiplo de 3) es falsa. Ahora considere la siguiente proposición general con cuantificador existencial: (∃x ∈ U)(x no es un múltiplo de 3) Determinemos su veracidad o falsedad: • x = 2, 2 no es múltiplo de 3 (V) • x = 3, 3 no es múltiplo de 3 (F) • x = 6, 6 no es múltiplo de 3 (F) • x = 9, 9 no es múltiplo de 3 (F) Dado que hemos identificado una instancia de sustitución que hace que la función proposicional “x no es un múltiplo de 3” genere una proposición verdadera es que entonces decimos que (∃x ∈ U)(x no es un múltiplo de 3) es verdadera. Véase que de hecho la función proposicional utilizada en la proposición con cuantificador existencial es la negación de la función presente en la proposición con cuantificador universal:

¬(x es un múltiplo de 3) ≡ x no es un múltiplo de 3 También obsérvense los valores de verdad o falsedad obtenidos en cada sustitución de x para ambas proposiciones generales. Es claro que se obtienen valores complementarios debido a que en el caso del cuantificador existencial se está utilizando la negación de la función proposicional “x es un múltiplo de 3”. 56

Capítulo 1. Lógica Matemática

Dado que (∀x ∈ U)(x es un múltiplo de 3) ≡ F es perfectamente válido considerar que ¬(∀x ∈ U)(x es un múltiplo de 3) ≡ V. Esta última proposición se leería como: “No es cierto que para todo x en el conjunto U se cumple que x es un múltiplo de 3” La parte que en principio nos interesa de este enunciado es “No es cierto que para todo x en el conjunto U”. Esta debería entenderse como el hecho de que Existe un x en el conjunto U que hace que la función proposicional “x es un múltiplo de 3” genere una proposición falsa. Ello quiere decir que la negación de nuestro cuantificador universal da a lugar al cuantificador existencial. Si la proposición original era verdadera, entonces aquella que se obtenga deberá ser falsa, o por otro lado, si la proposición original era falsa, entonces aquella que se obtenga deberá ser verdadera. Esta propiedad se asegura al aplicar también la negación a la función proposicional. En nuestro ejemplo ya sabemos que la negación de “x es un múltiplo de 3” es “x no es un múltiplo de 3”. Por lo tanto podemos establecer que

¬(∀x ∈ U)(x es un múltiplo de 3) ≡ (∃x ∈ U)(x no es un múltiplo de 3) De manera general, podemos establecer entonces el mecanismo para la negación de proposiciones generales con cuantificadores universal o existencial. Sea p(x) una función proposicional. Sea U un conjunto que contiene a todas las posibles constantes individuales con que puede ser sustituida x. La Negación de la Proposición General con Cuantificador Universal (∀x ∈ U)(p(x)) es la Proposición General con Cuantificador Existencial (∃x ∈ U)(¬(p(x)). De manera que:

• •

Si (∀x ∈ U)(p(x)) es verdadera entonces (∃x ∈ U)(¬(p(x)) es falsa. Si (∀x ∈ U)(p(x)) es falsa entonces (∃x ∈ U)(¬(p(x)) es verdadera

De manera formal:

¬(∀x ∈ U)(p(x)) ≡ (∃x ∈ U)(¬p(x)) La Negación de la Proposición General con Cuantificador Existencial (∃x ∈ U)(p(x)) es la Proposición General con Cuantificador Universal (∀x ∈ U)(¬(p(x)). De manera que:

• •

Si (∃x ∈ U)(p(x)) es verdadera entonces (∀x ∈ U)(¬(p(x)) es falsa. Si (∃x ∈ U)(p(x)) es falsa entonces (∀x ∈ U)(¬(p(x)) es verdadera

Formalizando:

¬(∃x ∈ U)(p(x)) ≡ (∀x ∈ U)(¬p(x))

57

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Por ejemplo, al inicio de esta sección consideramos a nuestra proposición general

y § · (∃x,y,z ∈ \ ) ¨ ( x + 3) ⋅ = z ¸ 2 © ¹ La cual sabemos es Verdadera gracias a la terna (3, 4, 12). Al negar a nuestra función obtenemos:

y y § · § · ¬(∃x,y,z ∈ \ ) ¨ ( x + 3) ⋅ = z ¸ ≡ (∀x,y,z ∈ \ ) ¨ ( x + 3) ⋅ ≠ z ¸ 2 2 © ¹ © ¹ Por las definiciones antes dadas tenemos entonces que la proposición general y § · (∀x,y,z ∈ \ ) ¨ ( x + 3) ⋅ ≠ z ¸ es falsa. 2 © ¹

A continuación se presentarán algunos otros ejemplos. Obtengamos las negaciones de las siguientes proposiciones generales:



(∀x ∈ ` )(1 ≤ x)

¬(∀x ∈ ` )(1 ≤ x) ≡ (∃x ∈ ` )(¬(1 ≤ x)) La negación de 1 ≤ x viene dada al razonar que todo x que no sea mayor o igual a 1 tiene que ser estrictamente menor que 1. Por lo tanto se tiene que ¬(1 ≤ x) ≡ 1 > x. Entonces:

¬(∀x ∈ ` )(1 ≤ x) ≡ (∃x ∈ ` )(1 > x) Ahora bien, nótese que x debe ser un número natural. Si se busca, en la proposición general con cuantificar existencial, que 1 > x entonces nos encontramos con que no existe tal número natural x con la propiedad de ser estrictamente menor a 1 (el cero no es un número natural). Por lo tanto la proposición (∃x ∈ ` )(1 > x) es falsa y en consecuencia la proposición (∀x ∈ ` )(1 ≤ x) es verdadera.



(∀x ∈ ` )(x2 ≥ 1)

¬(∀x ∈ ` )(x2 ≥ 1) ≡ (∃x ∈ ` )(x2 < 1) Para entender que x2 < 1 es la negación de x2 ≥ 1 se sigue un razonamiento similar al presentado con el ejemplo anterior. De nueva cuenta tenemos que no existe un número natural x con la propiedad de que su cuadrado sea estrictamente menor a 1. Entonces (∃x ∈ ` )(x2 < 1) es falsa y en consecuencia (∀x ∈ ` )(x2 ≥ 1) es verdadera.

58

Capítulo 1. Lógica Matemática



(∃x ∈ ` )(x es múltiplo de 5)

¬(∃x ∈ ` )(x es múltiplo de 5) ≡ (∀x ∈ ` )(x no es múltiplo de 5) Es claro que basta con tomar, por ejemplo, x = 10 para establecer que (∃x ∈ ` )(x es múltiplo de 5) es verdadera. Ello implica que su negación, (∀x ∈ ` )(x no es múltiplo de 5), es falsa.



(∃x ∈ ` )(1 < x < 3)

¬(∃x ∈ ` )(1 < x < 3) ≡ (∀x ∈ ` )(¬(1 < x < 3)) Veamos como abordar la negación de la función proposicional 1 < x < 3. Desde un punto de vista proposicional, y también por propiedades de las desigualdades en los reales, tenemos que 1 < x < 3 es equivalente a (1 < x) ∧ (x < 3). Evidentemente ¬(1 < x < 3) ≡ ¬((1 < x) ∧ (x < 3)). Por una aplicación de Ley de D’Morgan obtenemos que ¬((1 < x) ∧ (x < 3)) ≡ ¬(1 < x) ∨ ¬(x < 3). Todos aquellos valores de x que no cumplan con 1 < x tendrán que ser 1 o bien ser estrictamente menores a 1. Por otro lado, todos los valores de x que no satisfagan x < 3 tendrán que ser 3 o ser estrictamente mayores a 3. Entonces:

¬(1 < x < 3) ≡ ¬(1 < x) ∨ ¬(x < 3) ≡ (1 ≥ x) ∨ (x ≥ 3) Se tiene entonces que

¬(∃x ∈ ` )(1 < x < 3) ≡ (∀x ∈ ` )((1 ≥ x) ∨ (x ≥ 3)) Claramente el número natural x = 2 satisface la desigualdad 1 < x < 3. Por lo tanto nuestra proposición (∃x ∈ ` )(1 < x < 3) es verdadera. Por consecuencia la proposición (∀x ∈ ` )((1 ≥ x) ∨ (x ≥ 3)) es falsa.



(∀x ∈ ` )(x > 5 Ÿ x > 2)

¬(∀x ∈ ` )(x > 5 Ÿ x > 2) ≡ (∃x ∈ ` )((x > 5) ∧ (x ≤ 2)) La negación de la función proposicional x > 5 Ÿ x > 2 viene dada de la siguiente manera:

¬(x > 5 Ÿ x > 2) ≡ ≡ ≡

¬(¬(x > 5) ∨ (x > 2)) (Propiedad del Condicional) ¬((x ≤ 5) ∨ (x > 2)) (x no satisface x > 5 si es igual a 5 o bien si es estrictamente menor a 5) ¬(x ≤ 5) ∧ ¬(x > 2) (Ley de D’Morgan)

59

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

≡ ≡

(x > 5) ∧ ¬(x > 2) (x > 5) ∧ (x ≤ 2)

(Dado que ¬(x ≤ 5) ≡ (x > 5)) (x no satisface x > 2 si es igual a 2 o bien si es estrictamente menor a 2)

Al observar la función proposicional para la proposición general con cuantificador existencial se tiene que se buscará un natural x tal que éste sea estrictamente mayor a 5 y a la vez sea menor o igual a 2. Evidentemente x no existe. Por lo tanto (∃x ∈ ` )((x > 5) ∧ (x ≤ 2)) es falsa y entonces (∀x ∈ ` )(x > 5 Ÿ x > 2) es verdadera.



(∀x ∈ \ )(∃n ∈ ` )(x < n) Esta proposición claramente cuenta con una combinación de cuantificador universal y cuantificador existencial. El procedimiento para negarla es simplemente negar cada cuantificador y negar la función proposicional x < n:

¬(∀x ∈ \ )(∃n ∈ ` )(x < n) ≡ (∃x ∈ \ )(∀n ∈ ` )(x ≥ n) La forma en que se determinó que x ≥ n es la negación de x < n ya fue abordaba en los ejemplos anteriores. La proposición general con cuantificador universal nos dice que para cualquier número real x existe un número natural n tal que x es estrictamente menor a n. La elección de n depende del real x que se esté considerando. Una opción es simplemente sumar una unidad a x. Pero nótese que x + 1 no es necesariamente un natural y tampoco un número positivo, por ejemplo si x = -3.1416 entonces x + 1 = -2.1416. Aplicaremos la función Valor Absoluto a x + 1 y posteriormente la Función Piso (floor). El piso de un número m, denotado por ¬« m ¼» , será aquel entero de mayor valor que sea menor o igual a m. El piso de un número entero es el mismo número entero. De esta forma, dado un número real x obtendremos su correspondiente natural n:

n = «¬ x + 1 »¼

Nótese que la expresión está bien definida para cualquier número real x. Por lo tanto tenemos verificado que para todo real x existe un natural n tal que x < n. Ello implica que (∀x ∈ \ )(∃n ∈ ` )(x < n) es verdadera y por lo tanto (∃x ∈ \ )(∀n ∈ ` )(x ≥ n) es falsa.

60

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

2. Teoría de Conjuntos

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

62

Capítulo 2. Teoría de Conjuntos

2.1 Definiciones Se dice que un Conjunto es una colección de distintos objetos los cuales son llamados los Elementos del conjunto. En la Sección 1.5 ya habíamos trabajado con la noción de conjunto al considerarlo como aquel que contenía a las posibles constantes individuales con las que podía ser sustituida una variable en una función proposicional. Considérese un conjunto A y un objeto b. Si b está contenido en el conjunto A entonces se dice que b Pertenece al conjunto A y se denota como b ∈ A. Nótese que de hecho está notación también ya la habíamos introducido en la Sección 1.5. Si un objeto b no está contenido en el conjunto A entonces se dice que b No Pertenece al Conjunto A y se denota como b ∉ A. Si un conjunto A tiene al menos un elemento, entonces para presentar a A y su contenido simplemente se lista uno a uno sus elementos separados por comas. Tal lista estará encerrada por los símbolos { y }. A esta forma de presentación de un conjunto se le llama Definición por Extensión. Por ejemplo, supongamos que los números naturales del 1 al 8 son elementos de un conjunto X. Por lo tanto la definición por extensión de X estará dada por: X = {1, 2, 3, 4, 5, 6, 7, 8}

Existe otra alternativa para la presentación de un conjunto que de hecho en muchas ocasiones nos será sumamente útil además de que estará sustentada en el uso de nuestras funciones proposicionales. Sea p(x) una función proposicional que describe una regla o propiedad de tal forma que la proposición resultante al sustituir a x es verdadera si y sólo si la constante individual considerada efectivamente cumple con la regla o propiedad. Entonces se dice que los elementos que pertenecen a un conjunto A serán únicamente aquellos que satisfagan la condición p(x). A esta forma de presentación del conjunto se le llama Definición Intencional y se denota por: A = {x: p(x)} Esta expresión se lee como “El conjunto A se forma por todos aquellos elementos x que cumplen con la regla o propiedad p(x).” Por ejemplo, consideremos al siguiente conjunto: Y = {x: x ∈ ` ∧ x mod 2 = 1} En este caso tenemos que nuestra función proposicional es x ∈ ` ∧ x mod 2 = 1. Ello quiere decir que el conjunto Y se conformará por aquellos valores para x tales que x es un número natural y además x es un número impar (a mod b retorna el residuo del cociente a/b). Por ejemplo, tenemos que 11 ∈ Y ya que 11 es un número natural y también es impar. 3.1416 ∉ Y por no ser un número natural. Los números naturales pares tampoco formarán parte de Y. Es claro que Y será un conjunto con un número infinito de elementos. Si se

63

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

deseara presentar a Y mediante su definición por extensión entonces únicamente se listan algunos de sus elementos y al final se coloca … para denotar que la lista de elementos es infinita: Y = {1, 3, 5, 7, 9, 11, 13, 15, …}

Retomemos nuestro anterior ejemplo X = {1, 2, 3, 4, 5, 6, 7, 8}. La definición intencional de X podría estar dada por: X = {y: y ∈ ` ∧ 1 ≤ y ≤ 8} Los elementos dentro de un conjunto no tienen que ser listados necesariamente en orden. Por lo tanto, nuestro conjunto X = {1, 2, 3, 4, 5, 6, 7, 8} pudo haber sido presentado como X = {8, 1, 7, 2, 6, 3, 5, 4}. Ello implica que X = {1, 2, 3, 4, 5, 6, 7, 8} = {8, 1, 7, 2, 6, 3, 5, 4} = {5, 6, 7, 8, 1, 2, 3, 4} = ...

En la notación dada por la definición intencional de un conjunto, {x: p(x)}, simplemente dijimos que constantes individuales para x serán evaluadas contra p(x) a fin de determinar si son o no elementos del conjunto. Por lo regular siempre se sobreentenderá la existencia de un Conjunto Universo denotado como 8. Este conjunto tiene a todas las posibles constantes individuales a considerar. En nuestro ejemplo anterior, Y = {x: x ∈ ` ∧ x mod 2 = 1}, podríamos decir que 8 = \ , es decir, toda sustitución para evaluar si se cumple o no la regla x ∈ ` ∧ x mod 2 = 1 tiene que ser forzosamente con un número real. La idea de especificar al conjunto universo también tiene la intención de evitar efectuar sustituciones que carezcan de sentido, por ejemplo, Rojo ∈ ` ∧ Rojo mod 2 = 1. Obsérvese que si hubiésemos planteado desde un principio, para nuestro ejemplo en consideración, que el conjunto universo fuese el conjunto de los números naturales, i.e. 8 = ` , entonces nuestra regla podría reducirse simplemente a determinar que el número sea impar. Entonces en este caso, y considerando que 8 = ` , tendríamos: Y = {x: x mod 2 = 1}

El Conjunto Vacío es el conjunto que no contiene ningún elemento y se le denota por ∅. Su definición intencional podría establecerse como: ∅ = {x: F} En este caso estamos considerando a una función proposicional, para la cual no importa la sustitución de x que se efectúe, ésta siempre dará como resultado una contradicción. Esto tiene sentido ya que el conjunto vacío no puede tener elementos, por lo tanto para todo

64

Capítulo 2. Teoría de Conjuntos

elemento x que se quiera verificar si pertenece o no a ∅ siempre se deberá obtener que x ∉ ∅. La definición por extensión de ∅ es: ∅={} Es decir, la lista de los elementos de ∅ está vacía. Si A y B son conjuntos cuyos elementos se encuentran en un conjunto universo 8 entonces se dice que el conjunto A es un Subconjunto del conjunto B, denotado por A ⊆ B, si todo elemento del conjunto A es también un elemento del conjunto B. Al símbolo ⊆ se le denomina operador de Contención. Formalmente: A ⊆ B ⇔ (∀x ∈ 8)(x ∈ A Ÿ x ∈ B) Tomemos la proposición general (∀x ∈ 8)(x ∈ A Ÿ x ∈ B) y obtengamos su correspondiente negación: ¬(∀x ∈ 8)(x ∈ A Ÿ x ∈ B) ≡ (∃x ∈ 8)(¬(x ∈ A Ÿ x ∈ B)) ≡ (∃x ∈ 8)(¬(¬(x ∈ A) ∨ x ∈ B)) ≡ (∃x ∈ 8)(¬(x ∉ A ∨ x ∈ B)) ≡ (∃x ∈ 8)(¬(x ∉ A) ∧ ¬(x ∈ B)) ≡ (∃x ∈ 8)(x ∈ A ∧ x ∉ B)

(Por Propiedad del Condicional) (Dado que ¬(x ∈ A) ≡ x ∉ A) (Por Ley de D’Morgan)

Como podrá apreciarse acabamos de obtener la condición que debe cumplirse para establecer cuando un conjunto A no es subconjunto de un conjunto B: que exista un elemento presente en A pero que no esté presente en B. En este caso se utiliza la notación A ⊆ B. Formalmente se tiene: A ⊆ B ⇔ (∃x ∈ 8)(x ∈ A ∧ x ∉ B) Por ejemplo, consideremos a los siguientes conjuntos: 8= ` A = {2, 4, 6, 8, 10} B = {2, 4, 6, 8, 10, 12, 14, 16}

Mostraremos que A ⊆ B, es decir, se demostrará que (∀x ∈ 8)(x ∈ A Ÿ x ∈ B) • Para x = 2, (2 ∈ A Ÿ 2 ∈ B) ≡ (V Ÿ V) ≡ V • Para x = 4, (4 ∈ A Ÿ 4 ∈ B) ≡ (V Ÿ V) ≡ V • Para x = 6, (6 ∈ A Ÿ 6 ∈ B) ≡ (V Ÿ V) ≡ V • Para x = 8, (8 ∈ A Ÿ 8 ∈ B) ≡ (V Ÿ V) ≡ V • Para x = 10, (10 ∈ A Ÿ 10 ∈ B) ≡ (V Ÿ V) ≡ V

65

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Por lo tanto la proposición (∀x ∈ 8)(x ∈ A Ÿ x ∈ B) es verdadera y entonces se concluye que A ⊆ B. Ahora mostraremos que para los mismos conjuntos el recíproco es falso, es decir, B ⊆ A. Se demostrará que (∃x ∈ 8)(x ∈ B ∧ x ∉ A) es verdadera. Basta con tomar el elemento x = 14 para el que se tiene que la proposición 14 ∈ B ∧ 14 ∉ A es verdadera. Es decir, hemos verificado que existe un elemento de B que no está en A. Por lo tanto se concluye B ⊆ A Consideremos ahora un ejemplo en el que nuestros conjuntos tienen un número infinito de elementos. Supóngase que 8 = ] = {…, -3, -2, -1, 0, 1, 2, 3, …}.

Teorema 2.1: Sean los conjuntos A = {x: x es múltiplo de 6} y B = {x: x es múltiplo de 2}. Entonces A ⊆ B.

Demostración: Sea x cualquier elemento del conjunto A. x ∈ A Ÿ (∃n ∈ ] )(x = 6n) ≡ (∃n ∈ ] )(x = (2⋅3)n) ≡ (∃n ∈ ] )(x = 2(3n)) ≡ (∃n ∈ ] )(x = 2m ∧ m = 3n) (∃n ∈ ] )(x = 2m ∧ m = 3n) Ÿ (∃m ∈ ] )(x = 2m) (∃m ∈ ] )(x = 2m) Ÿ x ∈ B Por Ley del Silogismo Hipotético: x ∈ A Ÿ x ∈ B. Dado que x es cualquier elemento en A: (∀x ∈ ] )(x ∈ A Ÿ x ∈ B) Ÿ A ⊆ B.

Comentemos la manera en que la demostración del Teorema 2.1 fue abordada. En primer lugar debe ser evidente que tanto el conjunto A como el conjunto B tienen un número infinito de elementos. Sin embargo sabemos que lo que tienen en común los elementos en A es ser múltiplos de 6 y mientras que los elementos en B son múltiplos de 2. Sea x cualquier elemento del conjunto A. Debido a que x ∈ A entonces existe un entero n tal que x puede ser expresado como 6n, i.e. (∃n ∈ ] )(x = 6n). Ahora bien manipularemos a esta proposición general, y en particular a su función proposicional x = 6n, a fin de obtener proposiciones generales equivalentes. Primero nótese que 6n puede ser expresado como (2⋅3)n. Ello quiere decir que x = (2⋅3)n = 2(3n). Es donde tenemos a las equivalencias (∃n ∈ ] )(x = 6n) ≡ (∃n ∈ ] )(x = (2⋅3)n) ≡ (∃n ∈ ] )(x = 2(3n))

66

Capítulo 2. Teoría de Conjuntos

Ahora sea m = 3n, entonces x = 2m. Esto lo expresamos al establecer que se cumple que x = 2m y que m = 2n. Esto da a lugar a la última equivalencia: (∃n ∈ ] )(x = 2(3n)) ≡ (∃n ∈ ] )(x = 2m ∧ m = 3n) Dado que tenemos una cadena de equivalencias entonces la condicional inicial x ∈ A Ÿ (∃n ∈ ] )(x = 6n) puede ser reescrita como x ∈ A Ÿ (∃n ∈ ] )(x = 2m ∧ m = 3n). Es claro que m es un número entero ya que n y 3 son enteros también. En consecuencia se usará una implicación ya que estamos considerando una nueva proposición general en donde n ya no está presente: (∃n ∈ ] )(x = 2m ∧ m = 3n) Ÿ (∃m ∈ ] )(x = 2m) La proposición (∃m ∈ ] )(x = 2m) expresa la propiedad que deberá cumplir x para verificar que efectivamente forma parte del conjunto B. Ello da a lugar a la nueva implicación (∃m ∈ ] )(x = 2m) Ÿ x ∈ B Hasta este punto tenemos que hemos construido nuestras premisas y es claro que todas son verdaderas. Ahora debe verse con facilidad que la aplicación de la Ley del Silogismo Hipotético sobre estas premisas dará como resultado final la condicional x ∈ A Ÿ x ∈ B. Todas las premisas consideran a un mismo elemento x de A en particular. Pero es claro que no importa el elemento de A que se considere, estas premisas seguirán conservando su validez. De allí el haber establecido en un principio “Sea x cualquier elemento del conjunto A”. Por lo tanto podemos afirmar que la proposición general (∀x ∈ ] )(x ∈ A Ÿ x ∈ B) es verdadera. Recalcamos que la justificación de la veracidad de x ∈ A Ÿ x ∈ B es la que se basó en las premisas que construimos previamente y las inferencias efectuadas. Finalmente se tiene que la proposición general con cuantificador universal corresponde a la definición dada para establecer que A es efectivamente subconjunto de B. Tenemos entonces la implicación final y también verdadera: (∀x ∈ ] )(x ∈ A Ÿ x ∈ B) Ÿ A ⊆ B Ahora se demostrarán dos importantes Teoremas:

Teorema 2.2: El conjunto vacío es subconjunto de cualquier conjunto.

Demostración: Sea X cualquier conjunto. Para probar que ∅ ⊆ X se debe cumplir (∀x ∈ 8)(x ∈ ∅ Ÿ x ∈ X) ≡ V

67

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Recurramos a la negación de la proposición anterior: ¬(∀x ∈ 8)(x ∈ ∅ Ÿ x ∈ X) ≡ (∃x ∈ 8)(¬(x ∈ ∅ Ÿ x ∈ X)) ≡ (∃x ∈ 8)(¬(¬(x ∈ ∅) ∨ x ∈ X)) ≡ (∃x ∈ 8)(¬(x ∉ ∅ ∨ x ∈ X)) ≡ (∃x ∈ 8)(¬(x ∉ ∅) ∧ ¬(x ∈ X))) ≡ (∃x ∈ 8)(x ∈ ∅ ∧ x ∉ X))

(Propiedad del Condicional) (¬(x ∈ ∅) ≡ x ∉ ∅) (Ley de D’Morgan)

La función proposicional x ∈ ∅ ∧ x ∉ X siempre generará una contradicción ya que si bien es posible encontrar un elemento x que no forme parte del conjunto X, es imposible encontrar un elemento x que forme parte del conjunto vacío. Ello quiere decir que para cualquier x en el conjunto universo x ∈ ∅ ≡ F y entonces para la conjunción x ∈ ∅ ∧ x ∉ X ≡ F. En consecuencia la proposición (∃x ∈ 8)(x ∈ ∅ ∧ x ∉ X)) es falsa, pero su negación, que es la proposición (∀x ∈ 8)(x ∈ ∅ Ÿ x ∈ X), es verdadera. Por lo tanto para cualquier conjunto X se tiene que ∅ ⊆ X.

Teorema 2.3: Todo conjunto es subconjunto de si mismo.

Demostración: Sea X cualquier conjunto. Para probar que X ⊆ X se debe cumplir (∀x ∈ 8)(x ∈ X Ÿ x ∈ X) ≡ V Manipulemos a la función proposicional x ∈ X Ÿ x ∈ X: x∈XŸx∈X ≡ ¬(x ∈ X) ∨ x ∈ X ≡x∉X∨x∈X ≡V

(Propiedad del Condicional) (¬(x ∈ X) ≡ x ∈ X) (x ∉ X ∨ x ∈ X es una Tautología)

Es decir, no importa el elemento x en X que se esté considerando, la función proposicional x ∈ X Ÿ x ∈ X siempre generará el valor verdadero. En consecuencia la proposición general (∀x ∈ 8)(x ∈ X Ÿ x ∈ X) es verdadera y nos permite concluir que efectivamente X ⊆ X.

68

Capítulo 2. Teoría de Conjuntos

En este punto surgen tres hechos que son consecuencia directa de los Teoremas 2.2 y 2.3:

Corolario 2.1: a) ∅ ⊆ ∅ b) ∅ ⊆ 8 c) 8⊆ 8

Demostración: Los incisos a) y b) se confirman por el hecho de que el Teorema 2.2 establece que el conjunto vacío es subconjunto de cualquier conjunto. El Teorema 2.3 nos dice que todo conjunto es subconjunto de sí mismo. El conjunto universo es un conjunto y por lo tanto es subconjunto de sí mismo. Con ello se valida el inciso c).

Nótese que la proposición que acabamos de demostrar no fue denominada Teorema. Un Corolario debe entenderse también como un Teorema aunque su importancia se considera menor debido a que su demostración se obtiene de manera inmediata y directa a partir de un Teorema demostrado previamente, como fue el caso de nuestro Corolario 2.1. A partir de este punto siempre se supondrá que los elementos en cualquier conjunto A forman parte de un conjunto universo independientemente de si éste es descrito explícitamente o no. Ello implica que para todo conjunto A se tendrá que A ⊆ 8. Inicialmente se estableció que un conjunto es una colección de distintos objetos. Un punto a abordar tiene que ver con el hecho de que tales objetos pueden ser a su vez conjuntos. Ello quiere decir que es posible contar con la noción de un conjunto cuyos elementos son conjuntos. Por ejemplo sea el conjunto Y dado por: Y = {{a, b, c}, {d, e}, {a}, {x, y, z, w}} En este caso tenemos que el conjunto Y cuenta con 4 elementos. Debe ser claro que el elemento {a} ∈ Y pero que a ∉ Y. Ello se debe a que a no es un conjunto, mientras que {a} si lo es y está presente en Y. Por lo tanto a no puede ser equivalente a ninguno de los 4 conjuntos en Y, considerando inclusive que a forma parte de 2 de tales elementos. Ahora bien, si tenemos al conjunto Y’ dado por: Y’ = {{a, b, c}, {d, e}, {a}, {x, y, z, w}, a}

69

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Entonces si se cumple que a ∈ Y’ ya que existe un elemento en Y’ que efectivamente es igual al elemento a. Aquí también aprovecharemos para establecer el hecho de que ∅ y {∅} son conjuntos diferentes. Sabemos que ∅ representa al conjunto con cero elementos. Por otro lado {∅} representa a un conjunto con un elemento y tal único elemento es el conjunto vacío. Sea A cualquier conjunto. El conjunto cuyos elementos resultan ser todos los posibles subconjuntos de A se le llamará Conjunto Potencia y se le denotará por 2A. Por ejemplo, sea el conjunto A dado por A = {1, 2, 3}. Entonces tenemos que: 2A = {{1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}, ∅} Es claro que para formar al conjunto potencia, en el caso de A = {1, 2, 3}, tuvimos que considerar a todos los subconjuntos de A formados por un único elemento y a todos los subconjuntos de A formados por dos elementos. Nótese que en 2A también está A y ∅ ya que sabemos que A ⊆ A y que ∅ ⊆ A. Supongamos que el conjunto universo en el que están contenidos los elementos de A está dado por 8 = {1, 2, 3, 4}. Entonces tendremos que es posible también calcularle su conjunto potencia: 28 = {{1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3, 4}, {1, 2, 3}, {1, 3, 4}, {2, 3, 4}, {1, 2, 4}, {1, 2, 3, 4}, ∅} Dado que 8 es el universo respecto a A entonces es claro que 2A es subconjunto de 28, aunque el recíproco no es cierto, 28 ⊆ 2A. Consideremos por ejemplo a 8 = ` . Entonces tendremos que 28 = 2` = {∅, ` , {1}, {2}, {3}, {4}, {5}, …, {1, 2}, {1, 3}, {1, 4}, {1, 5}, …} Es claro que 2` tendrá un número infinito de elementos. Ello se debe a que 2` se formará por todos los posibles subconjuntos cuyos elementos serán tomados del conjunto de los números naturales, el cual a su vez es un conjunto con un número infinito de elementos. En este punto quizás sea más conveniente la definición intencional de 2` : 2` = {c: c es un conjunto ∧ c ⊆ ` } Un punto importante respecto al uso de 28 tiene que ver con éste tendrá un papel análogo al de nuestro conjunto ℘. Recordamos que ℘ era un conjunto que contenía a todas las posibles proposiciones. A la vez ℘ nos proporcionaba un conjunto cuyos elementos son aquellos sobre los cuales trabajan nuestras equivalencias lógicas y nuestras propiedades del Álgebra Proposicional. Es decir, el conjunto ℘ definía nuestro marco de trabajo y el alcance de tales equivalencias y propiedades. Ahora bien, hemos visto que dado un conjunto universo 8, 28 contiene a todos los posibles conjuntos que se pueden formar a partir de los elementos en 8. A continuación estableceremos una serie de operadores,

70

Capítulo 2. Teoría de Conjuntos

propiedades, y en la siguiente Sección un Álgebra de Conjuntos. Pero para ello necesitamos considerar en primer lugar un conjunto universo y cuáles son los conjuntos formados a partir de éste en donde nuestras propiedades y operadores serán validos. Por lo tanto 28 definirá nuestro marco de trabajo, tal como lo hizo en su momento el conjunto ℘. Sea 8 un conjunto universo. Sean A y B cualesquiera subconjuntos en 28, i.e. A, B ⊆ 28. Se definen los siguientes operadores: •

La Unión de los conjuntos A y B, denotada por A ∪ B, se define como: A ∪ B = {x: x ∈ A ∨ x ∈ B} Es decir, la unión de los conjuntos A y B es un nuevo conjunto en el cual están tanto los elementos de A como los elementos de B. Nótese que al efectuar la unión podemos encontrar elementos que únicamente están en A pero no en B, o viceversa, que están en B pero no en A. Pero dado que se utiliza el conectivo de disyunción basta con que se encuentren presentes en uno de los conjuntos para que se caractericen como parte de la unión.



La Intersección de los conjuntos A y B, denotada por A ∩ B, está dada por: A ∩ B = {x: x ∈ A ∧ x ∈ B} Es claro que la intersección de dos conjuntos también da como resultado un nuevo conjunto. De acuerdo a la función proposicional x ∈ A ∧ x ∈ B tenemos que para que un elemento x está en A ∩ B éste debió formar parte tanto de A como de B. Es decir, A ∩ B se conforma de los elementos comunes tanto a A como a B.



La Diferencia entre los conjuntos A y B, la cual se denota por A \ B, se define como: A \ B = {x: x ∈ A ∧ x ∉ B} La diferencia de los conjuntos A y B es un conjunto el cual se forma únicamente por los elementos que están en A pero que no están en B. Es claro que ningún elemento en B formará parte de la diferencia, ya que tal elemento no cumple con la proposición x ∉ B. Las operaciones de unión e intersección forman conjuntos cuyos elementos pueden estar tanto en A como en B, pero la diferencia en cambio forma un conjunto cuyos elementos son exclusivos de A, en el sentido de que éstos no pertenecen también al conjunto B.

71

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



La Diferencia Simétrica entre los conjuntos A y B, denotada por A ⊗ B, se establece de la siguiente manera en términos de la unión y diferencia de conjuntos: A ⊗ B = (A \ B) ∪ (B \ A) Sabemos que la operación A \ B retorna aquellos elementos que están en A pero no en B, mientras que B \ A proporciona únicamente aquellos elementos que están en B pero no en A. Por lo tanto la unión del conjunto A \ B con el conjunto B \ A dará como resultado un conjunto en el cual están todos los elementos de A y de B excepto aquellos presentes en A ∩ B. Ello se debe a que si x está en A ∩ B entonces por la definición del operador de intersección la proposición x ∈ A ∧ x ∈ B será verdadera. Pero la función proposicional asociada al operador de diferencia claramente establece que uno de los elementos sólo puede estar presente en uno y sólo uno de los conjuntos. Por lo tanto, todo elemento en A ∩ B es excluido de la diferencia simétrica.



El Producto Cartesiano de los conjuntos A y B, cuya denotación está dada por A × B, se define como: A × B = {(x, y): x ∈ A ∧ y ∈ B} Es decir, el producto cartesiano produce un nuevo conjunto. Sin embargo los elementos que lo conforman son Pares Ordenados de la forma (x, y). En este caso el primer elemento x está presente en el conjunto A mientras que el segundo elemento y está presente en el conjunto B.



El Complemento del conjunto A, el cual se denota por AC, es definido de la siguiente manera: AC = {x: x ∈ 8 ∧ x ∉ A} Como podrá se apreciar, el complemento del conjunto A es un nuevo conjunto que tiene la propiedad de que sus elementos no son elementos de A: AC se conforma por todos los restantes elementos del conjunto universo. O en otras palabras, todo elemento del universo que no esté en A, estará en el complemento de A.

Considérese a los siguientes conjuntos: 8 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} A = {2, 3, 5, 7} B = {2, 4, 6, 8} C = {9, 10}

72

Capítulo 2. Teoría de Conjuntos

Entonces tendremos los siguientes ejemplos: •

A ∪ B = {2, 3, 5, 7, 4, 6, 8} o Nótese que el elemento 2 es común tanto a A como a B, pero tal como se estableció desde un principio, la notación de conjuntos no admite elementos repetidos. Por ello en la unión el número 2 aparece sólo una vez.



A ∩ B = {2}



A∩C=∅ o En este caso es claro que los conjuntos A y C no tienen elementos en común, por lo tanto se dice que su intersección es vacía y ello evidentemente se denota con el conjunto vacío.



A \ B = {3, 5, 7} o A y B tienen en común al elemento 2. De la definición del operador de diferencia tenemos entonces que 2 ∈ A ∧ 2 ∉ B ≡ F. Por lo tanto este elemento no es considera dentro del conjunto A \ B. Para los elementos en A, 3, 5 y 7 se tiene que x ∈ A ∧ x ∉ B ≡ V en todos los casos y en consecuencia está en la diferencia. Para los elementos en B, 4, 6, 8, se tiene que x ∈ A ∧ x ∉ B ≡ F ya que no se cumple que formen parte de A (x ∈ A), ni que no formen parte de B (x ∉ B). Por lo tanto los elementos 3, 5 y 7 no están en A \ B.



B \ A = {4, 6, 8} o Este ejemplo claramente nos dice que el operador de diferencia no será conmutativo.



A \ C = {2, 3, 5, 7} = A o Este resultado en realidad no debe sorprendernos. Para empezar se puede verificar sin problema alguno que A ∩ C = ∅, es decir, A y C no tienen elementos en común. Por lo tanto todos los elementos de A harán que la función proposicional x ∈ A ∧ x ∉ C siempre sea verdadera. Los elementos en C tenemos claro que no se toman en cuenta para formar parte de A \ C ya que no cumplen con el primer requisito de formar parte de A.



B \ C = {2, 4, 6, 8} = B



A ⊗ B = (A \ B) ∪ (B \ A) = {3, 5, 7} ∪ {4, 6, 8} = {3, 5, 7, 4, 6, 8} o Nótese como es que a la diferencia simétrica únicamente le interesan los elementos que exclusivamente formen parte del conjunto A y los elementos que exclusivamente formen parte del conjunto B. Los elementos comunes, en este caso el número 2, simplemente no se consideran ya que es común tanto a A como a B, o en términos de la intersección, 2 ∈ A ∩ B.

73

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



B ⊗ C = (B \ C) ∪ (C \ B) = {2, 4, 6, 8} ∪ {9, 10} = B ∪ C = {2, 4, 6, 8, 9, 10} o En este caso debido a que B ∩ C = ∅ es claro que todos los elementos que conforman tanto a B como a C formarán parte de la diferencia simétrica B ⊗ C.



A × B = {(2, 2), (2, 4), (2, 6), (2, 8), (3, 2), (3, 4), (3, 6), (3, 8), (5, 2), (5, 4), (5, 6), (5, 8), (7, 2), (7, 4), (7, 6), (7, 8)} o Obsérvese que cada elemento del producto cartesiano entre A y B es un par que se forma, y estrictamente en ese orden, primero por un elemento de A y después por un elemento de B. Por la definición se deben formar todos los posibles pares. En realidad no es difícil ver que simplemente tomamos el primer elemento de A (2) y lo emparejamos con cada elemento de B, posteriormente tomamos al segundo elemento de A (3) y lo emparejamos con cada elemento de B, y así sucesivamente. El número total de posibles pares es el producto del número de elementos en A con el número de elementos en B.



B × A = {(2, 2), (2, 3), (2, 5), (2, 7), (4, 2), (4, 3), (4, 5), (4, 7), (6, 2), (6, 3), (6, 5), (6, 7), (8, 2), (8, 3), (8, 5), (8, 7)} o Este ejemplo nos hace ver que el conjunto resultante de B × A es muy diferente al obtenido en A × B. Ello implica que el producto cartesiano no necesariamente será conmutativo. Decimos que “no necesariamente” ya que si existen casos en donde la conmutatividad de cumple. Considérense a D = {1, 2, 3} y E = {1, 2, 3}. Entonces es fácil verificar que D × E = E × D. En general deberá siempre asumirse la no conmutatividad del producto cartesiano.



AC = {1, 4, 6, 8, 9, 10}



BC = {1, 3, 5, 7, 9}



CC = {1, 2, 3, 4, 5, 6, 7, 8}

Resumiendo, hemos definido en total 6 operadores entre conjuntos: unión, intersección, diferencia, diferencia simétrica, producto cartesiano y complemento. Es clara la aportación dada por el Álgebra Proposicional a fin de contar con las definiciones precisas y sobre todo formales. Ahora lo que tendremos es la aplicación de las definiciones anteriores a fin de dar demostración a Teoremas que nos proporcionen nuevas propiedades referentes a las operaciones entre conjuntos. Como se verá a continuación la metodología a aplicar considera el sustituir las expresiones apropiadas por sus correspondientes definiciones y posteriormente manipular éstas, mediante el Álgebra de Proposiciones, a fin de obtener funciones proposicionales que se ajusten finalmente a las expresiones deseadas. Veamos un primer ejemplo que tiene que ver con la Propiedad Asociativa de la Intersección:

74

Capítulo 2. Teoría de Conjuntos

Teorema 2.4 (Propiedad Asociativa de la Intersección):

(∀P, Q, R ∈ 28)((P ∩ Q) ∩ R = P ∩ (Q ∩ R))

Demostración: (P ∩ Q) ∩ R = {x: x ∈ P ∧ x ∈ Q} ∩ R = {x: (x ∈ P ∧ x ∈ Q) ∧ x ∈ R} = {x: x ∈ P ∧ (x ∈ Q ∧ x ∈ R)} = P ∩ {x: x ∈ Q ∧ x ∈ R} = P ∩ (Q ∩ R)

(Por definición de intersección sobre P ∩ Q) (Por definición de intersección sobre {x: x ∈ P ∧ x ∈ Q} ∩ R) (Por propiedad asociativa de la conjunción) (Por definición de intersección sobre x ∈ P ∧ (x ∈ Q ∧ x ∈ R)) (Por definición de intersección sobre {x: x ∈ Q ∧ x ∈ R})

Analicemos paso a paso la demostración del Teorema 2.4. Es claro que se debe demostrar que para cualesquiera conjuntos P, Q y R, que se asume son subconjuntos de un conjunto universo dado, se cumple que (P ∩ Q) ∩ R = P ∩ (Q ∩ R). Nótese que contamos con una igualdad lo que implica que se debe demostrar que la expresión (P ∩ Q) ∩ R define al mismo conjunto que la expresión P ∩ (Q ∩ R). Como comentamos anteriormente la idea es manipular una de las expresiones apoyándonos en las definiciones de los operadores de conjuntos y el Álgebra Proposicional hasta obtener la otra expresión en cuestión. Dado que se tiene una igualdad podemos manipular a (P ∩ Q) ∩ R hasta obtener a P ∩ (Q ∩ R), o bien comenzamos por manipular a P ∩ (Q ∩ R) hasta obtener a (P ∩ Q) ∩ R. La idea es que cualquiera que sea nuestro punto de origen el resultado será igual de válido. En nuestra prueba abordamos la demostración partiendo de (P ∩ Q) ∩ R. Iniciamos aplicando la definición del operador intersección sobre P ∩ Q. De esta forma obtenemos {x: x ∈ P ∧ x ∈ Q} Sabemos que la intersección de dos conjuntos produce como resultado un nuevo conjunto. En nuestro caso se produce un conjunto para el que se tiene que su definición intencional establece que x será uno de sus elementos siempre y cuando x satisfaga la propiedad x ∈ P ∧ x ∈ Q. Ahora, nótese que este conjunto es intersectado a su vez con el conjunto R: {x: x ∈ P ∧ x ∈ Q} ∩ R

75

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Entonces, al aplicar nuevamente la definición del operador intersección tenemos que se producirá un nuevo conjunto cuyos elementos cumplirán la propiedad de estar tanto en R como en P ∩ Q. Pero recalcamos que la propiedad para determinar que un elemento x está en P ∩ Q es x ∈ P ∧ x ∈ Q y además estamos considerando al conjunto P ∩ Q y no a P y Q por separado. Por lo tanto, para que un elemento x sea común a R y a P ∩ Q deberá cumplir con la propiedad: (x ∈ P ∧ x ∈ Q) ∧ x ∈ R Que es precisamente la función proposicional que da a lugar a la definición intencional del conjunto (P ∩ Q) ∩ R: {x: (x ∈ P ∧ x ∈ Q) ∧ x ∈ R} Recordemos que nuestro objetivo es llegar a la expresión P ∩ (Q ∩ R). Observando a ésta podemos apreciar que se relacionan de manera directa, por el operador ∩ y los paréntesis, a los conjuntos Q y R. En esta fase de nuestra demostración tenemos relacionados de manera directa a P y Q, pero la ventaja es que la función proposicional (x ∈ P ∧ x ∈ Q) ∧ x ∈ R está descrita únicamente con conectivos de conjunción. Por lo tanto podemos aplicar la propiedad asociativa de la conjunción a fin de “trasladar” los paréntesis en la función y agrupar ahora a Q y R: {x: x ∈ P ∧ (x ∈ Q ∧ x ∈ R)} Nótese que vista como una función proposicional, x ∈ Q ∧ x ∈ R define intencionalmente a un nuevo conjunto que se está intersectando con el conjunto P. Por lo tanto podemos “separar” a P mediante una aplicación de la definición del operador de intersección dejando al otro conjunto aún con su definición intencional: P ∩ {x: x ∈ Q ∧ x ∈ R} En este punto debe ser claro que la definición intencional {x: x ∈ Q ∧ x ∈ R} corresponde nada más y nada menos, y en base a la definición del operador de intersección, a conjunto Q ∩ R. Solo basta invocar explícitamente a la definición del operador intersección para finalmente obtener P ∩ (Q ∩ R) Con lo que la demostración queda finalizada.

El operador de unión de conjuntos también satisface la conmutatividad. Véase como la demostración del Teorema 2.5 es muy similar a la del Teorema 2.4:

76

Capítulo 2. Teoría de Conjuntos

Teorema 2.5 (Propiedad Asociativa de la Unión):

(∀P, Q, R ∈ 28)((P ∪ Q) ∪ R = P ∪ (Q ∪ R))

Demostración: (P ∪ Q) ∪ R = {x: x ∈ P ∨ x ∈ Q} ∪ R = {x: (x ∈ P ∨ x ∈ Q) ∨ x ∈ R} = {x: x ∈ P ∨ (x ∈ Q ∨ x ∈ R)} = P ∪ {x: x ∈ Q ∨ x ∈ R} = P ∪ (Q ∪ R)

(Por la definición de unión sobre P ∪ Q) (Por la definición de unión sobre {x: (x ∈ P ∨ x ∈ Q)} ∪ R) (Propiedad asociativa de la disyunción) (Por definición de unión sobre x ∈ P ∨ (x ∈ Q ∨ x ∈ R)) (Por definición de unión sobre {x: x ∈ Q ∨ x ∈ R})

Los siguientes Teoremas 2.6 y 2.7 son fáciles de probar. Se relacionan con la conmutatividad de la unión y la intersección, respectivamente.

Teorema 2.6 (Propiedad Conmutativa de la Unión):

(∀P, Q ∈ 28)(P ∪ Q = Q ∪ P)

Demostración: P ∪ Q = {x: x ∈ P ∨ x ∈ Q} = {x: x ∈ Q ∨ x ∈ P} =Q∪P

(Por definición de unión) (Propiedad conmutativa de la disyunción) (Por definición de unión)

Teorema 2.7 (Propiedad Conmutativa de la Intersección):

(∀P, Q ∈ 28)(P ∩ Q = Q ∩ P)

77

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Demostración: P ∩ Q = {x: x ∈ P ∧ x ∈ Q} = {x: x ∈ Q ∧ x ∈ P} =Q∩P

(Por definición de intersección) (Propiedad conmutativa de la conjunción) (Por definición de intersección)

Ahora probemos que los operadores de unión, intersección y complemento cuentan con la propiedad de la idempotencia:

Teorema 2.8 (Idempotencia de la Intersección):

(∀P ∈ 28)(P ∩ P = P)

Demostración: P ∩ P = {x: x ∈ P ∧ x ∈ P} = {x: x ∈ P} =P

(Por definición de intersección) (Propiedad de idempotencia de la conjunción) ({x: x ∈ P} es una definición intencional de P)

Teorema 2.9 (Idempotencia de la Unión):

(∀P ∈ 28)(P ∪ P = P)

Demostración: P ∪ P = {x: x ∈ P ∨ x ∈ P} = {x: x ∈ P} =P

(Por definición de unión) (Propiedad de Idempotencia de la disyunción) ({x: x ∈ P} es una definición intencional de P)

Teorema 2.10 (Ley del Doble Complemento):

(∀P ∈ 28)((PC)C = P)

78

Capítulo 2. Teoría de Conjuntos

Demostración: (PC)C = ({x: x ∈ 8 ∧ x ∉ P})C = {x: x ∈ 8 ∧ ¬(x ∈ 8 ∧ x ∉ P)} = {x: x ∈ 8 ∧ (x ∉ 8 ∨ x ∈ P)} = {x: (x ∈ 8 ∧ x ∉ 8) ∨ (x ∈ 8 ∧ x ∈ P)} = {x: F ∨ (x ∈ 8 ∧ x ∈ P)} = {x: x ∈ 8 ∧ x ∈ P} = {x: V ∧ x ∈ P} = {x: x ∈ P} =P

(Por definición de complemento sobre PC) (Por definición de complemento sobre {x: x ∈ 8 ∧ x ∉ P}) (Ley de D’Morgan sobre ¬(x ∈ 8 ∧ x ∉ P)) (Propiedad distributiva respecto a la conjunción) (x ∈ 8 ∧ x ∉ 8≡F) (Existencia del elemento neutro en la disyunción) (x ∈ 8 es una Tautología) (Existencia del elemento neutro en la conjunción) ({x: x ∈ P} es una definición intencional de P)

La demostración del Teorema 2.10 tiene algunos puntos interesantes. En primer lugar se tiene que aplicar la definición del operador de complemento sobre PC. De esta forma se obtiene un conjunto cuya definición intencional está dada por {x: x ∈ 8 ∧ x ∉ P} Nótese que la función proposicional x ∈ 8 ∧ x ∉ P establece claramente cuál es la condición que debe cumplir un elemento x para formar parte de PC. Ahora bien, se debe determinar la definición intencional del complemento del conjunto {x: x ∈ 8 ∧ x ∉ P}. Ello quiere decir que por la definición del operador de complemento tenemos que un elemento x estará en ({x: x ∈ 8 ∧ x ∉ P})C si x está en el conjunto universo y además x no está en el conjunto {x: x ∈ 8 ∧ x ∉ P}. Por lo tanto, se tiene en consecuencia al conjunto {x: x ∈ 8 ∧ ¬(x ∈ 8 ∧ x ∉ P)} Donde recalcamos que x ∈ 8 ∧ x ∉ P es la función proposicional que nos indica si x está o no en el conjunto PC. Dado que requerimos que x no se encuentre en PC es que entonces anteponemos el operador de negación. Aplicando Ley de D’Morgan sobre ¬(x ∈ 8 ∧ x ∉ P) obtenemos la definición intencional equivalente {x: x ∈ 8 ∧ (x ∉ 8 ∨ x ∈ P)}

79

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Nótese que en este punto realmente ya no es posible efectuar más manipulaciones sobre x ∉ 8 ∨ x ∈ P por lo que se aplica la propiedad distributiva respecto a la conjunción: {x: (x ∈ 8 ∧ x ∉ 8) ∨ (x ∈ 8 ∧ x ∈ P)} La proposición x ∈ 8 ∧ x ∉ 8 es lógicamente equivalente a F dado que se trata de una contradicción. Ahora se tiene {x: F ∨ (x ∈ 8 ∧ x ∈ P)} Recordemos que F es el elemento neutro para la operación de disyunción por ello simplemente conservamos a x ∈ 8 ∧ x ∈ P: {x: x ∈ 8 ∧ x ∈ P} Ahora bien, nótese que el objetivo detrás de estas manipulaciones es llegar a obtener P. La función proposicional x ∈ P es una definición intencional para P, aunque está conectada mediante una conjunción a la función x ∈ 8. Sin embargo, no debe ser difícil apreciar el hecho de que x ∈ 8 es una Tautología y por tanto equivalente a V. Ello se debe a que previamente establecimos que todos los elementos de nuestros conjuntos de trabajo están contenidos en un conjunto universo. Por lo tanto tiene sentido establecer que x ∈ 8 ≡ V ya que todo elemento x forma necesariamente parte del universo que es nuestro conjunto maximal. Haciendo x ∈ 8 ≡ V tenemos la función proposicional V ∧ x ∈ P y dado que V es el elemento neutro para la conjunción tenemos finalmente nuestro objetivo alcanzado: {x: x ∈ P} = P El operador de complemento es aplicable a cualquier conjunto, y ello incluye al conjunto vacío y al conjunto universo. Los Teoremas 2.11 y 2.12 nos ilustrarán respecto a los complementos de estos dos conjuntos.

Teorema 2.11:

∅C = 8

80

Capítulo 2. Teoría de Conjuntos

Demostración: ∅C

= {x: x ∈ 8 ∧ x ∉ ∅} = {x: x ∈ 8 ∧ V} = {x: x ∈ 8} = 8











(Por definición de complemento) (x ∉ ∅ es una tautología) (Existencia del elemento neutro en la conjunción) ({x: x ∈ 8} es una definición intencional de 8) 

Teorema 2.12: 8C = ∅

Demostración: 8C

= {x: x ∈ 8 ∧ x ∉ 8} = {x: x ∈ 8 ∧ F} = {x: F} =∅

(Por definición de complemento) (x ∉ 8 es una contradicción) (Existencia del elemento aniquilador para la conjunción) ({x: F} es una definición intencional de ∅)

Nótense las funciones proposicionales x ∉ ∅ y x ∉ 8 en las demostraciones de los Teoremas 2.11 y 2.12 respectivamente. En el caso de x ∉ ∅ debe ser evidente que ésta es una Tautología ya que establece que un elemento x no formará parte del conjunto vacío. Ello se cumple de hecho para cualquier elemento que se ponga a prueba. Por otro lado x ∉ 8 es una contradicción ya que establece que un elemento x no está en el universo. Pero hemos mencionado en varias ocasiones que partimos de la suposición de que todos los elementos de nuestros conjuntos se asumen inmersos en el conjunto universo. Por lo tanto decimos que x ∉ 8 ≡ F. Ahora procederemos a demostrar una propiedad del operador de contención:

Teorema 2.13 (Propiedad Transitiva de la Contención):

(∀P, Q, R ∈ 28)(P ⊆ Q ∧ Q ⊆ R Ÿ P ⊆ R)

81

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Demostración: Supongamos que efectivamente es verdadero que P ⊆ Q ∧ Q ⊆ R. Entonces, por la definición del operador de contención, se tendrá la equivalencia P ⊆ Q ∧ Q ⊆ R ≡ (∀x ∈ 8)(x ∈ P Ÿ x ∈ Q) ∧ (∀x ∈ 8)(x ∈ Q Ÿ x ∈ R) Sea x0 cualquier elemento en P elegido de manera arbitraria. Entonces para este x0 en particular es verdadero que x0 ∈ P Ÿ x0 ∈ Q ∧ x0 ∈ Q Ÿ x0 ∈ R Si consideramos a x0 ∈ P Ÿ x0 ∈ Q y x0 ∈ Q Ÿ x0 ∈ R como premisas entonces mediante la Ley del Silogismo Hipotético concluimos que x0 ∈ P Ÿ x0 ∈ R. Dado que x0 fue cualquier elemento de P entonces no importa el elemento de P en consideración: los razonamientos anteriores seguirán siendo válidos. Por lo tanto se tiene que la proposición (∀x ∈ 8)(x ∈ P Ÿ x ∈ R) es verdadera. Y por la definición del operador de contención se concluye que P ⊆ R.

Las Leyes de D’Morgan en su momento fueron presentadas bajo el contexto del Álgebra Proposicional. Ahora veremos que también pueden ser planteadas bajo el contexto de la Teoría de Conjuntos. En este caso el papel de la negación lo haría el operador de complemento mientras que para la disyunción y conjunción ahora se tendrán a la intersección y unión respectivamente.

Teorema 2.14 (Ley de D’Morgan):

(∀P, Q ∈ 28)((P ∪ Q)C = PC ∩ QC)

Demostración: (P ∪ Q)C

= ({x: x ∈ P ∨ x ∈ Q})C = {x: x ∈ 8 ∧ ¬(x ∈ P ∨ x ∈ Q)} = {x: x ∈ 8 ∧ (x ∉ P ∧ x ∉ Q)} = {x: (x ∈ 8 ∧ x ∉ P) ∧ x ∉ Q)}

82

(Por definición de unión sobre P ∪ Q) (Por definición de complemento) (Ley de D’Morgan sobre ¬(x ∈ P ∨ x ∈ Q)) (Por propiedad asociativa de la conjunción)

Capítulo 2. Teoría de Conjuntos

= {x: (x ∈ 8 ∧ x ∉ P) ∧ (V ∧ x ∉ Q)} = {x: (x ∈ 8 ∧ x ∉ P) ∧ (x ∈ 8 ∧ x ∉ Q)} = {x: x ∈ 8 ∧ x ∉ P} ∩ {x: x ∈ 8 ∧ x ∉ Q} = PC ∩ {x: x ∈ 8 ∧ x ∉ Q} = PC ∩ QC

(Existencia del elemento neutro en la conjunción sobre x ∉ Q) (x ∈ 8 es una Tautología, por lo tanto x ∈ 8 ≡ V) (Por definición de intersección) (Por definición de complemento sobre {x: x ∈ 8 ∧ x ∉ P}) (Por definición de complemento)

Los Teoremas 2.15 y 2.16 validarán el hecho de que para los operadores de unión e intersección existen sus correspondientes elementos neutros:

Teorema 2.15 (Existencia del Elemento Neutro en la Unión):

(∀P ∈ 28)(P ∪ ∅ = P)

Demostración: P∪∅

= {x: x ∈ P ∨ x ∈ ∅} = {x: x ∈ P ∨ F} = {x: x ∈ P} =P

(Por definición de unión) (x ∈ ∅ es una contradicción) (Por existencia del elemento neutro en la disyunción) ({x: x ∈ P} es una definición intencional para P)

Teorema 2.16 (Existencia del Elemento Neutro en la Intersección):

(∀P ∈ 28)(P ∩ 8 = P)

83

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Demostración: P∩8

= {x: x ∈ P ∧ x ∈ 8} = {x: x ∈ P ∧ V} = {x: x ∈ P} =P

(Por definición de intersección) (x ∈ 8 es una tautología) (Por existencia del elemento neutro en la conjunción) ({x: x ∈ P} es una definición intencional para P)

La siguiente Propiedad será sumamente útil ya que nos permite expresar al operador de diferencia en términos de los operadores de intersección y complemento:

Teorema 2.17 (Propiedad de la Diferencia):

(∀P, Q ∈ 28)(P \ Q = P ∩ QC)

Demostración: P \ Q = {x: x ∈ P ∧ x ∉ Q} = {x: x ∈ P ∧ (V ∧ x ∉ Q)} = {x: x ∈ P} ∩ {x: V ∧ x ∉ Q} = P ∩ {x: V ∧ x ∉ Q} = P ∩ {x: x ∈ 8∧ x ∉ Q} = P ∩ QC

(Por definición de diferencia) (Por existencia del elemento neutro en la conjunción sobre x ∉ Q) (Por definición de intersección) ({x: x ∈ P} es una definición intencional para P) (x ∈ 8 es una tautología) (Por definición de complemento)

2.2 Algebra de Conjuntos En la Sección anterior se demostraron algunas propiedades de los operadores de conjuntos. Ahora, tales propiedades, junto con otras más, formarán un Álgebra de Conjuntos que permitirán demostrar Teoremas de una manera más directa y sin tener que recurrir ahora al Álgebra Proposicional. Sin embargo, deberá ser claro que nuestra nueva álgebra se sustentará por un lado en las definiciones de los operadores de conjuntos y por otro lado, y de ninguna manera menos importante, sobre las propiedades del Álgebra Proposicional.

84

Capítulo 2. Teoría de Conjuntos

• Propiedades de Cerradura: ƒ (∀P, Q ∈ 28)(P ∪ Q ∈ 28) ƒ (∀P, Q ∈ 28)(P ∩ Q ∈ 28) ƒ (∀P ∈ 28)(PC ∈ 28) • Propiedades de Conmutatividad: ƒ (∀P, Q ∈ 28)(P ∪ Q = Q ∪ P) ƒ (∀P, Q ∈ 28)(P ∩ Q = Q ∩ P) • Propiedades de Asociatividad: ƒ (∀P, Q, R ∈ 28)((P ∪ Q) ∪ R = P ∪ (Q ∪ R)) ƒ (∀P, Q, R ∈ 28)((P ∩ Q) ∩ R = P ∩ (Q ∩ R)) • Propiedades de Distributividad: ƒ (∀P, Q, R ∈ 28)(P ∪ (Q ∩ R) = (P ∪ Q) ∩ (P ∪ R)) ƒ (∀P, Q, R ∈ 28)(P ∩ (Q ∪ R) = (P ∩ Q) ∪ (P ∩ R)) • Propiedades de Idempotencia: ƒ (∀P ∈ 28)(P ∪ P = P) ƒ (∀P ∈ 28)(P ∩ P = P) • Ley del Doble Complemento: ƒ (∀P ∈ 28)((PC)C = P) • Leyes de D’Morgan: ƒ (∀P, Q ∈ 28)((P ∪ Q)C = PC ∩ QC) ƒ (∀P, Q ∈ 28)((P ∩ Q)C = PC ∪ QC) • Existencia de Elementos Neutros: ƒ (∀P ∈ 28)(P ∪ ∅ = P) ƒ (∀P ∈ 28)(P ∩ 8 = P) • Existencia de Elementos Complementarios: ƒ (∀P ∈ 28)(P ∪ PC = 8) ƒ (∀P ∈ 28)(P ∩ PC = ∅) ƒ ∅C = 8       C ƒ8 = ∅       • Existencia de Elementos Aniquiladores: ƒ (∀P ∈ 28)(P ∪ 8 = 8) ƒ (∀P ∈ 28)(P ∩ ∅ = ∅) • Propiedad de la Diferencia: ƒ (∀P, Q ∈ 28)(P \ Q = P ∩ QC)

(Teorema 2.6) (Teorema 2.7) (Teorema 2.5) (Teorema 2.4)

(Teorema 2.9) (Teorema 2.8) (Teorema 2.10) (Teorema 2.14)

(Teorema 2.15) (Teorema 2.16)

 Teorema 2.11)  Teorema 2.12)

(Teorema 2.17)

Veamos ahora algunos Teoremas cuyas demostraciones nos darán ilustración respecto a la aplicación de las propiedades que forman a nuestra nueva Álgebra de Conjuntos. Como se verá a continuación, todas las pruebas ya no invocan de manera directa a las definiciones de los operadores de conjuntos y tampoco usan de forma explícita las propiedades del Álgebra Proposicional. Aunque recalcamos que éstas forman precisamente los cimientos sobre los que se sostiene nuestra nueva álgebra.

85

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Teorema 2.18:

(∀A, B, C ∈ 28)((C \ A) ∪ (C \ B) = C \ (A ∩ B))

Demostración: C \ (A ∩ B)

= C ∩ (A ∩ B)C = C ∩ (AC ∪ BC) = (C ∩ AC) ∪ (C ∩ BC) = (C \ A) ∪ (C ∩ BC) = (C \ A) ∪ (C \ B)

(Propiedad de la Diferencia) (Ley de D’Morgan sobre (A ∩ B)C) (Propiedad Distributiva respecto a la Intersección) (Propiedad de la Diferencia sobre C ∩ AC) (Propiedad de la Diferencia sobre C ∩ BC)

Teorema 2.19:

(∀A, B, C ∈ 28)(C \ (B \ A) = (A ∩ C) ∪ (C \ B))

Demostración: C \ (B \ A)

= C ∩ (B \ A)C = C ∩ (B ∩ AC)C = C ∩ (BC ∪ (AC)C) = C ∩ (BC ∪ A) = (C ∩ BC) ∪ (C ∩ A) = (C ∩ A) ∪ (C ∩ BC) = (A ∩ C) ∪ (C ∩ BC) = (A ∩ C) ∪ (C \ (BC)C) = (A ∩ C) ∪ (C \ B)

86

(Propiedad de la Diferencia sobre C \ (B \ A)) (Propiedad de la Diferencia sobre B \ A) (Ley de D’Morgan sobre (B ∩ AC)C) (Ley del Doble Complemento sobre (AC)C) (Propiedad Distributiva respecto a la Intersección) (Propiedad Conmutativa de la Unión) (Propiedad Conmutativa de la Intersección sobre C ∩ A) (Propiedad de la Diferencia sobre C ∩ BC) (Ley del Doble Complemento sobre (BC)C)

Capítulo 2. Teoría de Conjuntos

Teorema 2.20:

(∀A ∈ 28)(A \ A = ∅)

Demostración: A \ A = A ∩ AC =∅

(Propiedad de la Diferencia) (Existencia de los Elementos Complementarios en la Intersección)

Teorema 2.21:

(∀A, B, C ∈ 28)((B \ A) ∩ C = (B ∩ C) \ A)

Demostración: (B \ A) ∩ C

= (B ∩ AC) ∩ C = B ∩ (AC ∩ C) = B ∩ (C ∩ AC) = (B ∩ C) ∩ AC = (B ∩ C) \ (AC)C = (B ∩ C) \ A

(Propiedad de la Diferencia sobre B \ A) (Propiedad Asociativa de la Intersección) (Propiedad Conmutativa de la Intersección sobre AC ∩ C) (Propiedad Asociativa de la Intersección) (Propiedad de la Diferencia) (Ley del Doble Complemento sobre (AC)C)

Teorema 2.22:

(∀A, B ∈ 28)((B \ A)C = A ∪ BC)

Demostración: (B \ A)C

= (B ∩ AC)C = BC ∪ A = A ∪ BC

(Propiedad de la Diferencia sobre B \ A) (Ley de D’Morgan) (Propiedad Conmutativa de la Unión)

87

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Teorema 2.23:

(∀A, B, C ∈ 28)((B \ A) ∪ C = (B ∪ C) \ (A \ C))

Demostración: (B \ A) ∪ C

= (B ∩ AC) ∪ C = C ∪ (B ∩ AC) = (C ∪ B) ∩ (C ∪ AC) = (B ∪ C) ∩ (C ∪ AC) = (B ∪ C) ∩ (CC ∩ A)C = (B ∪ C) ∩ (A ∩ CC)C = (B ∪ C) ∩ (A \ C)C = (B ∪ C) \ (A \ C)

(Propiedad de la Diferencia sobre B \ A) (Propiedad Conmutativa de la Unión) (Propiedad Distributiva respecto a la Unión) (Propiedad Conmutativa de la Unión sobre C ∪ B) (Ley de D’Morgan sobre C ∪ AC) (Propiedad Conmutativa sobre CC ∩ A) (Propiedad de la Diferencia sobre A ∩ CC) (Propiedad de la Diferencia)

Teorema 2.24:

(∀A, B, C ∈ 28)(C \ (A ∪ B) = (C \ A) \ B)

Demostración: C \ (A ∪ B)

= C ∩ (A ∪ B)C = C ∩ (AC ∩ BC) = (C ∩ AC) ∩ BC = (C \ A) ∩ BC = (C \ A) \ B

(Por Propiedad de la Diferencia) (Ley de D’Morgan sobre (A ∪ B)C) (Propiedad Asociativa de la Intersección) (Propiedad de la Diferencia sobre C ∩ AC) (Propiedad de la Diferencia)

Teorema 2.25:

(∀A, B ∈ 28)(A ∪ (A ∩ B) = A)

88

Capítulo 2. Teoría de Conjuntos

Demostración: A ∪ (A ∩ B) = (A ∩ 8) ∪ (A ∩ B) = A ∩ (8∪ B) =A∩8 =A

(Existencia del Elemento Neutro en la Intersección sobre A) (Propiedad Distributiva respecto a la Intersección) (Existencia del Elemento Aniquilador en la Unión) (Existencia del Elemento Neutro en la Intersección)

89

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

90

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

3. Relaciones y Funciones

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

92

Capítulo 3. Relaciones y Funciones

3.1 Definiciones Sean A y B dos conjuntos. Una Relación Binaria de A hacia B es un subconjunto del producto cartesiano entre A y B. Recordemos que el producto cartesiano A × B forma a todos los posibles pares ordenados en los cuales el primer elemento está en A y el segundo elemento está en B. Por ejemplo, sean X y Y los siguientes conjuntos: X = {1, 2, 3} Y = {x, y, z} Entonces X × Y = {(1, x), (2, x), (3, x), (1, y), (2, y), (3, y), (1, z), (2, z), (3, z)} Sea el conjunto R = {(1, y), (1, z), (3, y)}. Nótese que R es una relación binaria de X hacia Y ya que R ⊆ X × Y. Sean A y B cualesquiera conjuntos y sea R una relación binaria de A hacia B. Entonces ahora tendremos: • Si (a, b) ∈ R se dice que a se relaciona con b bajo R y se denota por a R b. • Si (a, b) ∉ R se dice que a no se relaciona con b bajo R y se especifica mediante a R b. Retomando nuestro ejemplo previo tenemos que para la relación R presentada se tienen las siguientes conclusiones: • (1, y) ∈ R: 1Ry • (1, z) ∈ R: 1Rz • (3, y) ∈ R: 3Ry • (1, x) ∉ R: 1Rx • (2, x) ∉ R: 2Rx • (3, z) ∉ R: 3Rz Sea R una relación binaria de A hacia B. El Dominio de la relación binaria R es el conjunto de todos los elementos de A que están presentes en los pares ordenados que conforman a R. Por otro lado, el Codominio de R es el conjunto de todos los elementos de B que están presentes en los pares ordenados de R. Por ejemplo, para la relación binaria R = {(1, y), (1, z), (3, y)} se tiene el dominio {1, 3} y el codominio {y, z}. Una relación binaria se puede representar visualmente de dos maneras. La idea es hacer visible la forma en la que los elementos en el dominio y codominio se conectan o relacionan entre sí. En la primera representación se figura a la relación al listar a todos los elementos de los conjuntos A y B, pero se conectan, mediante flechas, únicamente a aquellos pares incluidos en la relación. En la segunda representación se tiene una matriz binaria. El número de renglones estará dado por el número de elementos en A mientras que su número de columnas es el número de elementos en B. Cada renglón estará asociado a un

93

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

elemento de A mientras que cada columna a un elemento de B. Todo aquel par ordenado (a, b) en la relación binaria se hace presente en la matriz al marcar con 1 la posición de la matriz correspondiente al renglón asociado a a con la columna asociada a b. Aquellas posiciones de la matriz que no correspondan a pares ordenados en la relación simplemente se marcan con 0. Véase en la Figura 3.1 las dos representaciones que se tienen para nuestra relación R = {(1, y), (1, z), (3, y)}. La Figura 3.1.a presenta a los elementos de los conjuntos X y Y. Se tiene una flecha que conecta al elemento 1 de X con el elemento y de Y. Con esto se expresa la existencia del par ordenado (1, y). En el caso de la Figura 3.1.b tenemos la representación matricial de R. La matriz correspondiente tiene tamaño 3 × 3. Nótese como es que se tienen 3 posiciones marcadas con el valor 1. Estas posiciones corresponden precisamente con los 3 pares ordenados presentes en R: (1, y), (1, z) y (3, y).

X

Y

1

x

2

y

3

z

R 1 2 3

x 0 0 0

y 1 0 1

z 1 0 0

a) b) Figura 3.1. Representaciones visuales de la relación R = {(1, y), (1, z), (3, y)} (véase el texto para detalles).

Sea R una relación binaria de A hacia B. La Inversa de la Relación Binaria R, denotada por R-1, es la relación binaria de B hacia A dada por: R-1 = {(b, a): (a, b) ∈ R} Es decir, la relación inversa R-1 se forma por aquellos pares ordenados los cuales cuando se invierten, éstos están en R. Por ejemplo, consideremos nuevamente a nuestra relación R = {(1, y), (1, z), (3, y)}. Entonces, de acuerdo a la definición anterior, se tiene que la relación inversa de R está dada por R-1 = {(y, 1), (z, 1), (y, 3)}. Debe ser claro que ahora el dominio de R-1 está dado por {y, z} ⊆ B mientras que el codominio es {1, 3} ⊆ A. Sean A, B y C cualesquiera conjuntos y sea R una relación binaria de A hacia B y sea S una relación binaria de B hacia C. R y S dan lugar a una relación binaria de A hacia C denominada Composición de R y S la cual es denotada por S ο R. Un par ordenado (a, c), donde a ∈ A y c ∈ C, estará en la composición de R y S si existe un elemento b ∈ B tal que a se relaciona con b por la relación R y a su vez b se relaciona con c por la relación S. Formalmente: (a, c) ∈ S ο R ⇔ (∃b ∈ B)((a, b) ∈ R ∧ (b, c) ∈ S)

94

Capítulo 3. Relaciones y Funciones

De esta manera podemos dar una definición intencional para S ο R: S ο R = {(a, c): (∃b ∈ B)((a, b) ∈ R ∧ (b, c) ∈ S} Por ejemplo, consideremos a los siguientes conjuntos: A = {1, 2, 3, 4} B = {a, b, c, d} C = {x, y, z} Sea la relación R de A hacia B dada por R = {(1, a), (2, d), (3, a), (3, b), (3, d)} Por otro lado, sea la relación S de B hacia C: S = {(b, x), (b, z), (c, y), (d, z)} La Figura 3.2 nos presenta visualmente a las relaciones que acabamos de definir. A

B

C

1

a

x

2

b

3 4

c d

y z

Figura 3.2. Visualización de las relaciones R = {(1, a), (2, d), (3, a), (3, b), (3, d)}, S = {(b, x), (b, z), (c, y), (d, z)} y S o R (véase el texto para detalles).

Apoyándonos en la Figura 3.2 podemos observar que únicamente contamos con 3 instancias en las cuales se tienen elementos del conjunto B que sirven como “puente” para relacionar a elementos del conjunto A con elementos del conjunto C (estos pares son resaltados en la Figura 3.2): y dSz • 2Rd • 3Rb y bSx • 3Rb y bSz Por lo tanto la composición de las relaciones R y S, S o R, estará dada por: • 2 (S o R) z • 3 (S o R) x • 3 (S o R) z Es decir, S o R = {(2, z), (3, x), (3, z)}.

95

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Sea R una relación binaria de un conjunto A hacia sí mismo. La relación binaria R es Reflexiva si a R a para todo a ∈ A. Es decir, (a, a) ∈ R para todo a ∈ A. Formalmente se tendría: La relación binaria R de A hacia A es Reflexiva ⇔ (∀a ∈ A)(a R a) Obtengamos la negación de la proposición general (∀a ∈ A)(a R a): ¬(∀a ∈ A)(a R a)

≡ (∃a ∈ A)(a R a) ≡ (∃a ∈ A)((a, a) ∉ R)

Ello quiere decir que contamos con la condición formal para caracterizar a una relación binaria R como No Reflexiva: La relación binaria R de A hacia A es No Reflexiva ⇔ (∃a ∈ A)((a, a) ∉ R) Considérense los siguientes ejemplos. Sea A = {1, 2, 3, 4}. Determinaremos cuales de las siguientes relaciones binarias de A hacia A son reflexivas. También nos será de utilidad visualizarlas mediante sus representaciones matriciales. Véase la Figura 3.3. •

R1 = {(1,1), (1,2), (2,3), (1,3), (4,4)} o Nótese que existe un elemento a = 2 ∈ A tal que (2, 2) ∉ R1. Por lo tanto la relación binaria R1 no es reflexiva. Nótese como es que en la representación matricial de R2, Figura 3.3.a, precisamente la posición (2, 2) tiene asignado el valor 0. Lo mismo sucede con la posición (3, 3).



R2 = {(1,1), (1,2), (2,1), (2,2), (3,3), (4,4)} o A través de la Figura 3.3.b es posible apreciar que todas las posiciones en la diagonal principal, de la matriz asociada a R2, tienen el valor 1 lo que nos indica que para todo a ∈ A se cumple que (a, a) ∈ R2. Por lo tanto la relación R2 efectivamente es Reflexiva.



R3 = {(1,3), (2,1)} o Claramente esta relación es No Reflexiva ya que no cuenta con ningún par ordenado de la forma (a, a). Nótese como es que en su representación matricial, Figura 3.3.c, se tiene que todos los elementos sobre la diagonal principal tienen asignado el valor 0.

96

Capítulo 3. Relaciones y Funciones



R4 = ∅ o En primer lugar tenemos que R4 = ∅ ⊆ A × A por lo tanto R4 es una relación binaria de A hacia sí mismo. Ahora bien, para todo elemento de A se cumple que (a, a) ∉ R4. Por lo tanto, R4 = ∅ es No Reflexiva. Ahora bien, esta conclusión únicamente será válida cuando el conjunto A ≠ ∅. Si A = ∅ entonces ∅ ⊆ ∅ × ∅ = ∅ y en consecuencia se sigue contando con una relación binaria como tal. Sin embargo, nótese que es imposible encontrar en un principio un elemento a ∈ ∅ que nos permita demostrar que (a, a) ∉ ∅. En otras palabras, dado que no tenemos manera de refutar la reflexividad de la relación ∅ del conjunto ∅ hacia sí mismo, entonces debemos aceptar que ésta efectivamente es reflexiva. El argumento que acabamos de aplicar se denomina Demostración por Vacuidad.



R5 = A × A o En este caso es claro que todos los posibles pares de elementos tomados del conjunto A están presentes en R5. Ello incluye a (1, 1), (2, 2), (3, 3) y (4, 4). Véase la Figura 3.3.e. De hecho es posible establecer que la relación A × A, para cualquier conjunto A, será siempre reflexiva. Esta afirmación prevalece incluso cuando A = ∅ (véase la descripción antes dada para el ejemplo con R4 = ∅). R1 1 2 3 4

1 1 0 0 0

2 1 0 0 0

3 1 1 0 0

4 0 0 0 1

R2 1 2 3 4

1 1 1 0 0

a)

2 1 1 0 0

3 0 0 1 0

4 0 0 0 1

R3 1 2 3 4

1 0 1 0 0

b) R4 1 2 3 4

1 0 0 0 0

2 0 0 0 0 d)

3 0 0 0 0

4 0 0 0 0

2 0 0 0 0

3 1 0 0 0

4 0 0 0 0

c) R5 1 2 3 4

1 1 1 1 1

2 1 1 1 1

3 1 1 1 1

4 1 1 1 1

e)

Figura 3.3. Las representaciones matriciales de las relaciones a) R1, b) R2, c) R3, d) R4 y e) R5 (véase el texto para detalles). Se enfatizan los elementos sobre la diagonal principal de las matrices para apoyar en las caracterizaciones de R1 a R5 como reflexivas o no reflexivas.

Sea R una relación binaria de un conjunto A hacia sí mismo. Se dice que R es una relación Simétrica si para todo par (a, b) en R se tiene que (b, a) también está en R. Simbólicamente se tiene que: La relación binaria R de A hacia A es simétrica ⇔ (∀a, b ∈ A)(a R b Ÿ b R a)

97

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Nótese que la proposición general se lee como “Para cualesquiera elementos a y b en el conjunto A se tiene que si a se relaciona con b bajo R entonces b se relaciona con a bajo R”. Un punto importante surge del hecho de que el enunciado comienza estableciendo que los elementos a y b a considerar se toman del conjunto A. La intuición nos podría decir que a y b deberían de hecho formar un par en la relación R ya que tomar cualquier a y b en A no garantiza que el par formado esté precisamente en R. Por lo tanto, podríamos decir que la proposición general debería iniciar estableciendo “Para cualquier par (a, b) en R”. Sin embargo nótese que la función proposicional en consideración es una implicación o condicional. El par de elementos a, b que se esté tomando en cuenta es sustituido tanto en el antecedente a R b como en el consecuente b R a. Dependiendo de la veracidad o falsedad de las proposiciones a R b y b R a es que se determina evidentemente el valor final de la implicación. Ahora bien, si el par (a, b) no está en R entonces el antecedente a R b será falso. Independientemente del valor del consecuente b R a tendremos que F Ÿ b R a ≡ V. La otra situación bajo la cual la condicional es verdadera se presenta cuando tanto (a, b) como (b, a) están en R: a R b Ÿ b R a ≡ V. Por otro lado, si el par (a, b) está en R pero (b, a) no está entonces tendremos la instancia bajo la cual a R b Ÿ b R a ≡ F. El punto de esta discusión es establecer el hecho de que independientemente de los elementos a y b que tomemos del conjunto A, tal como lo establece nuestra definición de simetría, realmente lo que nos interesa para caracterizar a nuestras relaciones es la presencia o ausencia del caso a R b Ÿ b R a ≡ F. Tenemos claro conocimiento de que si esta instancia nunca se presenta entonces es que la relación en cuestión es efectivamente simétrica. De lo contrario, la relación es no simétrica. En la práctica no se efectúa la prueba considerando en total los n2 posibles pares formados por elementos del conjunto A, donde n es su número de elementos. Sabemos que si se forma un par que no está en la relación R la condicional a R b Ÿ b R a será verdadera. En realidad se procede con la prueba considerando únicamente los pares (a, b) que sabemos que efectivamente están en la relación R. Esta última observación será de hecho también tomada en cuenta para las caracterizaciones, además de la simetría, que definiremos para nuestras relaciones. Utilizando nuestros elementos de Álgebra Proposicional al negar a la proposición general con cuantificador universal que define a una relación como simétrica obtenemos: ¬(∀a, b ∈ A)(a R b Ÿ b R a) ≡ (∃a, b ∈ A)(¬(a R b Ÿ b R a)) ≡ (∃a, b ∈ A)(¬(¬(a R b) ∨ b R a)) ≡ (∃a, b ∈ A)(a R b ∧ ¬(b R a)) ≡ (∃a, b ∈ A)(a R b ∧ b R a)

(Propiedad del Condicional) (Ley de D’Morgan) (¬(b R a) ≡ b R a)

Es decir, una relación binaria R es No Simétrica si existe un par (a, b) en R para el cual el par (b, a) no se encuentra en R: La relación binaria R de A hacia A es no simétrica ⇔ (∃a, b ∈ A)(a R b ∧ b R a)

98

Capítulo 3. Relaciones y Funciones

Consideremos nuevamente a las relaciones R1 a R5 con la representación matricial dada en la Figura 3.3. Veamos cuáles de éstas pueden ser caracterizadas como simétricas o como no simétricas: •

R1 = {(1,1), (1,2), (2,3), (1,3), (4,4)} o Nótese que el par (1, 2) está en R1, sin embargo no contamos, en R1, con el par (2, 1). Por lo tanto la proposición general (∃1, 2 ∈ A)(1 R1 2 ∧ 2 R1 1) se vuelve verdadera y en consecuencia R1 es no simétrica.



R2 = {(1,1), (1,2), (2,1), (2,2), (3,3), (4,4)} o Para este caso tenemos que el par (1, 2) está en R2 así como el par (2, 1). Obsérvese que para los restantes pares se tiene que la proposición a R a Ÿ a R a es siempre verdadera (V Ÿ V ≡ V) para a = 1, 2, 3, 4. Nótese que la definición de relación simétrica nos exige garantizar que si (a, b) está en la relación entonces (b, a) también debe estar en la relación. Sin embargo nunca se nos especifica que a tenga que ser diferente de b. En consecuencia la proposición general (∀a, b ∈ A = {1, 2, 3, 4})(a R2 b Ÿ b R2 a) es verdadera y R2 es caracterizada como simétrica.



R3 = {(1,3), (2,1)} o R3 es no simétrica ya que (1, 3) ∈ R3 pero (3, 1) ∉ R3.



R4 = ∅ o Supóngase que se desea refutar que R4 es simétrica al probar que de hecho es no simétrica. Por lo tanto debemos presentar un par (a, b) en R4 para el cual se tenga que (b, a) no está en R4. Sin embargo R4 es el conjunto vacío. Ello se traduce en que no contamos con al menos un caso para efectivamente refutar el hecho de que R4 es simétrica. Por lo tanto, usando nuestro argumento de vacuidad, concluimos que R4 debe ser caracterizada como simétrica.



R5 = A × A o Dado que todos los posibles pares de elementos tomados del conjunto A = {1, 2, 3, 4} están en R5 entonces podemos garantizar sin problema alguno que para cualquier par (a, b) en R5, ya sea que a = b o bien a ≠ b, tendremos que el par (b, a) también estará en R5. Entonces R5 es una relación simétrica.

Se sabe que una matriz M de tamaño n × n es una Matriz Simétrica si se cumple que M[i][j] = M[j][i], para todo i, j = 1, 2, …, n. O en otras palabras la matriz M es simétrica si ésta y su transpuesta MT son iguales. Observemos las representaciones matriciales de las relaciones R1 a R5 dadas en la Figura 3.4. Nótese la relación directa que existe entre el hecho de que una relación sea caracterizada como simétrica y que su matriz correspondiente sea también simétrica. Ello se debe a que el hecho de que los elementos M[i][j] y M[j][i] de una matriz M sean iguales a 1 hacen referencia precisamente a los pares (i, j) y (j, i) en la relación R correspondiente. Decir que para todo elemento de la matriz M[i][j] = 1 se cumple que M[j][i] = 1 es equivalente a decir se tiene que en la relación tanto el par (i, j) como el par (j, i) están en R. Ello se traduce en que la matriz M es simétrica si y 99

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

sólo si su correspondiente relación R es simétrica. La Figura 3.4 claramente nos muestra que únicamente las matrices asociadas a las relaciones R2, R4 y R5 son simétricas. Precisamente estas fueron las relaciones que caracterizamos como simétricas. Tal y como sucedió al observar la diagonal principal de la matriz asociada a una relación a fin de determinar si ésta era reflexiva o no reflexiva, ahora tenemos que al observar si se cumple o no la simetría en la matriz asociada a una relación podemos determinar si la relación en cuestión es simétrica o no simétrica. R1 1 2 3 4

1 1 0 0 0

2 1 0 0 0

3 1 1 0 0

4 0 0 0 1

R2 1 2 3 4

1 1 1 0 0

a)

2 1 1 0 0

3 0 0 1 0

4 0 0 0 1

R3 1 2 3 4

1 0 1 0 0

b) R4 1 2 3 4

1 0 0 0 0

2 0 0 0 0 d)

3 0 0 0 0

4 0 0 0 0

2 0 0 0 0

3 1 0 0 0

4 0 0 0 0

c) R5 1 2 3 4

1 1 1 1 1

2 1 1 1 1

3 1 1 1 1

4 1 1 1 1

e)

Figura 3.4. Las representaciones matriciales de las relaciones a) R1, b) R2, c) R3, d) R4 y e) R5 (véase el texto para detalles). Únicamente las matrices asociadas a las relaciones R2, R4 y R5 son simétricas.

Sea R una relación binaria de un conjunto A hacia sí mismo. Se dice que R es una relación Antisimétrica si para todos los pares tales que (a, b), (b, a) están en R se tiene que a = b. Simbólicamente: La relación binaria R de A hacia A es antisimétrica ⇔ (∀a, b ∈ A)(a R b ∧ b R a Ÿ a = b) Utilizando nuestros elementos de Álgebra Proposicional al negar a la proposición general con cuantificador universal obtenemos: ¬(∀a, b ∈ A)(a R b ∧ b R a Ÿ a = b) ≡ (∃a, b ∈ A)(¬(a R b ∧ b R a Ÿ a = b)) ≡ (∃a, b ∈ A)(¬(¬(a R b ∧ b R a) ∨ a = b)) ≡ (∃a, b ∈ A)(¬(¬(a R b) ∨ ¬(b R a)) ∨ a = b)) ≡ (∃a, b ∈ A)(¬((a R b ∨ b R a) ∨ a = b)) ≡ (∃a, b ∈ A)( ¬(a R b ∨ b R a) ∧ ¬(a = b)) ≡ (∃a, b ∈ A)( a R b ∧ b R a ∧ ¬(a = b)) ≡ (∃a, b ∈ A)( a R b ∧ b R a ∧ a ≠ b)

100

(Propiedad del Condicional) (Ley de D’Morgan) (¬(a R b) ≡ a R b) (Ley de D’Morgan) (Ley de D’Morgan) (¬(a = b) ≡ a ≠ b)

Capítulo 3. Relaciones y Funciones

Es decir, R es No Antisimétrica si existen los pares (a, b) y (b, a) en R y además a ≠ b. Simbólicamente se establece como: La relación binaria R de A hacia A es no antisimétrica ⇔ (∃a, b ∈ A)(a R b ∧ b R a ∧ a ≠ b) Nótese que la antisimetría no es de ninguna manera la negación de la simetría. Considérese por ejemplo la relación Rn = {(1, 1), (2, 2), (3, 3), …, (n, n)} sobre el conjunto de los primeros n números naturales {1, 2, 3, …, n}. Es claro que la relación es simétrica ya que se cumple para todo par (a, b) en Rn que (b, a) también está en Rn. Ello claramente se debe a que siempre se tendrá que a = b. Pero precisamente por esta última propiedad la relación Rn es también caracterizada como antisimétrica ya que para todo par (a, b) tenemos que la condicional a Rn b ∧ b Rn a Ÿ a = b ≡ V. Reconsideremos a las relaciones R1 a R5 con la representación matricial dada en la Figura 3.4. Veamos cuáles de éstas son antisimétricas o no antisimétricas. •

R1 = {(1,1), (1,2), (2,3), (1,3), (4,4)} es antisimétrica ya que: o (1, 1) ∈ R1 ∧ (1, 1) ∈ R1 Ÿ 1 = 1 ≡ V o (4, 4) ∈ R1 ∧ (4, 4) ∈ R1 Ÿ 4 = 4 ≡ V o ¿Qué sucede cuando se evalúan los pares (1, 2), (2, 3) y (1, 3)? Sabemos que para el par (1, 2) se tiene que 1 R1 2 es verdadera mientras que 2 R1 1 es falsa y obviamente 1 = 2 es también falsa. La conjunción 1 R1 2 ∧ 2 R1 1 es entonces falsa y por lo tanto se tiene que la condicional 1 R1 2 ∧ 2 R1 1 Ÿ 1 = 2 ≡ F Ÿ F es verdadera. La condicional sigue siendo verdadera cuando ésta se evalúa con los pares (2, 3) y (1, 3). Dado que nunca se encontró un caso en el que la condicional a R1 b ∧ b R1 a Ÿ a = b fuese falsa entonces se tiene que R1 cumple con los requerimientos para ser caracterizada como antisimétrica.



R2 = {(1,1), (1,2), (2,1), (2,2), (3,3), (4,4)} es no antisimétrica ya que se tiene que los pares (1, 2) y (2, 1) están en R2 pero 1 ≠ 2. Es decir, tenemos una instancia en que la proposición a R2 b ∧ b R2 a ∧ a ≠ b se hizo verdadera.



R3 = {(1,3), (2,1)} es antisimétrica ya que: o (1, 3) ∈ R3 ∧ (3, 1) ∈ R3 Ÿ 1 = 3 ≡ V ∧ F Ÿ F ≡ F Ÿ F ≡ V o (2, 1) ∈ R3 ∧ (1, 2) ∈ R3 Ÿ 1 = 2 ≡ V ∧ F Ÿ F ≡ F Ÿ F ≡ V o Por lo tanto al no existir una instancia de sustitución para la condicional a R3 b ∧ b R3 a Ÿ a = b que la haga falsa entonces R3 debe ser caracterizada como antisimétrica.

101

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



R4 = ∅: o Nótese que para cualesquiera elementos a y b en A se tiene que a R4 b ≡ F y que b R4 a ≡ F. Por lo tanto la conjunción a R4 b ∧ b R4 a es falsa. Independientemente de si se cumple o no que a = b tenemos que la condicional a R4 b ∧ b R4 a Ÿ a = b siempre será verdadera. Por lo tanto, R4 es antisimétrica. Otra manera de justificar nuestra aseveración es simplemente establecer que no se cuenta con pares (a, b) y (b, a) en R4 tales que a = b. Ello se debe a que R4 es precisamente el conjunto vacío. Dado que no contamos con elementos para validar el hecho de que R4 es no antisimétrica entonces por argumento de vacuidad debemos aceptar que efectivamente es antisimétrica.



R5 = A × A es no antisimétrica ya que contamos con al menos los pares (1, 2), (2, 1) ∈ R5 pero 1 ≠ 2. R1 1 2 3 4

1 1 0 0 0

2 1 0 0 0

3 1 1 0 0

4 0 0 0 1

R2 1 2 3 4

1 1 1 0 0

a)

2 1 1 0 0

3 0 0 1 0

4 0 0 0 1

R3 1 2 3 4

1 0 1 0 0

b) R4 1 2 3 4

1 0 0 0 0

2 0 0 0 0 d)

3 0 0 0 0

4 0 0 0 0

2 0 0 0 0

3 1 0 0 0

4 0 0 0 0

c) R5 1 2 3 4

1 1 1 1 1

2 1 1 1 1

3 1 1 1 1

4 1 1 1 1

e)

Figura 3.5. Las representaciones matriciales de las relaciones a) R1, b) R2, c) R3, d) R4 y e) R5 (véase el texto para detalles). Únicamente las matrices asociadas a las relaciones R1, R3 y R4 son antisimétricas.

Los elementos de una matriz M de tamaño n × n pueden ser agrupados en tres clases: • Los elementos sobre la diagonal principal: M[i][i], i = 1, 2, 3, …, n. • Los elementos debajo de la diagonal principal. • Los elementos por encima de la diagonal principal. De acuerdo a la definición dada para caracterizar a una relación R como antisimétrica tenemos que no puede darse, en la matriz M asociada a R, la situación de que M[i][j] = M[j][i] = 1 a menos que i = j. Es decir, para todo elemento M[i][j] = 1 que se encuentre debajo de la diagonal principal de M se debe cumplir que el valor de su correspondiente elemento M[j][i], el cual está por encima de la diagonal principal, debe ser 0. De manera complementaria, para todo elemento M[i][j] = 1 que se encuentre por encima de la diagonal principal de M se debe satisfacer que el valor de su correspondiente elemento M[j][i], ubicado por debajo de la diagonal principal, debe ser 0. Ello quiere decir que basta con observar la relación que existe entre los elementos debajo de la diagonal principal con los elementos por encima de la diagonal principal para determinar si

102

Capítulo 3. Relaciones y Funciones

efectivamente una relación R es antisimétrica o no. Aplicando estas observaciones, la Figura 3.5 claramente nos muestra que únicamente las matrices asociadas a las relaciones R1, R3 y R4 son antisimétricas. Sea R una relación binaria de un conjunto A hacia sí mismo. Se dice que la relación R es Transitiva si para todos los pares (a, b) y (b, c) en R se cumple que el par (a, c) también está en R. Simbólicamente tendremos: La relación binaria R de A hacia A es Transitiva ⇔ (∀a, b, c ∈ A)(a R b ∧ b R c Ÿ a R c) Obtengamos la negación de la proposición general con cuantificador universal: ¬(∀a, b, c ∈ A)(a R b ∧ b R c Ÿ a R c) ≡ (∃a, b, c ∈ A)(¬(a R b ∧ b R c Ÿ a R c)) ≡ (∃a, b, c ∈ A)(¬(¬(a R b ∧ b R c) ∨ a R c)) ≡ (∃a, b, c ∈ A)(¬((a R b ∨ b R c) ∨ a R c)) ≡ (∃a, b, c ∈ A)(¬(a R b ∨ b R c) ∧ a R c) ≡ (∃a, b, c ∈ A)(a R b ∧ b R c ∧ a R c)

(Propiedad del Condicional) (Ley de D’Morgan) (Ley de D’Morgan) (Ley de D’Morgan)

Es decir, tendremos que una relación será No Transitiva si se cumple que existen pares (a, b) y (b, c) tales que ambos están en R pero también se cumple que el par (a, c) no está en R. Simbólicamente se establece como: La relación binaria R de A hacia A es no transitiva ⇔ (∃a, b, c ∈ A)(a R b ∧ b R c ∧ a R c) •

Ejemplos: R1 = {(1,1), (1,2), (2,3), (1,3), (4,4)} es transitiva ya que: o 1 R1 1 ∧ 1 R1 1 Ÿ 1 R1 1 ≡ V ∧ V Ÿ V ≡ V. o 4 R1 4 ∧ 4 R1 4 Ÿ 4 R1 4 ≡ V ∧ V Ÿ V ≡ V. o 1 R1 1 ∧ 1 R1 2 Ÿ 1 R1 2 ≡ V ∧ V Ÿ V ≡ V. o 1 R1 2 ∧ 2 R1 3 Ÿ 1 R1 3 ≡ V ∧ V Ÿ V ≡ V. o Nótese que existen aún más combinaciones de pares por revisar ya que la definición de transitividad nos exige que formemos pares de la forma (a, b), (b, c) donde a, b y c son tomados del conjunto A = {1, 2, 3, 4}. Por ejemplo, consideremos a los pares (2, 3) y (3, 1) formados a partir de a = 2, b = 3 y c = 1. Se debe validar que con esta instancia la proposición a R1 b ∧ b R1 c Ÿ a R1 c sea verdadera. Tenemos que el par (2, 3) efectivamente está en R1 mientras que los pares (3, 1) y (2, 1) no están. Por lo tanto tenemos que el antecedente 2 R1 3 ∧ 3 R1 1 es falso así como el consecuente 2 R1 1. Sin embargo, sabemos que F Ÿ F ≡ V. Realmente el caso que nos debe ocupar es aquel en donde el antecedente a R1 b ∧ b R1 c sea verdadero y el consecuente a R c sea falso ya que entonces tenemos la instancia V Ÿ F ≡ F. En esta situación tanto el par (a, b) como el par (b, c) están en la 103

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

relación pero el par esperado (a, c) no lo está. Entonces, en general es claro que si se considera un par que no está en la relación el antecedente a R1 b ∧ b R1 c es falso pero a final de cuentas la condicional será verdadera. Operacionalmente esto nos dice que para determinar si la relación es transitiva o no se deben a poner a prueba únicamente las combinaciones (a, b) y (b, c) tales que ambos pares estén en la relación. Para el caso de la relación R1 tenemos que únicamente hay 4 combinaciones a considerar. •

R2 = {(1,1), (1,2), (2,1), (2,2), (3,3), (4,4)} es transitiva ya que: o 1 R2 1 ∧ 1 R2 1 Ÿ 1 R2 1 ≡ V ∧ V Ÿ V ≡ V. o 2 R2 2 ∧ 2 R2 2 Ÿ 2 R2 2 ≡ V ∧ V Ÿ V ≡ V. o 3 R2 3 ∧ 3 R2 3 Ÿ 3 R2 3 ≡ V ∧ V Ÿ V ≡ V. o 4 R2 4 ∧ 4 R2 4 Ÿ 4 R2 4 ≡ V ∧ V Ÿ V ≡ V. o 1 R2 2 ∧ 2 R2 1 Ÿ 1 R2 1 ≡ V ∧ V Ÿ V ≡ V. o 2 R2 2 ∧ 2 R2 1 Ÿ 2 R2 1 ≡ V ∧ V Ÿ V ≡ V. o 2 R2 1 ∧ 1 R2 1 Ÿ 2 R2 1 ≡ V ∧ V Ÿ V ≡ V.



R3 = {(1,3), (2,1)} es no transitiva ya que (2, 1) y (1, 3) están ambos en R3, pero el par esperado (2, 3) no está en R3. Esto hace que la proposición 2 R3 1 ∧ 1 R3 3 ∧ 2 R3 3 sea verdadera.



R4 = ∅ es transitiva: o Para cualquier combinación de la forma (a, b), (b, c) donde a, b y c son tomados del conjunto A = {1, 2, 3, 4} se tiene que la condicional a R4 b ∧ b R4 c Ÿ a R4 c se hará verdadera ya que siempre se tendrá la instancia F ∧ F Ÿ F ≡ V. Por lo tanto, R4 es transitiva. Otra manera de justificar nuestra aseveración es simplemente establecer que no se cuenta con pares (a, b) y (b, c) en R4 y el par (a, c) que no esté en R4. Ello se debe a que R4 es precisamente el conjunto vacío. Dado que no contamos con elementos para validar el hecho de que R4 es no transitiva entonces por argumento de vacuidad debemos aceptar que efectivamente es transitiva.



R5 = A × A es transitiva ya que para cualquier combinación de la forma (a, b), (b, c) se tiene que tanto (a, b) como (b, c) están en R5. Pero además, el par esperado (a, c) también está en R5. Ello se debe a que A × A se compone por todos los posibles pares que se pueden formar con elementos tomados de A = {1, 2, 3, 4}.

Veamos ahora un ejemplo en donde se considera al conjunto de los enteros ] . Claramente este conjunto tiene un número infinito de elementos. Por lo tanto el uso de una metodología de validación exhaustiva para las caracterizaciones antes definidas no será factible así como también la consideración de su correspondiente matriz. Definiremos a la relación R] de ] hacia ] como: x R] y ⇔ x ≤ y

104

Capítulo 3. Relaciones y Funciones

Por ejemplo, es claro que 3 R] 5 ya que se cumple que 3 ≤ 5. Por otro lado, 5 R] 3 ya que es falso que 5 ≤ 3. Teorema 3.1: La relación binaria R] de ] hacia ] es a) reflexiva, b) no simétrica, c) antisimétrica y d) transitiva.

Demostración: a) R] es reflexiva ya que efectivamente se cumple que todo número entero x es menor o igual a si mismo. Es decir, la proposición general (∀x ∈ ] )(x ≤ x) es verdadera. b) R] es no simétrica ya que, por ejemplo, tenemos que para los números 1 y 2 ambos en ] se tiene que es verdadero que 1 ≤ 2 pero es falso que 2 ≤ 1. Este caso particular nos permite hacer que la proposición general (∃1, 2 ∈ ] )(1 ≤ 2 ∧ 2 ≤ 1) sea verdadera. c) Supongamos que se desea demostrar que R] no es antisimétrica. Ello implica que debemos encontrar dos números enteros x y y para los cuales la proposición x ≤ y ∧ y ≤ x ∧ x ≠ y es verdadera. Es claro que es simple encontrar dos enteros tales que x ≠ y. Sin embargo el problema radica en que éstos deben cumplir con que x sea menor o igual a y pero que a la vez x sea mayor o igual a y. Las únicas instancias que cumplen con este requerimiento se dan cuando x y y son iguales. Pero ello implica que la proposición x ≤ y ∧ y ≤ x ∧ x ≠ y se hará siempre falsa. En consecuencia no tenemos los elementos para demostrar que la relación R] no es antisimétrica. Por lo tanto, la proposición general (∀x, y ∈ ] )(x ≤ y ∧ y ≤ x Ÿ x = y) es verdadera y la relación R] es caracterizada como antisimétrica. d) Para demostrar que R] es transitiva debemos probar que la proposición general (∀x, y, z ∈ ] )(x ≤ y ∧ y ≤ z Ÿ x ≤ z) es verdadera. En realidad, debido al ordenamiento con que cuentan los números en R] , es claro que si contamos con enteros x, y, z tales que cumplen con x ≤ y y y ≤ z entonces se garantiza que x y z se relacionan también bajo R] ya que x es menor o igual tanto a y como a z, y a su vez z es mayor o igual tanto a x como a y. Por lo tanto x ≤ z. Por otro lado, sin consideramos números x, y, z que desde un principio no cumplen con el antecedente x ≤ y ∧ y ≤ z, independientemente del valor de verdad o falsedad del consecuente x ≤ z tenemos que la proposición x ≤ y ∧ y ≤ z Ÿ x ≤ z será verdadera. En conclusión, R] es transitiva.

105

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Ahora consideremos al conjunto de los números naturales ` = {1, 2, 3, 4, 5, …}. Definimos a la relación R` como R` = {(x, y): x + 3y = 12}

Es decir, R` se conforma por aquellos pares de números naturales (x, y) tales que al sustituirlos en la expresión x + 3y se tiene el valor final 12. Se determinarán en primer lugar los elementos de R` . Nótese que x + 3y = 12 ⇔ 3y = 12 – x ⇔ y = (12 – x)/3

Es decir, hemos expresado a y en términos de x. Por lo tanto para determinar los pares asignaremos valores a x obteniendo con ello el correspondiente valor para y. Es claro que (12 – x)/3 es un cociente que para ciertos valores de x puede no proporcionarnos un número natural. • • • • • • • • • • • •

x = 1: x = 2: x = 3: x = 4: x = 5: x = 6: x = 7: x = 8: x = 9: x = 10: x = 11: x = 12:

y = (12 – 1)/3 = 11/3 ∉ ` . y = (12 – 2)/3 = 10/3 ∉ ` . y = (12 – 3)/3 = 9/3 = 3 ∈ ` . y = (12 – 4)/3 = 8/3 ∉ ` . y = (12 – 5)/3 = 7/3 ∉ ` . y = (12 – 6)/3 = 6/3 = 2 ∈ ` . y = (12 – 7)/3 = 5/3 ∉ ` . y = (12 – 8)/3 = 4/3 ∉ ` . y = (12 – 9)/3 = 3/3 = 1 ∈ ` . y = (12 – 10)/3 = 2/3 ∉ ` . y = (12 – 11)/3 = 1/3 ∉ ` . y = (12 – 12)/3 = 0/3 = 0 ∉ ` .

Nótese que para todo x > 12 se tiene que y = (12 – x)/3 será un número negativo el cual obviamente no está en ` . Por lo tanto la relación se conforma únicamente por 3 pares:

R` = {(x, y): x + 3y = 12} = {(3, 3), (6, 2), (9, 1)}

Teorema 3.2: La relación binaria R` de ` hacia ` es a) no reflexiva, b) no simétrica, c) antisimétrica y d) transitiva.

106

Capítulo 3. Relaciones y Funciones

Demostración: a) R` es no reflexiva ya que existe el número natural 1 tal que (1,1) ∉ R` . O en otras palabras, con x = y = 1 se tiene que x + 3y ≠ 12. Por lo tanto la proposición general (∃1 ∈ ` )((1,1) ∉ R` ) es verdadera. b) R` es no simétrica ya que existen los números naturales 6 y 2 tales que (6, 2) ∈ R` pero el par (2, 6) no está en R` . Esto permite verificar que la proposición general (∃6, 2 ∈ ` )(6 R` 2 ∧ 2 R` 6) es verdadera. c) En este caso se debe probar que la proposición (∀x, y ∈ ` )(x R` y ∧ y R` x Ÿ x = y) es verdadera. Veamos: • (3, 3) ∈ R` ∧ (3, 3) ∈ R` Ÿ 3 = 3 ≡ V ∧ V Ÿ V ≡ V • (6, 2) ∈ R` ∧ (2, 6) ∈ R` Ÿ 6 = 2 ≡ V ∧ F Ÿ F ≡ V • (9, 1) ∈ R` ∧ (1, 9) ∈ R` Ÿ 9 = 1 ≡ V ∧ F Ÿ F ≡ V • Para cualesquiera naturales x, y tales que (x, y) ∉ R` tendremos que el antecedente x R` y ∧ y R` x será falso. Independientemente de si el consecuente x = y es verdadero o falso tendremos siempre que la condicional será verdadera. Por lo tanto la proposición (∀x, y ∈ ` )(x R` y ∧ y R` x Ÿ x = y) es verdadera y R` es una relación antisimétrica.

d) Para probar que la relación R` es transitiva debemos verificar que la proposición general (∀x, y, z ∈ ` )(x R` y ∧ y R` z Ÿ x R` z) es verdadera. Nótese que con cualquier combinación de naturales x, y, z, incluyendo aquellos que forman pares en R` , se tiene que el antecedente x R` y ∧ y R` z será falso. De manera independiente a si el consecuente x R` z es verdadero o falso tendremos en todo caso que la condicional será verdadera. Por lo tanto R` es transitiva.

Sea R una relación binaria de un conjunto A hacia sí mismo. Se dice que R es una Relación de Orden Parcial si es Reflexiva, Antisimétrica y Transitiva. Por ejemplo, de acuerdo al Teorema 3.1 tenemos que la relación binaria R] de ] hacia ] es reflexiva, no simétrica, antisimétrica y transitiva. Por lo tanto, la relación R] , sustentada en el uso del operador ≤, es una Relación de Orden Parcial sobre el conjunto de los números enteros.

107

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Si A es un conjunto diferente del vacío en el que está definida una relación de orden parcial R y además tiene la propiedad de que (∀a, b ∈ A)(a R b ∨ b R a) Entonces se dice que R es una Relación de Orden Total y también se dice que el conjunto A está Totalmente Ordenado. Teorema 3.3: La relación binaria R] de ] hacia ] es una Relación de Orden Total.

Demostración: Por el Teorema 3.1 la relación R] es caracterizada como Relación de Orden Parcial. Ahora se debe probar que para R] la proposición general (∀x, y ∈ ] )(x R] y ∨ y R] x) es verdadera. Sin embargo es claro que para cualquier par de números enteros x, y tales x ≠ y que se tiene que x ≤ y o bien que y ≤ x. Si x = y entonces se cumple tanto x ≤ y como y ≤ x. En consecuencia la relación R] es una Relación de Orden Total y de hecho el conjunto de los números enteros, bajo la relación R] es un conjunto Totalmente Ordenado.

3.2 Relaciones de Equivalencia Sea R una relación binaria de un conjunto A hacia sí mismo. Se dice que R es una Relación de Equivalencia si es Reflexiva, Simétrica y Transitiva. Si R es una Relación de Equivalencia sobre un conjunto A, entonces al conjunto [a] = {x ∈ A: x R a} se le llamará Clase de Equivalencia del elemento a y se dice que a es el Representante de tal conjunto. Dado un conjunto A y la relación de equivalencia R sobre A, al conjunto de todas las clases de equivalencia se le llama Conjunto Cociente y se le denota por: A/R = {[a]: a ∈ A} Considérese el siguiente ejemplo. Sea la relación X sobre el conjunto S = {1, 2, 3}: X = {(1,1), (1,2), (2,1), (2,2), (3,3)} •

108

X es claramente reflexiva ya que para todo elemento a en S se tiene que a X a. En particular hemos hecho referencia a los pares (1, 1), (2, 2) y (3, 3).

Capítulo 3. Relaciones y Funciones



La simetría de X es validada de la siguiente manera: o 1X1Ÿ1X1≡VŸV≡V o 2X2Ÿ2X2≡VŸV≡V o 3X3Ÿ3X3≡VŸV≡V o 1X2Ÿ2X1≡VŸV≡V o 2X1Ÿ1X2≡VŸV≡V • En forma similar validamos también el hecho de que X es transitiva: o 1X1∧1X1Ÿ1X1≡V∧VŸV≡V o 2X2∧2X2Ÿ2X2≡V∧VŸV≡V o 3X3∧3X3Ÿ3X3≡V∧VŸV≡V o 1X2∧2X1Ÿ1X1≡V∧VŸV≡V o 1X1∧1X2Ÿ1X2≡V∧VŸV≡V o 1X2∧2X2Ÿ1X2≡V∧VŸV≡V o 2X2∧2X1Ÿ2X1≡V∧VŸV≡V o 2X1∧1X1Ÿ2X1≡V∧VŸV≡V o 2X1∧1X2Ÿ2X2≡V∧VŸV≡V Por lo tanto la relación X es una Relación de Equivalencia. Ahora bien, las clases de equivalencia del conjunto S estarán dadas por: • [1] = {a ∈ S: a X 1} = {1, 2} • [2] = {a ∈ S: a X 2} = {1, 2} • [3] = {a ∈ S: a X 3} = {3} Dado que las clases [1] y [2] son iguales entonces el conjunto cociente estará dado por S / X = {[1], [3]} = {{1, 2}, {3}} Ahora estableceremos como un ejemplo interesante a una relación sobre el conjunto de los números enteros. A esta relación la caracterizaremos como relación de equivalencia y posteriormente analizaremos a sus clases de equivalencia a fin de construir su conjunto cociente. Sea un m un entero positivo fijo. Se dice que dos enteros a y b son Congruentes Modulo m, denotado por a ≡ b(mod m) si m divide a a – b. Por ejemplo: Sea m = 4 entonces: • 11 ≡ 3 (mod 4) ya que 4 divide a 11 – 3 = 8. • 22 ≡ 6 (mod 4) ya que 4 divide a 22 – 6 = 16. • 22 ≡ 7 (mod 4) debido a que 4 no divide a 22 – 7 = 15. Ahora sea consideremos al conjunto de los enteros ] y sea m un entero positivo fijo. Definimos a la relación Rm sobre ] como: x Rm y ⇔ x ≡ y (mod m)

Tenemos ahora el siguiente: Teorema 3.4: La relación Rm sobre ] es una Relación de Equivalencia.

109

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Demostración: Debemos probar que Rm se caracteriza como reflexiva, simétrica y transitiva. •

Reflexividad: Sea x cualquier entero en ] . Entonces es claro que x ≡ x (mod m) ya que m efectivamente divide a x – x = 0. Por lo tanto la proposición (∀x ∈ ] )(x Rm x) es verdadera.



Simetría: Sean x, y cualesquiera elementos de ] . Supongamos que x ≡ y (mod m) es verdadero. Ello implica que m efectivamente divide a x – y. Pero nótese que m también divide a –(x – y). Dado que –(x – y) = -x + y = y – x entonces se concluye que y ≡ x (mod m). Por otro lado, si se eligen enteros x y y tales que x ≡ y (mod m) es falso tenemos que la condicional x Rm y Ÿ y Rm x es verdadera independientemente del valor del consecuente y Rm x. Por lo tanto hemos verificado la veracidad de la proposición general (∀x, y ∈ ] )(x Rm y Ÿ y Rm x).



Transitividad: Sean x, y, z cualesquiera elementos en ] . Si se cumple que x ≡ y (mod m) y y ≡ z (mod m) entonces x – y es divisible por m y a su vez y – z es divisible también por m. Consideremos la suma (x – y) + (y – z) = x – z. La pregunta a resolver ahora es si x – z es divisible por m. Sean s1 = (x – y)/m y s2 = (y – z)/m. Es claro que s1 y s2 son números enteros. Entonces x – y y y – z pueden ser reescritos como s1⋅m y s2⋅m, respectivamente: ( x − y) + ( y − z) = x − z Ÿ s1 ⋅ m + s2 ⋅ m = x − z Ÿ m( s1 + s2 ) = x − z

El lado izquierdo de la igualdad nos dice que x – z puede ser expresado como m(s1 + s2) pero más importante aún: que m es factor de x – z. Por lo tanto x – z es divisible por m y en consecuencia se tiene que x ≡ z (mod m). Se concluye que la proposición general (∀x, y, z ∈ ] )(x Rm y ∧ y Rm z Ÿ x Rm z) es verdadera. Tenemos entonces los elementos para caracterizar a la relación Rm como una Relación de Equivalencia.

110

Capítulo 3. Relaciones y Funciones

Ahora determinaremos a las clases de equivalencia para el conjunto de los enteros bajo la relación Rm con m = 5 (x R5 y ⇔ x ≡ y (mod 5)). Por definición de clase de equivalencia debemos identificar a los siguientes conjuntos: [a] = {x ∈ ] : x R5 a} Es decir, debemos considerar a cada entero a en ] como representante de la clase de equivalencia [a] y determinar que elementos la conforman. Estos elementos son aquellos enteros x que satisfacen x ≡ a (mod 5). Iniciemos con a = 0. En esta instancia tenemos que [0] = {x ∈ ] : x R5 0} Un entero x estará en [0] si x – 0 = x es divisible por 5. Claramente tendremos a todos los múltiplos de 5 en [0] incluyendo al cero mismo: [0] = {…, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, …} Ahora construyamos a la clase de equivalencia con representante a = 1: [1] = {x ∈ ] : x R5 1} Un entero x estará en [1] si x – 1 es divisible por 5. Es claro que los elementos en [1] serán aquellos para los cuales x – 1 es igual a un entero múltiplo de 5: [1] = {…, -19, -14, -9, -4, 1, 6, 11, 16, 21, 26, …} En el caso de la clase de equivalencia [2] = {x ∈ ] : x R5 2} sus miembros serán aquellos enteros para los cuales x – 2 es un entero múltiplo de 5: [2] = {…, -18, -13, -8, -3, 2, 7, 12, 17, 22, 27, …} En este punto debe ser claro como construir a las clases de equivalencia [3] y [4]: [3] = {x ∈ ] : x R5 3} = {…, -17, -12, -7, -2, 3, 8, 13, 18, 23, 28, …} [4] = {x ∈ ] : x R5 4} = {…, -16, -11, -6, -1, 4, 9, 14, 19, 24, 29, …} Ahora bien, tenemos la situación en la cual a = 5 actuará como representante de la clase de equivalencia [5]. Nos es evidente que los elementos x en [5] serán aquellos para los cuales x – 5 es divisible por 5. Sin embargo, nótese que si x – 5 es divisible por 5 entonces x−5 x 5 = − 5 5 5

111

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Lo que nos indica que x desde un principio era también múltiplo de 5. Es claro que el conjunto de enteros a considerar es el mismo que se uso para definir a la clase de equivalencia [0]. Por lo tanto, tenemos que [5] = {x ∈ ] : x R5 5} = {…, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, …} = [0] Ahora veamos que una situación similar se presenta con la clase de equivalencia con representante a = 6 ya que los elementos que la conformarán son aquellos para los cuales x – 6 es divisible por 5. Pero nótese que: x − 6 ( x − 1) − 5 ( x − 1) 5 = = − 5 5 5 5

Por lo tanto, tenemos que x – 1 es igual a un entero múltiplo de 5. Pero este requerimiento lo presentaron los elementos que en su momento formaron a la clase de equivalencia [1]. En consecuencia: [6] = {x ∈ ] : x R5 6} = {…, -19, -14, -9, -4, 1, 6, 11, 16, 21, 26, …} = [1] En el caso de la clase de equivalencia con representante a = 7 se observa que los elementos que la conforman son aquellos para los cuales x – 7 es un número múltiplo de 5. Pero x – 7 = (x – 2) – 5, y de manera muy similar a la clase antes formada, tenemos que x – 2 debe ser un múltiplo de 5. Estos elementos estuvieron presentes en la clase con representante a = 2. Por lo tanto tendremos: [7] = {x ∈ ] : x R5 7} = {…, -18, -13, -8, -3, 2, 7, 12, 17, 22, 27, …} = [2] Los razonamientos anteriores nos proporcionan elementos para establecer que las clases de equivalencia con representantes a = 8 y a = 9 tendrán los mismos elementos que las clases [3] y [4] respectivamente: [8] = {x ∈ ] : x R5 8} = {…, -17, -12, -7, -2, 3, 8, 13, 18, 23, 28, …} = [3] [9] = {x ∈ ] : x R5 9} = {…, -16, -11, -6, -1, 4, 9, 14, 19, 24, 29, …} = [4] Si se desea la clase de equivalencia con representante a = 10 tendremos que los elementos que la formen serán aquellos x para los cuales x – 10 es divisible por 5. Pero nótese que éstos deben ser entonces múltiplos de 5. Por lo tanto: [10] = [0] Observemos que de continuar con nuestro proceso, y gracias a los razonamientos antes efectuados, podemos afirmar que:

112

Capítulo 3. Relaciones y Funciones

• [0] = [5] = [10] = [15] = [20] = … • [1] = [6] = [11] = [16] = [21] = … • [2] = [7] = [12] = [17] = [22] = … • [3] = [8] = [13] = [18] = [23] = … • [4] = [9] = [14] = [19] = [24] = … Ello implica que el conjunto de los números enteros ] bajo la relación R5 se particiona únicamente en 5 clases de equivalencia: [0], [1], [2], [3] y [4]. Ello se debe a que, por ejemplo, las clases [0], [5], [10], [15], … son en realidad el mismo conjunto. Por lo tanto el conjunto cociente está dado por: ] /R5

= {[0], [1], [2], [3], [4]}

3.3 Funciones Considérese a una relación R de un conjunto A hacia un conjunto B. Decimos que R es una Función si satisface las siguientes dos propiedades: • (∀a ∈ A)(∃b ∈ B)(a R b) • (∀a ∈ A)(∀b1, b2 ∈ B)(a R b1 ∧ a R b2 Ÿ b1 = b2) Tomemos las dos proposiciones generales que nos definen a una función y obtengamos, mediante la aplicación del Álgebra Proposicional, sus correspondientes negaciones: •

¬(∀a ∈ A)(∃b ∈ B)(a R b) ≡ (∃a ∈ A)(∀b ∈ B)(a R b)



¬(∀a ∈ A)(∀b1, b2 ∈ B)(a R b1 ∧ a R b2 Ÿ b1 = b2) ≡ (∃a ∈ A)( ∃b1, b2 ∈ B)(¬(a R b1 ∧ a R b2 Ÿ b1 = b2)) ≡ (∃a ∈ A)( ∃b1, b2 ∈ B)(¬(¬(a R b1 ∧ a R b2) ∨ b1 = b2)) (Propiedad del Condicional) ≡ (∃a ∈ A)( ∃b1, b2 ∈ B)(¬((a R b1 ∨ a R b2) ∨ b1 = b2)) (Ley de D’Morgan) ≡ (∃a ∈ A)( ∃b1, b2 ∈ B)(a R b1 ∧ a R b2 ∧ b1 ≠ b2) (Ley de D’Morgan)

Tenemos los criterios para establecer la situación en la que una relación no puede ser caracterizada como una función. Decimos que R no es una función si una de las dos siguientes propiedades se cumple: • (∃a ∈ A)(∀b ∈ B)(a R b) • (∃a ∈ A)( ∃b1, b2 ∈ B)(a R b1 ∧ a R b2 ∧ b1 ≠ b2) Por ejemplo, consideremos al conjunto de los números reales \ . Sea R una relación de \ hacia \ definida como: R/ = {(x, y): y = 1/x}

113

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

¿Puede R/ ser caracterizada como una función? La primer condición que se debe cumplir establece que para todo x en \ debe existir su correspondiente y, también en \ , tal que y = 1/x. Si manipulamos el cociente podemos encontrar que de hecho x y y son recíprocos: y = 1/x Ÿ xy = 1

Entonces es claro que casi para cualquier número real x existe su correspondiente recíproco. Existe una excepción: cuando x = 0. Si tomamos la expresión xy = 1 tenemos entonces que buscamos un número y con la propiedad de que al ser multiplicado por x = 0 el resultado sea 1: 0y = 1 Evidentemente, por propiedades de los números reales, tenemos que 0y = 1, para cualquier y en \ , es una contradicción. Ello implica que la proposición (∃0 ∈ \ )(∀y ∈ \ )(0 R/ y) es verdadera. Por lo tanto la proposición general (∀x ∈ \ )(∃y ∈ \ )(x R/ y) es falsa. En consecuencia la relación R/ = {(x, y): y = 1/x} no es una función. Ahora se redefinirá a la relación R/ antes presentada de la siguiente manera: Sea R/ una relación del conjunto \ \ {0} hacia el conjunto \ definida como: R/ = {(x, y): y = 1/x} Nótese que el único cambio efectuado tiene que ver con el conjunto de valores que puede tomar x, el cual ahora es el conjunto de todos los números reales excepto el cero. Ahora es claro que y = 1/x nos proporciona el recíproco de cualquier número x ≠ 0. El recíproco y es también un número real. Por lo tanto es verdadera la proposición (∀x ∈ \ \ {0})(∃y ∈ \ )(x R/ y) R/ no puede ser declarada aún como una función ya que necesitamos verificar que la proposición general (∀x ∈ \ \ {0})(∀y1, y2 ∈ \ )(x R/ y1 ∧ x R/ y2 Ÿ y1 = y2) es verdadera. Sean x, y1 y y2 cualesquiera reales para los cuales la proposición x R/ y1 ∧ x R/ y2 es verdadera. Por lo tanto se cumple: 1 1 ∧ y2 = x x Ÿ xy1 = 1 ∧ xy2 = 1 y1 =

Ÿ xy1 = xy2 Ÿ y1 = y2

Es decir, acabamos de probar, auxiliados por la aplicación del álgebra de los números reales, que la conjunción inicial tiene como consecuencia que los números y1 y y2 son de hecho el mismo número. Por lo tanto hemos verificado que x R/ y1 ∧ x R/ y2 implica que

114

Capítulo 3. Relaciones y Funciones

y1 = y2. En conclusión (∀x ∈ \ \ {0})(∀y1, y2 ∈ \ )(x R/ y1 ∧ x R/ y2 Ÿ y1 = y2) es verdadera. Dado que R/ satisface las dos propiedades: • (∀x ∈ \ \ {0})(∃y ∈ \ )(x R/ y) • (∀x ∈ \ \ {0})(∀y1, y2 ∈ \ )(x R/ y1 ∧ x R/ y2 Ÿ y1 = y2) Entonces R/ es caracterizada como una función.

Sea R una relación del conjunto A hacia el conjunto B. Si R es una Función entonces se le denotará por R: A→ B a ∼ R (a )

Donde el conjunto A es el Dominio de la Función y el conjunto B su Codominio. Es este sentido, la expresión R:A → B debe leerse como “Sea la función R con dominio A y codominio B”. Por otro lado, la expresión a ∼ R(a) se lee como “El elemento a en el dominio es relacionado con el elemento R(a) en el codominio.” Por ejemplo, la función R/ previamente presentada queda expresada ahora como: R/ : \ \{0} → \ x  R/ ( x) =

1 x

De hecho la expresión R(x) = 1/x también pudo haber sido escrita como y = 1/x haciendo referencia al hecho de que x se relaciona mediante R/ con el elemento y. Veamos el siguiente ejemplo. Sea f la relación que va de A = {a, b, c, d} hacia B = {r, s, t, u} definida como: f = {(a, s), (b, u), (c, r), (d, s)}

El dominio y codominio de f están dados por {a, b, c, d} y {r, s, t, u} respectivamente. Verifiquemos si f es una función. • Por probar que la proposición (∀x ∈ A)(∃y ∈ B)(x f y) es verdadera. Tomaremos cada elemento x de A y determinaremos si cuenta con un elemento y en B tal que (x, y) esté presente en la relación. o Para x = a ∈ A existe y = s ∈ B tal que (a, s) ∈ f. o Para x = b ∈ A existe y = u ∈ B tal que (b, u) ∈ f. o Para x = c ∈ A existe y = r ∈ B tal que (c, r) ∈ f. o Para x = d ∈ A existe y = s ∈ B tal que (d, s) ∈ f. Por lo tanto la proposición general (∀x ∈ A)(∃y ∈ B)(x f y) es verdadera. • Ahora se verificará que (∀x ∈ A)(∀y1, y2 ∈ B)(x R y1 ∧ x R y2 Ÿ y1 = y2) también es verdadera. Se tomará a cada elemento x de A y se formarán todos los posibles pares de elementos y1, y2 tomados de B tales que (x, y1) y (x, y2) ∈ f. Para cada uno de estos tríos x, y1 y y2 se verificará si la condicional x R y1 ∧ x R y2 Ÿ y1 = y2 es verdadera.

115

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

o Para x = a ∈ A existen y1 y y2 tales que y1 = y2 = s. En este caso a R s ∧ a R s Ÿ s = s ≡ V. Nótese que para todo par (y1, y2) diferente de (s, s) se tiene que a R y1 ∧ a R y2 Ÿ y1 = y2 ≡ F ∧ F Ÿ F ≡ V. o Para x = b ∈ A existen y1 y y2 tales que y1 = y2 = u: b R u ∧ b R u Ÿ u = u ≡ V. Por otro lado, para todo par (y1, y2) diferente de (u, u) se tiene que b R y1 ∧ b R y2 Ÿ y1 = y2 ≡ F ∧ F Ÿ F ≡ V. o Para x = c ∈ A existen y1 y y2 tales que y1 = y2 = r: c R r ∧ c R r Ÿ r = r ≡ V. Para todo par (y1, y2) diferente de (r, r) se tiene que c R y1 ∧ c R y2 Ÿ y1 = y2 ≡ F ∧ F Ÿ F ≡ V. o Finalmente, cuando x = d ∈ A existen y1 y y2 tales que y1 = y2 = s: d R s ∧ d R s Ÿ s = s ≡ V. Para todo par (y1, y2) diferente de (s, s) se tiene que d R y1 ∧ d R y2 Ÿ y1 = y2 ≡ F ∧ F Ÿ F ≡ V. Hemos verificado que toda posible instancia de sustitución para la proposición x R y1 ∧ x R y2 Ÿ y1 = y2 hace que ésta sea siempre verdadera. Por lo tanto concluimos que la proposición general (∀x ∈ A)(∀y1, y2 ∈ B)(x R y1 ∧ x R y2 Ÿ y1 = y2) es verdadera. En conclusión, f es efectivamente una función. Por lo tanto podemos establecer:

f: A → x



B f ( x) = y

En ocasiones, y sobre todo cuando dominio y codominio son ambos conjuntos con número finito de elementos, es posible reemplazar la notación general x ∼ f(x) = y mostrando explícitamente como se relacionan entre sí los elementos en el dominio con los elementos en el codominio. De tal forma, que para nuestra función f = {(a, s), (b, u), (c, r), (d, s)} tendríamos: f: A → a ∼ b ∼ c ∼ d ∼

B f (a) = s f (b) = u f (c ) = r f (d ) = s

Ahora consideremos al siguiente conjunto A = {1, 2, 3} y sea la relación h que va del conjunto A hacia si mismo dada por: h = {(1, 3), (2, 1), (1, 2), (3, 1)} Probemos que la proposición (∀x ∈ A)(∃y ∈ A)(x h y) es verdadera: • x = 1: Existe un y = 3 ∈ A tal que 1 h 3. Nótese que otra opción pudo haber sido y = 2. • x = 2: Existe un y = 1 ∈ A tal que 2 h 1. • x = 3: Existe un y = 1 ∈ A tal que 3 h 1. Por lo tanto (∀x ∈ A)(∃y ∈ A)(x h y) ≡ V. Ahora veamos si se cumple la veracidad de la proposición (∀x ∈ A)(∀y1, y2 ∈ A)(x h y1 ∧ x h y2 Ÿ y1 = y2). 116

Capítulo 3. Relaciones y Funciones



Cuando x = 1 tenemos que existen un par de elementos en el codominio que hacen que la proposición 1 h y1 ∧ 1 h y2 Ÿ y1 = y2 sea falsa. Estos elementos son y1 = 3 y y2 = 2. Ello implica que la proposición general (∃1 ∈ A)(∃2,3 ∈ A)(1 h 2 ∧ 1 h 3 ∧ 2 ≠ 3) es verdadera. Por lo tanto se concluye que la relación h no es una función.

Se dice que una función f:A → B es Inyectiva si se cumple con la siguiente propiedad: (∀a1, a2 ∈ A)(a1 ≠ a2 Ÿ f(a1) ≠ f(a2)) Notemos que mediante el uso de nuestra Álgebra Proposicional podemos encontrar otra forma de expresar a la proposición a1 ≠ a2 Ÿ f(a1) ≠ f(a2): a1 ≠ a2 Ÿ f(a1) ≠ f(a2) ≡ ¬(a1 = a2) Ÿ ¬(f(a1) = f(a2)) ≡ ¬(¬(a1 = a2)) ∨ ¬(f(a1) = f(a2) ≡ (a1 = a2) ∨ ¬(f(a1) = f(a2)) ≡ ¬(f(a1) = f(a2)) ∨ (a1 = a2) ≡ f(a1) = f(a2) Ÿ a1 = a2

(Propiedad del Condicional) (Propiedad de la Doble Negación) (Propiedad Conmutativa de la Disyunción) (Propiedad del Condicional)

Por lo tanto contamos con una forma alternativa para caracterizar a una función como inyectiva: f:A → B es Inyectiva ⇔ (∀a1, a2 ∈ A)(f(a1) = f(a2) Ÿ a1 = a2) Ahora determinemos la negación de la proposición que caracteriza a una función como inyectiva a fin de establecer el criterio para caracterizar a una función como no inyectiva: ¬(∀a1, a2 ∈ A)(a1 ≠ a2 Ÿ f(a1) ≠ f(a2)) ≡ (∃a1, a2 ∈ A)(¬(a1 ≠ a2 Ÿ f(a1) ≠ f(a2))) ≡ (∃a1, a2 ∈ A)(¬(¬(a1 ≠ a2) ∨ f(a1) ≠ f(a2))) ≡ (∃a1, a2 ∈ A)(¬(a1 = a2 ∨ f(a1) ≠ f(a2))) ≡ (∃a1, a2 ∈ A)(¬(a1 = a2) ∧ ¬( f(a1) ≠ f(a2))) ≡ (∃a1, a2 ∈ A)(a1 ≠ a2 ∧ ¬( f(a1) ≠ f(a2))) ≡ (∃a1, a2 ∈ A)(a1 ≠ a2 ∧ f(a1) = f(a2))

(Propiedad del Condicional) (¬(a1 ≠ a2) ≡ a1 = a2) (Ley de D’Morgan) (¬(a1 = a2) ≡ a1 ≠ a2) (¬( f(a1) ≠ f(a2)) ≡ f(a1) = f(a2))

Una función f:A → B es No Inyectiva si se cumple con la siguiente propiedad: (∃a1, a2 ∈ A)(a1 ≠ a2 ∧ f(a1) = f(a2))

117

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Consideremos el siguiente ejemplo. Sea la función f dada por: f: \ → x



\ f ( x) =| x |

Recuérdese que | x | denota al valor absoluto del número real x. Deseamos verificar que f(x) = | x | es una función inyectiva. Por definición, debemos probar que la proposición general (∀x1, x2 ∈ A)(x1 ≠ x2 Ÿ | x1 | ≠ | x2 |) es verdadera. Ahora bien, recordemos que el valor absoluto puede definirse de la siguiente manera: x = x2

Precisamente esta última expresión nos proporciona información sumamente útil. Ello se debe a que independientemente de que x sea positivo o negativo o cero, el resultado de x 2 es siempre un no negativo. Y esto abre la posibilidad de considerar números reales diferentes pero cuyo valor absoluto sea el mismo. Por ejemplo, sean x1 = 2 y x2 = -2. Es claro que se cumple con el requisito de que x1 ≠ x2. Pero es claro también que |x1| = |x2| = 2. Ello implica que hemos encontrado una instancia de sustitución para la proposición x1 ≠ x2 Ÿ | x1 | ≠ | x2 | que la hace falsa. En consecuencia, la proposición general (∀x1, x2 ∈ A)(x1 ≠ x2 Ÿ | x1 | ≠ | x2 |) es falsa. O de manera equivalente, tenemos que (∃-2, 2 ∈ \ )(-2 ≠ 2 ∧ | -2 | = | 2 |) es verdadera. Por lo tanto la función valor absoluto es no inyectiva.

Ahora consideremos a la función g dada por: g: \ → \ x ∼ g ( x) = 2 x + 3 Hemos de probar que la proposición general (∀x1, x2 ∈ A)(x1 ≠ x2 Ÿ 2x1 + 3 ≠ 2x2 + 3) es verdadera. En este caso utilicemos la forma alternativa (∀x1, x2 ∈ A)(2x1 + 3 = 2x2 + 3 Ÿ x1 = x2) Sean x1 y x2 cualesquiera números reales tales que cumplen con 2x1 + 3 = 2x2 + 3. Manipulemos la igualdad utilizando nuestra Álgebra de los Números Reales: 2x1 + 3 = 2x2 + 3 Ÿ 2x1 + 3 – 3 = 2x2 + 3 - 3 Ÿ 2x1 = 2x2 Ÿ (1/2)⋅2x1 = (1/2)⋅2x2 Ÿ x1 = x2

118

Capítulo 3. Relaciones y Funciones

Es decir, partiendo de que x1 y x2 satisfacen la propiedad 2x1 + 3 = 2x2 + 3 hemos concluido que x1 = x2. Por lo tanto podemos concluir que la función g(x) = 2x + 3 es una función inyectiva. Sean X = {1, 2, 3, 4}, Y = {7, 8, 9, 10, 11} y la función h1 dada por: h1 : {1, 2,3, 4} → {7,8,9,10,11} 1 h1 (1) = 7 ∼ 2 h1 (2) = 8 ∼ 3 h1 (3) = 9 ∼ 4 h1 (4) = 10 ∼ Veamos si nuestra función efectivamente es inyectiva. Formalmente debemos considerar todos los pares de elementos distintos tomados del dominio X y verificar que sus correspondientes elementos en el codominio Y sean también diferentes: • x1 = 1, x2 = 2: 1 ≠ 2 Ÿ h1(1) ≠ h1(2) ≡ 1 ≠ 2 Ÿ 7 ≠ 8 ≡ V Ÿ V ≡ V. • x1 = 1, x2 = 3: 1 ≠ 3 Ÿ h1(1) ≠ h1(3) ≡ 1 ≠ 3 Ÿ 7 ≠ 9 ≡ V Ÿ V ≡ V. • x1 = 1, x2 = 4: 1 ≠ 4 Ÿ h1(1) ≠ h1(4) ≡ 1 ≠ 4 Ÿ 7 ≠ 10 ≡ V Ÿ V ≡ V. • x1 = 2, x2 = 3: 2 ≠ 3 Ÿ h1(2) ≠ h1(3) ≡ 2 ≠ 3 Ÿ 8 ≠ 9 ≡ V Ÿ V ≡ V. • x1 = 2, x2 = 4: 2 ≠ 4 Ÿ h1(2) ≠ h1(4) ≡ 2 ≠ 4 Ÿ 8 ≠ 10 ≡ V Ÿ V ≡ V. • x1 = 3, x2 = 4: 3 ≠ 4 Ÿ h1(3) ≠ h1(4) ≡ 3 ≠ 4 Ÿ 9 ≠ 10 ≡ V Ÿ V ≡ V. Nótese que aparentemente no hicimos la evaluación de los siguientes casos: • x1 = 2, x2 = 1 • x1 = 3, x2 = 1 • x1 = 3, x2 = 2 • x1 = 4, x2 = 1 • x1 = 4, x2 = 2 • x1 = 4, x2 = 3 Ello se debe a que el operador ≠ satisface la conmutatividad, es decir, x ≠ y es equivalente a y ≠ x. Entonces, por ejemplo, la proposición 1 ≠ 2 Ÿ h(1) ≠ h(2) es equivalente a la proposición 2 ≠ 1 Ÿ h(2) ≠ h(1). Habiendo hecho las aclaraciones correspondientes solo nos queda establecer que la función h1 es una función inyectiva. Ahora sean el dominio X = {1, 2, 3, -1, -2, -3}, el codominio Y = {1, 4, 9} y la función h2 = {(1, 1), (2, 4), (3, 9), (-1, 1), (-2, 4), (-3, 9)}. Determinemos si h2 es inyectiva: • x1 = 1, x2 = 2: 1 ≠ 2 Ÿ h2(1) ≠ h2(2) ≡ 1 ≠ 2 Ÿ 1 ≠ 4 ≡ V Ÿ V ≡ V. • x1 = 1, x2 = 3: 1 ≠ 3 Ÿ h2(1) ≠ h2(3) ≡ 1 ≠ 3 Ÿ 1 ≠ 9 ≡ V Ÿ V ≡ V. • x1 = 1, x2 = -1: 1 ≠ -1 Ÿ h2(1) ≠ h2(-1) ≡ 1 ≠ -1 Ÿ 1 ≠ 1 ≡ V Ÿ F ≡ F. En este punto no tiene sentido proseguir con la evaluación de los posibles pares restantes ya que encontramos una instancia con la cual se tiene la falsedad de la proposición general (∀x1, x2 ∈ X)(x1 ≠ x2 Ÿ h2(x1) ≠ h2(x2)). De manera equivalente tenemos entonces que la proposición (∃-1, 1 ∈ X)(-1 ≠ 1 ∧ h2(-1) = h2(1)) es verdadera y esto nos permite caracterizar a h2 como no inyectiva.

119

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Se dice que una función f:A → B es Suprayectiva si satisface la siguiente propiedad: (∀b ∈ B)(∃a ∈ A)(f(a) = b) La suprayectividad se puede interpretar como el hecho de que todo elemento en el codominio esta siendo efectivamente emparejado con un elemento en el dominio. O en otras palabras, no hay elementos “sobrantes” en el codominio en el sentido de que no se encuentre su correspondiente “socio” en el dominio. Este último enunciado nos proporciona de hecho una guía para inferir el criterio para caracterizar a una función como no suprayectiva: ¬(∀b ∈ B)(∃a ∈ A)(f(a) = b) ≡ (∃b ∈ B)(∀a ∈ A)(¬(f(a) = b)) ≡ (∃b ∈ B)(∀a ∈ A)(f(a) ≠ b) Es decir: f:A → B es No Suprayectiva ⇔ (∃b ∈ B)(∀a ∈ A)(f(a) ≠ b) Por ejemplo, sean A = {1, 2, 3, 4, 5} y B = {10, 20, 30} y sea la función f1 dada por: f1 : A → 1 ∼ 2 ∼ 3 ∼ 4 ∼ 5 ∼

B f1 (1) = 10 f1 (2) = 10 f1 (3) = 20 f1 (4) = 20 f1 (5) = 30

Demostremos que para todo elemento b en el conjunto B se tiene que existe un elemento a en el conjunto A tal que f1(a) = b: • Para b = 10 existe el elemento a = 1 tal que f1(1) = 10. • Para b = 20 existe el elemento a = 3 tal que f1(3) = 20. • Para b = 30 existe el elemento a = 5 tal que f1(5) = 30. Por lo tanto se tiene que la proposición (∀b ∈ {10, 20, 30})(∃a ∈ {1, 2, 3, 4, 5})(f1(a) = b) es verdadera. Entonces f1 es una función suprayectiva. Ahora sea el dominio X = {1, 2, 3, 4} y el codominio Y = {7, 8, 9, 10, 11}. Sea la función f2 = {(1,7), (2,8), (3,9), (4,10)}. Nótese que el elemento 11 en el codominio no esta emparejado, en f2, con ningún elemento del dominio. Eso hace que la proposición general (∃11 ∈ B)(∀a ∈ A)(f2(a) ≠ 11) sea verdadera. En consecuencia f2 es caracterizada como no suprayectiva.

120

Capítulo 3. Relaciones y Funciones

Reconsideremos a nuestra función valor absoluto: f: \ → x



\ f ( x) =| x |

Sabemos que para todo x en los reales el valor absoluto de x, independientemente de que éste sea positivo, negativo o cero, será un número no negativo. Sin embargo nótese que el codominio de nuestra función considera a todos los reales: \ . Eso quiere decir que para cualquier negativo en el codominio no existirá un real en el dominio cuyo valor absoluto sea precisamente negativo. Por ejemplo, consideremos al número -2. No existe un número x en los reales tal que | x | = -2. De hecho con este simple ejemplo nos basta para establecer que la proposición general (∃-2 ∈ \ )(∀x ∈ \ )(| x | ≠ -2) es verdadera y entonces caracterizar a la función valor absoluto como no suprayectiva. Ahora bien, la no suprayectividad de | x | se debe a cómo fue definido en particular su codominio. Si la función es redefinida como

f: \ → x ∼

\ + ∪ {0} f ( x) =| x |

Es decir, considerando como codominio únicamente a los números reales positivos junto con el cero, \ + ∪ {0} , entonces será claro que para cualquier elemento y en el nuevo codominio podremos encontrar su correspondiente x en el dominio tal que y = | x |. Con esta modificación tenemos entonces que la función valor absoluto es suprayectiva. Reconsideremos a la función g presentada previamente: \ g: \ → x ∼ g ( x) = 2 x + 3 Se demostrará que g es suprayectiva. Sea y cualquier elemento de \ . Buscaremos, apoyándonos en el Álgebra de los Números Reales al número x, también en \ , tal que y = 2x + 3: y = 2x + 3 Ÿ y – 3 = 2x Ÿ (y – 3)/2 = x Nótese que partimos de considerar que efectivamente se cumple que y = 2x + 3 y llegamos a la conclusión de que (y – 3)/2 = x. Es decir, hemos logrado, dado un y en el codominio, proporcionar una fórmula para ubicar a su correspondiente elemento x en el dominio tal que ambos satisfagan la relación y = 2x + 3. Por ejemplo, sea y = 5. Entonces x = (5 – 3)/2 = 1. Evidentemente g(1) = 2(1) + 3 = 5 = y. Aunque la expresión (y – 3)/2 = x es un cociente éste está bien definido para todos los números reales en el sentido de que no se presentan casos de división por cero. Por lo tanto (∀y ∈ \ )(∃x ∈ \ )(2x + 3 = y) es verdadera, es decir, g es suprayectiva. 121

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Considérese la función g2 : \ → x



\ g 2 ( x) = x 2

Se verificará si g2 es suprayectiva. Sea y cualquier elemento de \ . Buscaremos, al número x, también en \ , tal que y = x2: y = x2 Ÿ ± y=x El problema de que debe apreciarse en este punto es que los valores que puede tomar y pueden ser negativos, ya que el codominio se estableció era todo el conjunto de los números reales. Sin embargo, la raíz cuadrada no está definida para los reales negativos. Eso quiere decir que entonces, por ejemplo, si y = -4 concluimos que no existe ningún número real x tal que x2 = -4. Esta instancia hace que la proposición general (∃-4 ∈ \ )(∀x ∈ \ )(x2 ≠ -4) sea verdadera y en consecuencia g2 es no suprayectiva. Tal como sucedió con la función valor absoluto es posible hacer una corrección sobre el codominio: g 2 : \ → \ + ∪ {0} x ∼ g 2 ( x) = x 2

Bajo este nuevo contexto tenemos que nuestra fórmula ± y = x queda bien definida ya que los valores que ahora puede tomar y serán no negativos. Esto implica que g2 puede ser ahora caracterizada como suprayectiva. Se dice que una función f:A → B es una función Biyectiva si f es inyectiva y también suprayectiva.

Por ejemplo, previamente demostramos que la función g: \ → \ x ∼ g ( x) = 2 x + 3

era tanto inyectiva como suprayectiva. Por lo tanto la función g es una función biyectiva.

122

Capítulo 3. Relaciones y Funciones

Sean A = {1, 2, 3} y B = {10, 20, 30}. Sea la función f dada por: f: A → 1 ∼ 2 ∼ 3 ∼

B f (1) = 10 f (2) = 20 f (3) = 30

Veamos si f es biyectiva. Para ello debemos probar inicialmente que es inyectiva y posteriormente que es suprayectiva. • Por probar que (∀a1, a2 ∈ A)(a1 ≠ a2 Ÿ f(a1) ≠ f(a2)) es verdadera: o a1 = 1 y a2 = 2: 1 ≠ 2 Ÿ f(1) ≠ f(2) ≡ 1 ≠ 2 Ÿ 10 ≠ 20 ≡ V Ÿ V ≡ V. o a1 = 1 y a2 = 3: 1 ≠ 3 Ÿ f(1) ≠ f(3) ≡ 1 ≠ 3 Ÿ 10 ≠ 30 ≡ V Ÿ V ≡ V. o a1 = 2 y a2 = 3: 2 ≠ 3 Ÿ f(2) ≠ f(3) ≡ 2 ≠ 3 Ÿ 20 ≠ 30 ≡ V Ÿ V ≡ V. Por lo tanto f es inyectiva. • Ahora demostraremos que (∀b ∈ B)(∃a ∈ A)(f(a) = b) es verdadera: o Para b = 10 existe a = 1 tal que f(1) = 10. o Para b = 20 existe a = 2 tal que f(2) = 20. o Para b = 30 existe a = 3 tal que f(3) = 30. Por lo tanto f es suprayectiva. Se tiene que f es inyectiva y suprayectiva. En consecuencia f es una función biyectiva. Sean las funciones f:A → B y g:B → C. Entonces la Composición de f y g, denotada por g o f, es la función con dominio A y codominio C, es decir: go f: A → a



C ( g o f )(a )

La notación (g o f)(a) debe entenderse como g(f(a)). Es decir, el resultado de (g o f)(a) se obtiene al evaluar primeramente a f con a ∈ A y posteriormente el resultado de f(a) ∈ B se evalúa con la función g.

Por ejemplo, sean los conjuntos A = {1, 2, 3}, B = {10, 20, 30} y C = {x, y, z}. Sean las funciones f y g dadas por: f: A → 1 ∼ 2 ∼ 3 ∼

B f (1) = 10 f (2) = 20 f (3) = 30

g:

B



C

10 20

∼ ∼

30



g (10) = x g (20) = y g (30) = z

123

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Entonces, de acuerdo a la definición tendremos que g o f estará especificada como: g o f : {1, 2,3} → 1



2



3



{x, y, z}

( g o f )(1) ( g o f )( 2 ) ( g o f )( 3)

= g ( f (1) ) = g (10 ) = x

= g ( f ( 2 ) ) = g ( 20 ) = y = g ( f ( 3) ) = g ( 30 ) = z

Vista como un conjunto de pares ordenados tenemos que g o f = {(1, x), (2, y), (3, z)}.

Consideremos al siguiente par de funciones: f: \ → x ∼

g: \ → \ x ∼ g ( x) = 3x + 2

\ f ( x) = 2 x + 3

Entonces tenemos las siguientes composiciones (todas las funciones resultantes tendrán por dominio y codominio a \ ): • (g o f)(x) = g(f(x)) = g(2x + 3) = 3(2x + 3) + 2 = 6x + 11 • (f o g)(x) = f(g(x)) = f(3x + 2) = 2(3x + 2) + 3 = 6x + 7 • (f o f)(x) = f(f(x)) = f(2x + 3) = 2(2x + 3) + 3 = 4x + 9 • (g o g)(x) = g(g(x)) = g(3x + 2) = 3(3x + 2) + 2 = 9x + 8 Sea f:A → B una función biyectiva. A la función f -1:B → A definida como f -1(b) = a, donde b ∈ B y el elemento a ∈ A es tal que f(a) = b se le llama Función Inversa de f.

Por ejemplo, sean A = {1, 2, 3} y B = {10, 20, 30}. Sea la función f dada por: f: A →

B

1 2

∼ ∼

f (1) = 10 f (2) = 20

3



f (3) = 30

Previamente demostramos que esta función es biyectiva. Por lo tanto debe existir su correspondiente función inversa. Entonces f -1 estará dada por: f -1 :

124

B → 10 ∼ 20 ∼ 30 ∼

A f (10) = 1 f -1 (20) = 2 f -1 (30) = 3 -1

Capítulo 3. Relaciones y Funciones

Ahora veamos qué sucede cuando efectuamos la composición entre la función f y su correspondiente inversa f -1: • Para f o f -1 se tiene que: f o f -1 :



B → B -1 10 ∼ ( f o f )(10) = f ( f -1 (10)) = f (1) = 10 20 ∼ ( f o f -1 )(20) = f ( f -1 (20)) = f (2) = 20 30 ∼ ( f o f -1 )(30) = f ( f -1 (30)) = f (3) = 30

Mientras que para f -1 o f : f -1 o f : A → A -1 -1 1 ∼ ( f o f )(1) = f ( f (1)) = f -1 (10) = 1 2 ∼ ( f -1 o f )(2) = f -1 ( f (2)) = f -1 (20) = 2 3 ∼ ( f -1 o f )(3) = f -1 ( f (3)) = f -1 (30) = 3

Es claro que las funciones obtenidas son diferentes. Pero tienen en común el hecho de que todos los elementos en sus dominios tienen por pareja en el codominio a si mismos. En otras palabras, tanto f o f -1 como f -1 o f pueden verse como funciones que no “modifican” en manera alguna a sus valores de entrada. Este tipo de funciones nos conducen a la siguiente definición: Considérese a la función ι:A → A. A ι se le llama Función Identidad si satisface la siguiente propiedad: (∀x ∈ A)(ι(x) = x) Es claro entonces que, retomando el ejemplo anterior, tanto f o f -1 como f -1 o f son funciones identidad. Son diferentes en el sentido de que f o f -1:B → B mientras que f -1 o f:A → A. Reconsideremos a la siguiente función biyectiva: \ g: \ → x ∼ g ( x) = 2 x + 3 En este caso deseamos encontrar a su correspondiente función inversa g -1. Por definición, g -1(y) = x, donde y ∈ \ y el elemento x ∈ \ es tal que g(x) = 2x + 3 = y. En otras palabras, dado un real y en el codominio deseamos encontrar su correspondiente pareja x en el dominio tal que ambos satisfagan la relación 2x + 3 = y. Cuando se demostró que g(x) era

125

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

una función suprayectiva se obtuvo una expresión en términos de y que permitía ubicar al elemento x que le correspondía: x = (y – 3)/2 Precisamente esta expresión es la que define a la función inversa de g. Por lo tanto se tiene: g -1(y) = (y – 3)/2 Tal como procedimos en el ejemplo anterior, veamos que sucede cuando efectuamos las composiciones g -1 o g y g o g -1: •

g -1 o g: g −1 o g : \ →

\ ( g −1 o g )( x) = g −1 ( g ( x))

x



= g −1 (2 x + 3) = ((2 x + 3) − 3) / 2 =x



g o g -1:

g o g −1 : \ →

\ ( g o g −1 )( x) = g ( g −1 ( x))

x



= g (( x − 3) / 2) = 2(( x − 3) / 2) + 3 =x

De nueva cuenta vemos que se obtuvieron funciones identidad. En este punto vale la pena hacer una aclaración. En este ejemplo, para determinar a la función inversa de g hicimos uso de un resultado que se produjo al demostrar que g era efectivamente suprayectiva. Sin embargo, en lo general, la suprayectividad por si sola no garantiza que una función sea biyectiva y en consecuencia cuente con su correspondiente inversa. Se debe tener siempre en consideración que, por definición, para que una función tenga su correspondiente inversa ésta debe ser tanto inyectiva como suprayectiva, o en términos equivalentes, debe ser biyectiva. Finalizaremos este Capítulo al formalizar la relación que existe entre una función biyectiva, su inversa y las composiciones entre éstas: Teorema 3.5: Sea f:A → B una función biyectiva y sea f -1:B → A su correspondiente función inversa. Las composiciones f -1 o f y f o f -1 corresponden a funciones identidad.

126

Capítulo 3. Relaciones y Funciones

Demostración: Sea x cualquier elemento en el dominio A de f. Si f(x) = y, donde y es un elemento del codominio B, entonces, debido a que f es biyectiva, se tiene que x es el único elemento asociado a y y a su vez y es el único elemento asociado a x. De hecho, la relación entre x y y define también como se comportará f -1 con estos elementos: y = f -1(x). Por definición, la composición (f -1 o f)(x) produce como resultado el mismo x: (f -1 o f)(x) = f -1(f(x)) = f -1(y) = x Los razonamientos anteriores son válidos para todos los elementos en el dominio A de f dado que el elemento x considerado fue cualquiera de ellos. Por lo tanto se tiene la validez de la proposición general: (∀x ∈ A)((f -1 o f)(x) = x) La cual a su vez caracteriza a f -1 o f como una función identidad. Nótese que para el caso f o f -1 se sigue una secuencia de pasos similar a los antes presentados. Se llega entonces a verificar la validez de la proposición general: (∀y ∈ B)((f o f -1)(y) = y) Con lo que f o f -1 es también caracterizada como una función identidad.

127

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

128

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

4. Sucesiones, Series e Inducción Matemática

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

130

Capítulo 4. Sucesiones, Series e Inducción Matemática

4.1 Sucesiones Definamos el concepto de Función de Sucesión: a) Una Función de Sucesión Finita es una función cuyo dominio es el conjunto de los primeros n enteros positivos, esto es, {1, 2, 3, 4, …, n}. b) Una Función de Sucesión Infinita es una función cuyo dominio es el conjunto de los números naturales ` , es decir, el conjunto {1, 2, 3, 4, …} Los números en el codominio de una función de sucesión se denominan Elementos. Los elementos de una función de sucesión, al ser listados en orden, forman una Sucesión. Si el dominio de la función de sucesión es finito entonces la sucesión es de hecho una Sucesión Finita. Si el dominio de la función de sucesión es infinito entonces se tiene una Sucesión Infinita. Considérese el siguiente ejemplo. Sea la función de sucesión finita f(n) = 3n, n ∈ {1, 2, 3, 4, 5}. Entonces se tienen los elementos f(1) = 3 f(2) = 6 f(3) = 9 f(4) = 12 f(5) = 15 La sucesión finita queda como 3, 6, 9, 12, 15. Tal sucesión tiene además 5 pares ordenados (n, f(n)): (1,3), (2,6), (3,9), (4,12), (5,15) Ejemplo: Sea la función de sucesión infinita f (n) =

2n − 1 , n ∈ {1, 2, 3, 4, …}. Sus elementos se n3

obtienen mediante: f(1) = 1 3 f(2) = 8 5 f(3) = 27 7 f(4) = 64 #

131

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Tales elementos dan lugar a la sucesión infinita 1,

3 5 7 , , , … En donde algunos de sus 8 27 64

pares ordenados son

§ 3· § 5 · § 7 · (1,1), ¨ 2, ¸ , ¨ 3, ¸ , ¨ 4, ¸ ,... © 8 ¹ © 27 ¹ © 64 ¹ • • • •

Ahora se introducirá la siguiente notación: a1 denotará al primer elemento de una sucesión. a2 denotará al segundo elemento de una sucesión. # an = f(n) denotará al n-ésimo elemento de una sucesión. A tal elemento se le denominará el Elemento General de la Sucesión.

Ejemplos: •

Para f(n) = 3n se tiene que o an = 3n o a1 = 3 o a2 = 6 o a3 = 9



Para f (n) =

2n − 1 se tiene n3 2n − 1 o an = n3 o a1 = 1 3 o a2 = 8 5 o a3 = 27

Al elemento general de una sucesión se le incluye en la misma cuando sus elementos se listan en orden: a1, a2, a3, …, an, … Por ejemplo, para f (n) =

2n − 1 tenemos n3

1,

132

2n − 1 3 5 , , …, ,… n3 8 27

Capítulo 4. Sucesiones, Series e Inducción Matemática

Se dice que una sucesión a1, a2, …, an, … es igual a una sucesión b1, b2, …, bn, … si y sólo si ai = bi para todo i = 1, 2, 3, … Es posible que dos sucesiones tengan los mismos elementos y sean desiguales. Por ejemplo: • •

1 n ­ 1 ° an = ® 2 °¯ n + 2

an =

Æ

1 1 1 1 1, , , ,..., ,... 2 3 4 n

Æ

1 1 1 1, ,1, ,1, ,..., an ,... 2 3 4

si n es impar si

n es par

El conocer varios elementos de una sucesión no implica necesariamente la existencia de un elemento general único. En el caso particular de los elementos 2, 4, 6 se pueden tener las siguientes funciones de sucesión: • • •

an = 2n ­ 2n si n es impar an = ® ¯ 2an −1 si n es par an = 2n + (n − 1)(n − 2)(n − 3)

Æ

2, 4, 6, 8, 10, 12, …, an, …

Æ

2, 4, 6, 12, 10, 20, …, an, …

Æ

2, 4, 6, 14, 34, 72, …, an, …

Por otro lado, no siempre es posible contar, de manera explícita, con una función para determinar al elemento general de una sucesión. Un ejemplo está dado por la sucesión de los números primos 2, 3, 5, 7, 11, 13, 17, 19, …, an, … En donde an es el n-ésimo número primo. Para esta sucesión, hasta el día de hoy, no se ha encontrado una función o ecuación que defina a an de manera directa, sin embargo, an puede determinarse algorítmicamente para todo entero positivo n.

4.2 Series y Sumatorias La Notación Sigma se define por la ecuación n

¦ F (i) = F (m) + F (m + 1) + F (m + 2) + ... + F (n) i =m

En donde m, n ∈ ] y m ≤ n. El segundo miembro de la fórmula consiste en una suma formada por n-m+1 términos: • El primer término se obtiene al reemplazar i por m en F(i). • El segundo término se obtiene al reemplazar i por m+1 en F(i). • El tercer término se obtiene al reemplazar i por m+2 en F(i). # • • El último término se obtiene al reemplazar i por n en F(i). 133

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

El número m se denomina el Límite Inferior de la Suma y n se denomina el Límite Superior de la Suma. El símbolo i se denomina el Índice de Sumatoria. Si m > n entonces se dice que la suma es cero.

Al igual que los elementos que forman a una sucesión cuentan con subíndices, los términos de la suma pueden listarse como: a1 + a2 + a3 + ... + an Entonces tal suma se representa por notación sigma como: n

¦a

i

i =1

Ejemplos: Representar las sumas mediante notación sigma:

a) 1 + 3 + 5 + 7 + 9 Se tienen al menos cuatro posibles representaciones: 7

¦ (2i − 5) i =3

6

5

¦ (2i − 3)

¦ (2i − 1)

i=2

i =1

4

¦ (2i + 1) i =0

b) -3a3 + 4a4 - 5a5 + 6a6 - 7a7 + 8a8 8

¦ (−1) ia i

i

i =3

Cuando i es par entonces (-1)i = 1 y cuando i es impar (-1)i = -1. c) x2 - x4 + x6 - x8 + x10 - x12 + x14 7

¦ (−1)

i −1

x 2i

i =1

Cuando i es par (-1)i-1 = -1 y cuando i es impar (-1)i-1 = 1.

Si se indica la operación de adición entre los elementos de una sucesión se tiene una Serie. Por lo tanto la sucesión a1, a2, a3, ..., an tendrá asociada la serie: n

a1 + a2 + a3 + ... + an = ¦ ai i =1

134

Capítulo 4. Sucesiones, Series e Inducción Matemática

4.3 Principio de Inducción Matemática Supóngase que P(n) es una proposición referente al entero positivo n. Además, supóngase que se satisfacen las siguientes dos condiciones: a) P(c) es verdadera. Es decir, la proposición es válida para n = c, donde c es una constante entera. De hecho, P(c) es llamada el Caso Base. b) Sea k un entero arbitrario. Si P(k) es verdadera, entonces P(k+1) es también verdadera Esto es, siempre que la proposición sea válida para n = k, es también válida para n = k + 1. Por lo tanto el enunciado P(n) es válido para todos los valores enteros de n ≥ c. Los siguientes ejemplos ilustrarán la aplicación del Principio de Inducción Matemática en la demostración de algunos Teoremas. Ejemplo:

n

Teorema 4.1:

¦i = i =1

n(n + 1) 2

Demostración: Parte 1: Verificación de la validez del caso base con n = 1. 1

¦i =1 = i =1

n(n + 1) 1(1 + 1) = 2 2

En consecuencia la fórmula efectivamente es válida cuando n = 1. Parte 2: Se supone que la fórmula es efectivamente válida cuando n = k, donde k es cualquier entero positivo: k

¦i = i =1

k (k + 1) ½ ¾ Hipótesis de inducción 2 ¿

Con base en la suposición anterior, debido a que se ha asumido que la fórmula se cumple para n = k, se desea verificar que la fórmula es también válida cuando n = k + 1, es decir, se desea demostrar que: k +1

¦i = i =1

(k + 1)([k + 1] + 1) 2

(i)

135

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Parte 3: Partiremos del lado izquierdo de la expresión anterior al desarrollar la sumatoria: k +1

+ 2 + 3 + ... + k + (k + 1) ¦ i = 1 i =1

k

¦i i =1

(Los primeros k términos de la suma se expresan en notación sigma, dejando al (k+1)-ésimo término libre) (Se introdujo la hipótesis de inducción, que

k

= ¦ i + (k + 1) i =1

k

=

k (k + 1) + (k + 1) 2

asumimos es verdadera, al sustituir a

¦i

por

i =1

k (k + 1) ) 2

k (k + 1) + 2(k + 1) 2 (k + 1)([k + 1] + 1) = 2

=

(Se ha obtenido el miembro de la derecha en (i))

Conclusión: • Se ha probado que la fórmula es válida para n = 1. • Se ha demostrado que cuando se asume que la fórmula es válida para n = k es también válida para n = k + 1. • Por lo tanto, y por el Principio de Inducción Matemática, la fórmula es válida para todo n ∈{1, 2,3, 4,...} .

Ejemplo:

Teorema 4.2: 2n > 2n , ∀n ∈ {3, 4, 5, 6, …}

Demostración:

Parte 1: Verificación de la validez del caso base cuando n = 3. 23 > 2(3) ⇔ 8 > 6

La desigualdad es válida cuando n = 3.

136

Capítulo 4. Sucesiones, Series e Inducción Matemática

Parte 2: Establecimiento de la Hipótesis de Inducción. Se asume que la desigualdad es válida cuando n = k: 2 k > 2k

Por verificar que la desigualdad es válida cuando n = k + 1: 2k +1 > 2(k + 1)

(ii)

Parte 3: Ambos miembros de 2k > 2k (la Hipótesis de Inducción) se multiplican por 2: 2 k > 2k ⇔ 2 ⋅ 2 k > 2 ⋅ 2k k +1 ⇔ 2N > 4Nk a

b

El término a ya es igual al primer término de (ii). El segundo miembro de (ii), 2(k+1) ahora referenciado como el término c, es evaluado contra el término 4k (b) de la siguiente manera:

4Nk > 2( k + 1) 

b

c

Se verifica cuando se cumple que b > c : 4k > 2(k + 1) ⇔ 2k > 2 ⇔ k >1

Es decir, la desigualdad 4k > 2(k+1) se cumple para todo entero k mayor a 1. Por propiedades de los números reales se tiene que si a > b y b > c entonces se concluye que a > c . Precisamente se aplicará este razonamiento de la siguiente manera: § k +1 · ¨ 2N > 4Nk ¸ b ¹ © a



§ · ¨ 4Nk > 2(k + 1) ¸

¸ ¨ b  c © ¹

Ÿ

§ k +1 · ¨ 2N > 2( k + 1) ¸ 

¸ ¨ a c © ¹

El consecuente de la condicional es precisamente la desigualdad en (ii).

137

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Conclusión: • • •

La desigualdad es válida cuando n = 3. Se ha demostrado que cuando se asume que la desigualdad es válida para n = k es también válida para n = k + 1. Por el Principio de Inducción Matemática, la desigualdad 2n > 2n es válida para todo n ∈ {3, 4, 5, 6, …}.

Ejemplo: Teorema 4.3: 2n + n3 es divisible por 3, ∀n ∈ {1, 2, 3, 4, …}

Demostración:

Parte 1: Verificación del caso base cuando n = 1 2(1) + (1)3 = 2 + 1 = 3 es divisible por 3

Parte 2: Hipótesis de inducción con n = k 2k + k 3 es divisible por 3.

Un consecuencia de aceptar como verdadera a la Hipótesis de Inducción es el garantizar 2k + k 3 que existe entonces un entero m = . Haremos uso del entero m posteriormente. 3 Se procede a demostrar que 2n + n3 es divisible por 3 cuando n = k + 1, es decir, se debe verificar la validez de la proposición: 2(k+1) + (k+1)3 es divisible por 3.

138

Capítulo 4. Sucesiones, Series e Inducción Matemática

Parte 3: 2(k+1) + (k+1)3 = 2k + 2 + (k3 + 3k2 + 3k + 1) = k3 + 2k + 3k2 + 3k + 3 = (k3 + 2k) + 3(k2 + k + 1) (k2 + k + 1) es un número entero, ya que k es un entero, y dado que se multiplica por 3 es obvio que 3(k2 + k + 1) es divisible por 3. Ahora, ambos miembros de la igualdad se dividen por 3: 2(k + 1) + (k + 1) 3 3

=

k 3 + 2k 3(k 2 + k + 1) + 3 3 

m

= m + (k2 + k + 1) Nótese que la expresión m + (k2 + k + 1) es un número entero y además divisible por 3. Dado que se tiene una igualdad, la conclusión a la que se llegó en el lado derecho aplica también al lado izquierdo. Por lo tanto se tiene que efectivamente 2(k+1) + (k+1)3 es divisible por 3. Conclusión: 2n + n 3 es divisible por 3 para todo n ∈ {1, 2, 3, 4, …}.

Ejemplo: x n +1 − 1 , Teorema 4.4: ¦ x = x −1 i =0 n

i

x ∈ \ \{1}

Demostración:

Supondremos en todo momento que x es un número real constante diferente de 1. Parte 1: Verificación de la validez del caso base con n = 0. 0

¦ xi = x 0 = 1 = i =0

x 0+1 − 1 x − 1 = x −1 x −1

139

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

En consecuencia la fórmula efectivamente es válida cuando n = 0. Parte 2: Se supone que la fórmula es efectivamente válida cuando n = k, donde k es cualquier entero positivo: k

¦ xi = i =0

x k +1 − 1 ½ ¾ Hipótesis de inducción x −1 ¿

Con base en la suposición anterior, debido a que se ha asumido que la fórmula se cumple para n = k, se desea verificar que la fórmula es también válida cuando n = k + 1, es decir, se desea demostrar que: k +1

¦ xi = i =0

x ( k +1) +1 − 1 x −1

(i)

Parte 3: Partiremos del lado izquierdo de la expresión anterior al desarrollar la sumatoria: k +1

¦x i =0

i

=  x 0 + x1 + x 2 + ... +

x k + x k +1 k

¦ xi i =0

= ¦ x i + x k +1

(Los primeros k términos de la suma se expresan en notación sigma, dejando al (k+1)-ésimo término libre) (Se introdujo la hipótesis de inducción, que

x k +1 − 1 k +1 = +x x −1

asumimos es verdadera, al sustituir a

k

i =0

k

x k +1 − 1 + ( x − 1) x k +1 x −1 k +1 x − 1 + x ( k +1)+1 − x k +1 = x −1 ( k +1) +1 −1 x = x −1

¦x

i

por

i =0

x k +1 − 1 ) x −1

=

(Se ha obtenido el miembro de la derecha en (i))

Conclusión: • Se ha probado que la fórmula es válida para n = 0. • Se ha demostrado que cuando se asume que la fórmula es válida para n = k es también válida para n = k + 1. • Por lo tanto, y por el Principio de Inducción Matemática, la fórmula es válida para todo n ∈{0,1, 2,3, 4,...} .

140

Capítulo 4. Sucesiones, Series e Inducción Matemática

4.4 Teorema del Binomio Si n ∈ ] + la Función Factorial, denotada por n!, está definida por: n! = n(n-1)(n-2)⋅...⋅2⋅1 O bien: n! = n(n-1)! Se define también que 0! = 1. §n· Si n, r ∈ ] + tales que r ≤ n , entonces el Coeficiente Binomial ¨¨ ¸¸ está definido ©r¹

por:

§ n · n(n − 1)(n − 2) ⋅ ... ⋅ (n − r + 1) ¨¨ ¸¸ = r! ©r¹ Además, se establece que: §n· ¨¨ ¸¸ = 1 ©0¹

y

§n· ¨¨ ¸¸ = 1 ©n¹

Por ejemplo: §7· 7 ⋅ 6 ⋅ 5 ¨¨ ¸¸ = = 35 © 3 ¹ 3 ⋅ 2 ⋅1

Teorema 4.5: Si n ∈ ] + y r es un entero no negativo tal que r ≤ n , entonces: §n· n! ¨¨ ¸¸ = © r ¹ r!(n − r )!

Demostración: Por la definición original de coeficiente binomial se tiene: § n · n(n − 1)(n − 2) ⋅ ... ⋅ (n − r + 1) ¨¨ ¸¸ = r! ©r¹ (n − r )! Al multiplicar al lado derecho de la ecuación por = 1 se tendrá: (n − r )! § n · = n(n − 1)(n − 2) ⋅ ... ⋅ (n − r + 1) ⋅ (n − r )! ¨¨ ¸¸ (iii) r! (n − r )! ©r¹ =

n! r !(n − r )!

(iv)

141

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

La reducción del numerador en (iii) a n! en (iv) se puede justificar intuitivamente con el siguiente ejemplo: Sea n = 10, r = 4 y (n-r) = 6, entonces el numerador en (iii) quedará como: (10(10-1)(10-2)(10-3)) ⋅ (10-4)! = (10(9)(8)(7)) ⋅ (6(5)(4)(3)(2)(1)) = 10! Ejemplos: § 7 · 7! = 35 a) ¨ ¸ = © 3 ¹ 3!4! § 8 · 8! b) ¨ ¸ = =1 © 0 ¹ 0!8! § 8 · 8! c) ¨ ¸ = =1 © 8 ¹ 8!0!

La expansión de la potencia de un binomio es un polinomio que se denomina Desarrollo Binomial. Ejemplos: • • • • •

(a+b)0 = 1 (a+b)1 = a + b (a+b)2 = a2 + 2ab + b2 (a+b)3 = a3 + 3a2b + 3ab2 + b3 (a+b)4 = a4 + 4a3b + 6a2b2 + 4ab3 + b4

Los coeficientes de los términos de los desarrollos binomiales (a+b)n forman una estructura que se conoce como el Triángulo de Pascal:

0

(a+b) (a+b)1 (a+b)2 (a+b)3 (a+b)4 (a+b)5 (a+b)6

142

Coeficientes del desarrollo binomial 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1

Capítulo 4. Sucesiones, Series e Inducción Matemática

O de manera equivalente:

(a+b)0 (a+b)1 (a+b)2 (a+b)3 (a+b)4 (a+b)5 (a+b)6

Coeficientes del desarrollo binomial §0· ¨ ¸ ©0¹ § 1 · § 1· ¨ ¸ ¨ ¸ © 0 ¹ © 1¹ § 2· § 2· § 2· ¨ ¸ ¨ ¸ ¨ ¸ © 0¹ ©1¹ © 2¹ § 3 · § 3· § 3 · § 3· ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ © 0¹ ©1¹ © 2 ¹ © 3¹ § 4· § 4· § 4· § 4· § 4· ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ © 0¹ ©1¹ © 2¹ © 3¹ © 4¹ § 5· §5· § 5· §5· § 5· §5· ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ © 0¹ ©1¹ © 2¹ © 3¹ © 4¹ © 5¹ §6· §6· § 6· §6· § 6· §6· §6· ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ ¨ ¸ © 0¹ ©1¹ © 2¹ © 3¹ © 4¹ © 5¹ © 6¹

Propiedades del desarrollo binomial (a+b)n: • • • • •









El desarrollo se forma por n+1 términos. La suma de los exponentes de a y b en cualquier término es n. El exponente de a disminuye en 1 de un término al siguiente. El exponente de b aumenta en 1 de un término al siguiente. El primer término en el desarrollo es: § n· a n = ¨¨ ¸¸a nb0 © 0¹ El segundo término en el desarrollo es: §n· na n −1b = ¨¨ ¸¸a n −1b1 ©1¹ El tercer término será: § n · n−2 2 ¨¨ ¸¸a b © 2¹ El cuarto término será: § n · n −3 3 ¨¨ ¸¸a b © 3¹ El quinto término será: § n · n−4 4 ¨¨ ¸¸a b © 4¹ 143

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



El término que contiene a br será:



El último término será:

§ n · n−r r ¨¨ ¸¸a b ©r¹ §n· b n = ¨¨ ¸¸a 0b n ©n¹

Ejemplo: Encontrar el desarrollo de (a+b)6. De acuerdo a los puntos anteriores se tendrá: §6· 6 0 §6· 5 1 § 6· 4 2 §6· 3 3 § 6· 2 4 (a+b)6 = ¨¨ ¸¸ a b + ¨¨ ¸¸ a b + ¨¨ ¸¸ a b + ¨¨ ¸¸ a b + ¨¨ ¸¸ a b + ©0¹ ©1¹ © 3¹ © 4¹ © 2¹ 6 5 1 4 2 3 3 2 4 1 5 = a + 6a b + 15a b + 20a b + 15a b + 6a b + b6

§6· 1 5 ¨¨ ¸¸ a b + ©5¹

§6· 0 6 ¨¨ ¸¸ a b ©6¹

Teorema 4.6: Teorema del Binomio. Si n es un entero no negativo y a, b ∈ \ , entonces: §n· §n· §n· § n · n −1 § n · n (a + b) n = ¨ ¸ a n + ¨ ¸ a n −1b + ... + ¨ ¸ a n − r b r + ... + ¨ ¸ ab + ¨ ¸ b ©0¹ ©1¹ ©r¹ © n − 1¹ ©n¹ O usando notación sigma: n §n· (a + b) n = ¦ ¨¨ ¸¸a n − r b r r =0 © r ¹

Ejemplos: a) Aplicando el Teorema del Binomio, desarrollar (2x2 + 3y)5 Entonces: n = 5, a = 2x2, b = 3y. 5 § 5· (2 x 2 + 3 y )5 = ¦ ¨ ¸ (2 x 2 )5− r (3 y ) r r =0 © r ¹ §5· § 5· §5· §5· = ¨ ¸ (2 x 2 )5 (3 y )0 + ¨ ¸ (2 x 2 ) 4 (3 y )1 + ¨ ¸ (2 x 2 )3 (3 y ) 2 + ¨ ¸ (2 x 2 ) 2 (3 y )3 ©0¹ ©1¹ © 2¹ © 3¹

§5· §5· + ¨ ¸ (2 x 2 )1 (3 y ) 4 + ¨ ¸ (2 x 2 )0 (3 y )5 © 4¹ ©5¹

1· § b) Aplicando el Teorema del Binomio, encontrar el desarrollo de ¨ t 3 − 2 ¸ t ¹ © 1 Entonces: n = 4, a = t 3 , b = − 2 . t

144

4

Capítulo 4. Sucesiones, Series e Inducción Matemática

4 § 4· § 3 1· t − = ¦ ¨ ¸ ¨ 2 ¸ t ¹ r =0 © r ¹ © 4

§ 4· =¨ ¸ ©0¹

(t) 3

( ) t3

§ 4· +¨ ¸ © 3¹

4

4− r

§ 1· ¨− 2 ¸ © t ¹

r

0 § 1 · § 4· − ¨ 2 ¸ + ¨1¸ © t ¹ © ¹

(t) 3

1

( )

§ 1 · § 4· ¨ − 2 ¸ + ¨ 4¸ © t ¹ © ¹ 3

t3

3

1 § 1 · §4· − ¨ 2 ¸ + ¨2¸ © t ¹ © ¹

(t) 3

0

§ 1· ¨− 2 ¸ © t ¹

( ) t3

2

§ 1· ¨− 2 ¸ © t ¹

2

4

Antes de demostrar el Teorema del Binomio se verificará la validez del siguiente:

Teorema 4.7:

§ n · § n · § n + 1· ¨ ¸+¨ ¸=¨ ¸ © r ¹ © r − 1¹ © r ¹

Demostración: §n· § n · ¨ ¸+¨ ¸ © r ¹ © r − 1¹

= = = = = = = = =

n! n! + r !(n − r )! (r − 1)!(n − (r − 1))! n! n! + r !(n − r )! (r − 1)!(n − r + 1)! n! n! + r (r − 1)!(n − r )! (r − 1)!(n − r + 1)(n − r )! n! 1 º ª1 + « (r − 1)!(n − r )! ¬ r n − r + 1 »¼ ª n +1 º n! (r − 1)!(n − r )! «¬ r (n − r + 1) »¼ (n + 1)! r (n − r + 1)(r − 1)!(n − r )! (n + 1)! ((n + 1) − r )r !(n − r )! (n + 1)! r !((n + 1) − r )! § n + 1· ¨ ¸ © r ¹

(Por definición de Coeficiente Binomial)

(Al extraer el primer factor de r! y (n – r + 1)!)

((n + 1)⋅n! = (n + 1)!) (r⋅(r - 1)! = r!) ((n+1)-r)⋅(n-r)! = ((n+1)–r)!) (Por definición de Coeficiente Binomial)

145

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Teorema del Binomio:

Si n es un entero no negativo y a, b ∈ \ , entonces: §n· §n· §n· § n · n −1 § n · n (a + b) n = ¨ ¸ a n + ¨ ¸ a n −1b + ... + ¨ ¸ a n − r b r + ... + ¨ ¸ ab + ¨ ¸ b ©0¹ ©1¹ ©r¹ © n − 1¹ ©n¹

O usando notación sigma: n §n· (a + b) n = ¦ ¨¨ ¸¸a n − r b r r =0 © r ¹

Demostración: Se procederá a probar el enunciado mediante el Principio de Inducción Matemática. Caso Base con n = 0: 0

§0·

r =0

© ¹

¦¨ r ¸ a

0− r

§0· b r = ¨ ¸ a 0b 0 = 1 = ( a + b) 0 ©0¹

Hipótesis de Inducción con n = k: k

§k ·

r =0

© ¹

¦¨ r ¸ a

k −r

b r = ( a + b) k

Paso Inductivo con n = k + 1. Por demostrar que efectivamente: § k + 1· ( k +1) − r r b = (a + b) k +1 ¸a r =0 © r ¹ k +1

¦¨

Al expander la sumatoria del lado izquierdo y simplificando los exponentes se tiene: § k + 1· ( k +1) − r r § k + 1· k +1 § k + 1· k § k + 1· k −1 2 b =¨ ¸a ¸a +¨ ¸a b +¨ ¸ a b + ... r =0 © r ¹ © 0 ¹ © 1 ¹ © 2 ¹ § k + 1· 2 k −1 § k + 1· k § k + 1· k +1 +¨ ¸a b +¨ ¸ ab + ¨ ¸b © k − 1¹ © k ¹ © k + 1¹ k +1

¦¨

Ahora se aplicará el Teorema 4.7 a todos los términos excepto al primero y último:

146

Capítulo 4. Sucesiones, Series e Inducción Matemática

§ k + 1· k +1 ª§ k · § k · º k ª§ k · § k · º k −1 2 =¨ ¸ a + «¨ ¸ + ¨ ¸ » a b + «¨ ¸ + ¨ ¸ » a b + ... © 0 ¹ ¬© 1 ¹ © 0 ¹ ¼ ¬© 2 ¹ © 1 ¹ ¼ ª§ k · § k · º 2 k −1 ª§ k · § k · º k § k + 1· k +1 + «¨ ¸+¨ ¸ » a b + «¨ ¸ + ¨ ¸ » ab + ¨ ¸b © k + 1¹ ¬© k − 1 ¹ © k − 2 ¹ ¼ ¬© k ¹ © k − 1 ¹ ¼ § k + 1· k +1 ª§ k · k § k · k º ª§ k · k −1 2 § k · k −1 2 º =¨ ¸ a + «¨ ¸ a b + ¨ ¸ a b » + «¨ ¸ a b + ¨ ¸ a b » + ... © 0 ¹ ©0¹ ©1¹ ¬© 1 ¹ ¼ ¬© 2 ¹ ¼ ª§ k · 2 k −1 § k · 2 k −1 º ª§ k · k § k · k º § k + 1· k +1 + «¨ ¸a b +¨ ¸ a b » + «¨ ¸ ab + ¨ ¸ ab » + ¨ ¸b ©k − 2¹ © k − 1¹ ¬© k − 1 ¹ ¼ ¬© k ¹ ¼ © k + 1¹

Los términos se distribuyen de manera que se forman dos series: § k + 1· k +1 ª§ k · k § k · k −1 2 § k · 2 k −1 § k · k º =¨ ¸ a + «¨ ¸ a b + ¨ ¸ a b + ... + ¨ ¸ a b + ¨ ¸ ab » © 0 ¹ ©1¹ © 2¹ © k − 1¹ ©k ¹ ¬

¼ Serie 1

ª§ k · §k · § k · 2 k −1 § k · k º § k + 1· k +1 + «¨ ¸ a k b + ¨ ¸ a k −1b 2 + ... + ¨ ¸b ¸a b +¨ ¸ ab » + ¨ k − 2¹ k − 1¹ k + 1¹ ©0¹ ©1¹ © © © ¬ ¼

Serie 2

Las series se representan usando notación Sigma: § k + 1· k +1 k § k · k +1− r r k −1 § k · k − r r +1 § k + 1· k +1 b + ¦¨ ¸a b + ¨ =¨ ¸a + ¦¨ ¸a ¸b r =1 © r ¹ r =0 © r ¹ © 0 ¹ © k + 1¹ k k −1 k k −1 k § k · k +1− r r § k · k −r r § · k −r r +1 § · k −r r y a b a a b a b b = = ¦ ¦ ¦ ¦ ¨ ¸N ¨ ¸ ¨ ¸ ¨ ¸ a b . Por lo N r =1 © r ¹ aa k −r r =1 © r ¹ r =0 © r ¹ r =0 © r ¹ bb r tanto se tiene: ª§ k + 1 · k k § k · k − r r º ª k −1 § k · k − r r § k + 1· k º = a «¨ + + a a b b » «¦ ¨ ¸ a b + ¨ ¦ ¸ ¨ ¸ ¸b » r =1 © r ¹ © k + 1¹ ¼ ¬© 0 ¹ ¼ ¬ r =0 © r ¹ k

Nótese que

§ k + 1· § k · § k + 1· § k · § k + 1· k Es claro que ¨ ¸ = ¨ ¸ =1 y ¨ ¸ = ¨ ¸ = 1 . Por lo tanto los términos ¨ ¸a y © 0 ¹ ©0¹ © k + 1¹ © k ¹ © 0 ¹ § k + 1· k ¨ ¸ b se reescriben: © k + 1¹ k ª§ k · º ª k −1 § k · §k· §k · º = a «¨ ¸ a k + ¦ ¨ ¸ a k − r b r » + b « ¦ ¨ ¸ a k − r b r + ¨ ¸ b k » r =1 © r ¹ ©k ¹ ¼ ¬© 0 ¹ ¼ ¬ r =0 © r ¹

147

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

La primer sumatoria tiene como índice inferior r = 1 mientras que la segunda tiene como §k · §k · límite superior r = k – 1. Al introducir los términos ¨ ¸ a k y ¨ ¸ b k en sus ©0¹ ©k ¹ correspondientes sumatorias se tienen índices inferior y superior r = 0 y r = k respectivamente: ª k §k · º ª k §k · º = a «¦ ¨ ¸ a k −r br » + b «¦ ¨ ¸ a k −r b r » ¬ r =0 © r ¹ ¼ ¬ r =0 © r ¹ ¼ Cada sumatoria corresponde al desarrollo binomial (a + b)k. Se introduce la Hipótesis de Inducción: = a ( a + b) k + b ( a + b) k = ( a + b)(a + b) k = ( a + b) k +1 Por lo tanto, por el Principio de Inducción Matemática, el enunciado n §n· (a + b) n = ¦ ¨¨ ¸¸a n − r b r es válido para todo entero n no negativo. r =0 © r ¹

Finalizaremos este capítulo estableciendo un par de conceptos. Sea C un conjunto. Se dice que una Permutación de C es un ordenamiento particular de los elementos en C. Por ejemplo, sea C = {a, b, c, d, e}. Entonces una permutación de C sería (b, d, a, c, e). Otra posible permutación está dada por (e, d, c, b, a). Una cuestión importante es que el número de permutaciones posibles para un conjunto formado por n elementos está dado por n!. En nuestro ejemplo anterior contamos con 5 elementos, por lo tanto se tendrá en total 5! = 120 posibles permutaciones del conjunto C = {a, b, c, d, e}. Sea C un conjunto. Se dice que una Combinación de C es un subconjunto de C formado por r elementos diferentes. Retomando nuestro ejemplo C = {a, b, c, d, e} tenemos que los subconjuntos {a, b, c, d}, {a, c, e}, {b, d} y {c} son combinaciones de C. De hecho, tanto ∅ y C = {a, b, c, d, e} son combinaciones del conjunto C. De aquí surge una conexión con nuestros coeficientes binomiales. El número total de combinaciones de r elementos tomados de un conjunto de n elementos está dado por:

§n· n! ¨¨ ¸¸ = © r ¹ r!(n − r )! Dado que n = 5 para C = {a, b, c, d, e} tenemos que, por ejemplo, el número de combinaciones de r = 3 elementos tomados de C está dado por:

§5· 5! 120 120 = = = 10 ¨ ¸= © 3 ¹ 3!(5 − 3)! 3!2! 12

148

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

5. Grafos: Conceptos Básicos

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

150

Capítulo 5. Grafos: Conceptos Básicos

5.1 Definiciones Un Grafo Dirigido G consiste de dos conjuntos: • V(G): un conjunto finito no vacío cuyos elementos son llamados Vértices de G. • E(G): un conjunto de pares ordenados de vértices llamados Aristas de G. Es decir, E(G) ⊆ V(G) × V(G), donde el operador × denota al Producto Cartesiano de Conjuntos. Nótese que por la definición se tiene que la arista (u, v) no es equivalente a la arista (v, u), i.e. (u, v) ≠ (v, u). Es decir, el orden en que son listados los vértices indica la Dirección de la arista. Los grafos dirigidos son representados por diagramas en el plano de manera natural. Específicamente, cada vértice v en V(G) es representado por un círculo y cada arista (v1, v2) ∈ E(G) es representada por una curva dirigida la cual sale del vértice v1 y llega al vértice v2, tal que v1, v2 están en V(G). Por ejemplo, en la Figura 5.1 se presenta un grafo dirigido G para el cual: • V(G) consiste de los vértices A, B, C, D, es decir, V(G) = {A, B, C, D}. • E(G) consiste de las aristas (A, B), (B, C), (C, D), (A, C) y (B, D). Formalmente, E(G) = {(A, B), (B, C), (C, D), (A, C), (B, D)}. A

D

B

C

Figura 5.1. Ejemplo de un Grafo Dirigido.

Por la definición de producto cartesiano es posible que un grafo dirigido cuente con aristas de la forma (v, v). Este tipo de aristas son llamadas Lazos. También, en un momento dado, puede hacerse admisible la presencia de aristas repetidas también conocidas como Aristas Múltiples o Aristas Paralelas. Un grafo dirigido que admite aristas múltiples es llamado Multigrafo. Nótese que de hecho todo grafo dirigido es un caso especial de multigrafo sin aristas múltiples. Por ejemplo, en la Figura 5.2 se presenta un multigrafo que también cuenta con dos lazos. A

D

B

C

Figura 5.2. Ejemplo de un Multigrafo: se tiene un par de aristas múltiples (B, C). Los vértices B y D cuentan con lazos.

151

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Un grafo dirigido G libre de lazos es llamado Grafo Dirigido Simple. Un grafo G para el cual se tiene que las aristas (u, v) y (v, u) son equivalentes, i.e. (u, v) = (v, u), es llamado Grafo No Dirigido. Ello implica que, en este tipo de grafos, es válido moverse del vértice u al vértice v así como del vértice v al vértice u pasado por la arista (u, v). O en otras palabras, la arista (u, v) se asume como Bidireccional. Los grafos no dirigidos, cuando son representados en el plano, se dibujan de manera que ahora sus aristas se representan con curvas en donde no hay una dirección especificada. Un grafo no dirigido libre de lazos es llamado Grafo Simple. En la Figura 5.3 se presenta un ejemplo de grafo simple. La descripción formal del grafo requiere que se cite textualmente que es simple ya que sus conjuntos de vértices y aristas se especifican tal y como se indicó anteriormente: • V(G) = {A, B, C, D} • E(G) = {(A, D), (A, C), (A, B), (B, C), (B, D), (C, D)} Nótese que cada arista es incluida una sola vez en el conjunto E(G) no importando el orden en que se listen sus vértices.

A

D

B

C

Figura 5.3. Ejemplo de grafo simple.

A partir de este punto, sólo usaremos el término Grafo para denotar a un Grafo Simple. Además, cuando usemos el término Grafo Dirigido estamos haciendo referencia a un Grafo Dirigido Simple. Sea G un grafo. Los vértices u, v ∈ V(G) se denominan Adyacentes si existe una arista e ∈ E(G) tal que e = (u, v). En tal caso, u y v son llamados Puntos Finales o Extremos de e, y además se dice que e Conecta a u y v. Además, la arista e se dice que es Incidente a cada uno de sus puntos finales u y v. Sea X un conjunto. La Cardinalidad del Conjunto X, denotada por Card(X), es el número de elementos que conforman a X. Si X es el conjunto vacío entonces Card(X) = 0. Si X es finito entonces Card(X) ∈ ] + ∪ {0} , es decir, la cardinalidad de X es un número entero no negativo. Si X es un conjunto infinito entonces se dice que Card(X) = ∞. El Grado de un Vértice v en un grafo G, denotado como deg(v), es igual al número de aristas en G que contienen a v, es decir, aquellas que son incidentes a v. Debido a que cada arista es contada dos veces al determinar los grados de los vértices de un grafo G, se tiene el siguiente

152

Capítulo 5. Grafos: Conceptos Básicos

Teorema 5.1: La suma de los grados de los vértices de un grafo G es igual a dos veces el número de aristas en G. Es decir:

¦

deg (u ) = 2 ⋅ Card ( E (G ))

u∈V ( G )

Considérese nuevamente el grafo G de la Figura 5.3. Para tal grafo se tiene que:

deg(A) = 3

deg(B) = 3

deg(C) = 3

deg(D) = 3

La suma de los grados es igual a 12. Tal resultado es dos veces el número de aristas en el grafo. Se dice que un vértice es Par o Impar de acuerdo a si su grado es un número par o impar, respectivamente. Por lo tanto, en el ejemplo de la Figura 5.3 todos sus vértices son de grafo impar. El siguiente Teorema es importante ya que establece formalmente una propiedad fundamental de todo grafo.

Teorema 5.2: El número de vértices de grado impar en un grafo G es siempre par.

Demostración: Por el Teorema 5.1 tenemos que el número de aristas en G está dado por: 2 ⋅ Card ( E (G )) =

¦

deg (u )

u∈V ( G )

Ello implica claramente que la suma de los grados de los vértices de G, es decir, ¦ deg (u ) , es un número par. El conjunto de vértices de G puede ser particionado u∈V ( G )

en dos subconjuntos: • Vodd(G): Los vértices de G de grado impar. • Veven(G): Los vértices de G de grado par. Claramente Vodd(G) y Veven(G) son conjuntos disjuntos, es decir, Veven(G) ∩ Vodd(G) = ∅. La suma ¦ deg (u ) ahora puede ser reescrita como: u∈V ( G )

¦

u∈V ( G )

deg (u ) =

¦

u∈Vodd ( G )

deg (u ) +

¦

deg (u )

u∈Veven ( G )

153

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

La suma de los vértices de grado par, es decir

¦

deg (u ) , es un número par ya que es

u∈Veven ( G )

bien sabido que una suma de números pares es siempre par. Ello quiere decir que forzosamente la suma de los vértices de grado impar, ¦ deg(u ) , tiene que ser también u∈Vodd ( G )

un número par. Si fuese lo contrario tendríamos entonces que la suma de los grados de todos los vértices de G es impar, pero ello contradice al Teorema 5.1. Ahora consideremos únicamente a la suma

¦

deg (u ) la cual sabemos es un número

u∈Vodd ( G )

par. Los términos de esta suma son los grados de los vértices impares. Eso quiere decir que tenemos una suma cuyos términos son todos números impares. Para que esta suma de números impares proporcione como resultado un número par se requiere que Card (vodd (G )) sea un número par. Ello implica finalmente que el número de vértices de grado impar en cualquier grafo G es par.

Un vértice de grado cero es llamado un Vértice Aislado. Un grafo formado por un único vértice, y por tanto sin aristas, es llamado Grafo Trivial.







Sea G un grafo. Consideremos las siguientes Definiciones: Grado Mínimo de G, δ(G): δ (G ) = min{deg (v) : v ∈V (G )} Es decir, del conjunto formado por los grados de los vértices de G, se elige el valor mínimo. Grafo Máximo de G, Δ(G): Δ(G ) = max{deg (v) : v ∈ V (G )} Es decir, del conjunto formado por los grados de los vértices de G, se elige el valor máximo. Grado Promedio de G, d(G):

d (G ) =

1 ¦ deg (v) Card (V (G )) v∈V (G )

La siguiente Propiedad debe ser evidente: Para cualquier grafo G se tiene que

δ (G ) ≤ d (G ) ≤ Δ(G ) Sea G un grafo. Al Radio Número de Aristas por Vértice, denotado por ε(G), se le define como:

ε (G ) =

154

Card ( E (G )) Card (V (G ))

Capítulo 5. Grafos: Conceptos Básicos

Demostremos ahora el siguiente

Teorema 5.3: Sea G un grafo. Entonces

Card ( E (G )) =

1 d (G ) ⋅ Card (V (G )) 2

Demostración: Del Teorema 5.1 sabemos que 2 ⋅ Card ( E (G )) =

¦

deg (u )

u∈V ( G )

De donde obviamente se desprende que

Card ( E (G )) =

1 ¦ deg (u ) 2 u∈V ( G )

Ahora bien, multipliquemos el lado derecho de la expresión anterior por 1 =

Card (V (G )) , Card (V (G ))

entonces se tiene:

Card ( E (G )) =

1 Card (V (G )) ¦ deg (u ) 2 Card (V (G )) u∈V (G )

Aplicando la Definición de Grado Promedio de G obtenemos la demostración del Teorema. 1 Card ( E (G )) = Card (V (G )) ⋅ d (G ) 2

Corolario 5.1: Sea G un grafo. Entonces:

1 2

ε (G ) = d (G )

Demostración: Por definición de Radio Número de Aristas por Vértice tenemos que:

ε (G ) =

Card ( E (G )) Card (V (G ))

155

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

1 Sabemos por el Teorema 5.3 que Card ( E (G )) = Card (V (G )) ⋅ d (G ) . Por lo tanto al 2 sustituir en ε (G ) obtenemos finalmente: 1 Card (V (G )) ⋅ d (G ) 2 Card (V (G )) 1 = d (G ) 2

ε (G ) =

Considérese un grafo G con sus conjuntos V(G) y E(G). Un grafo H con sus conjuntos V(H) y E(H) es llamado un Subgrafo de G si los vértices y aristas de H están contenidas en los conjuntos de vértices y aristas de G, es decir, si V ( H ) ⊆ V (G ) y E ( H ) ⊆ E (G) . Consideremos algunos subgrafos especiales: •

Sea U un conjunto de vértices tal que U ⊆ V(G). G[U] denota al subgrafo de G cuyas aristas son aristas de G y sus vértices están en U. A G[U] se le llama el Subgrafo Inducido por el Conjunto de Vértices U. Por ejemplo, considérense los grafos de la Figura 5.4 donde el grafo H es de hecho el subgrafo de G inducido por conjunto de vértices {B, C, X, Y}, es decir H = G[{B, C, X, Y}].



Si v es un vértice en G, entonces G \ v es el subgrafo de G obtenido al eliminar a v de G y al eliminar a todas las aristas en G que contienen a v: o V(G \ v) = V(G) \ {v} o E(G \ v) = E(G) \ {(u, v): u ∈ V(G)}



Si e es una arista en G, entonces G \ e es el subgrafo de G obtenido al eliminar la arista e de G: o V(G \ e) = V(G) o E(G \ e) = E(G) \ {e} A

B

C

X

Y

Z

B

X

C

Y

G

H

V(G) = {A, B, C, X, Y, Z} E(G) = {(A,X), (A,Z), (B,X), (B,Y), (C,Y), (X,Y)}

V(H) = {B, C, X, Y} E(H) = {(B,X), (B,Y), (C,Y), (X,Y)}

Figura 5.4. Dos grafos G y H. H es el subgrafo G[{B, C, X, Y}]: Toda arista (u, v) de H es una arista de G pero además u, v ∈ V(H).

156

Capítulo 5. Grafos: Conceptos Básicos

Se dice que los grafos G y G* son Isomorfos si existe una función biyectiva f: V(G) → V(G*) tal que (u, v) es una arista de G si y sólo si (f(u), f(v)) es una arista de G*. En otras palabras, se pueden reetiquetar los vértices de G para ser vértices de G*, manteniendo las aristas correspondientes en G y G*. Por ejemplo, sean G y G* los grafos de la Figura 5.5. Considérese la siguiente función biyectiva f:V(G) → V(G*):

­u °v ° °w f ( n) = ® °x °y ° ¯z

1

si n = 1 si n = 2 si n = 3 si n = 4 si n = 5 si n = 6

2 u

6

v

w

x

y

z

3 4

5

G V(G) = {1, 2, 3, 4, 5, 6} E(G) = {(1,2),(1,3),(1,5), (2,4),(2,5),(2,6), (3,6),(3,4),(4,6)}

G* V(G*) = {u, v, w, x, y, z} E(G*) = {(u,v), (u,w), (u,y), (v,y), (v,x), (v,z), (w,x), (w,z), (x,z)}

Figura 5.5. Los Grafos G y G* se caracterizan como Isomorfos (véase el texto para detalles).

Veamos si toda arista de G es una arista de G* después de aplicarle la función f: • La arista (1, 2) pertenece a E(G) y (f(1), f(2)) = (u, v) también pertenece a E(G*). • La arista (1, 3) pertenece a E(G) y (f(1), f(3)) = (u, w) también pertenece a E(G*). • La arista (1, 5) pertenece a E(G) y (f(1), f(5)) = (u, y) también pertenece a E(G*). • La arista (2, 4) pertenece a E(G) y (f(2), f(4)) = (v, x) también pertenece a E(G*). • La arista (2, 5) pertenece a E(G) y (f(2), f(5)) = (v, y) también pertenece a E(G*). • La arista (2, 6) pertenece a E(G) y (f(2), f(6)) = (v, z) también pertenece a E(G*). • La arista (3, 6) pertenece a E(G) y (f(3), f(6)) = (w, z) también pertenece a E(G*). • La arista (3, 4) pertenece a E(G) y (f(3), f(4)) = (w, x) también pertenece a E(G*). • La arista (4, 6) pertenece a E(G) y (f(4), f(6)) = (x, z) también pertenece a E(G*). Hasta este punto hemos probado que si e es una arista de G entonces es también un arista de G*. Ahora debemos demostrar el recíproco usando la inversa de la función f, es decir f -1: • La arista (u, v) pertenece a E(G*) y (f -1(u), f -1(v)) = (1, 2) también pertenece a E(G). • La arista (u, w) pertenece a E(G*) y (f -1(u), f -1(w)) = (1, 3) también pertenece a E(G). • La arista (u, y) pertenece a E(G*) y (f -1(u), f -1(y)) = (1, 5) también pertenece a E(G). • La arista (v, x) pertenece a E(G*) y (f -1(v), f -1(x)) = (2, 4) también pertenece a E(G). • La arista (v, y) pertenece a E(G*) y (f -1(v), f -1(y)) = (2, 5) también pertenece a E(G). • La arista (v, z) pertenece a E(G*) y (f -1(v), f -1(z)) = (2, 6) también pertenece a E(G). 157

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

• La arista (w, z) pertenece a E(G*) y (f -1(w), f -1(z)) = (3, 6) también pertenece a E(G). • La arista (w, x) pertenece a E(G*) y (f -1(w), f -1(x)) = (3, 4) también pertenece a E(G). • La arista (x, z) pertenece a E(G*) y (f -1(x), f -1(z)) = (4, 6) también pertenece a E(G). Hemos demostrado que (u, v) es una arista de E(G) si y sólo si (f(u), f(v)) es una arista de G*. Por lo tanto G y G*, de la Figura 5.5, son isomorfos. Los grafos de la Figura 5.6 no pueden ser caracterizados como isomorfos: Aunque G y G* ambos tienen 5 vértices y 7 aristas, el grafo G tiene un vértice de grado 4 mientras que el grafo G* no lo tiene. En general, dos grafos no son isomorfos si no cuentan con el mismo número de vértices y aristas. Si efectivamente cuentan con el mismo número de vértices y aristas tampoco se garantiza que sean isomorfos, en ese sentido, verificar la correspondencia entre grados puede ser de utilidad. Pero aún si coincidieran en los grados de sus vértices, ello no implica que sean isomorfos: la única forma de probarlo es afirmar o refutar la existencia de la función biyectiva f:V(G) → V(G*). Sea n = Card(V(G)) = Card(V(G*)). Entonces, de acuerdo a lo anterior, se tendrían que examinar a lo más n! posibles funciones. 1

2 u

5 4

v

w

x

y

3

G V(G) = {1, 2, 3, 4, 5} E(G) = {(1,2), (1,3), (1,4), (1,5), (2,3), (2,4), (4,5)}

G* V(G*) = {u, v, w, x, y} E(G*) = {(u,v), (u,w), (v,x), (v,y), (w,y), (w,x), (x,y)}

Figura 5.6. Los grafos G y G* no son isomorfos (véase el texto para detalles).

Dado un grafo G se define al Complemento de G, denotado como G , en donde E (G ) = {(u, v) : u, v ∈V (G ) ∧ u ≠ v ∧ (u, v) ∉ E (G )} . Es decir, G es el grafo que contiene exactamente a aquellas aristas que no están en G. Un procedimiento para determinar al complemento de un grafo consiste en la generación de todas las posibles combinaciones de dos vértices, eliminar aquellas combinaciones incluidas en E(G) y de las restantes se formará el nuevo conjunto E (G ) . En la Figura 5.7 se muestra un par de grafos G y G . u

v

z

u w

y

x

z

w y

G

x

G

Figura 5.7. Un grafo G y su complemento, G .

158

v

Capítulo 5. Grafos: Conceptos Básicos

Considérense dos grafos G y H. El Producto Cartesiano de G y H, denotado por G × H, es un grafo cuyo conjunto de vértices está dado por V(G × H) = V(G) × V(H). El conjunto de aristas se define de la siguiente manera: Un par de vértices de G × H, (u, u’) y (v, v’), formarán una arista si y sólo si una de las siguientes dos condiciones se satisface: • u = v y (u’, v’) ∈ E(H), o bien, • u’ = v’ y (u, v) ∈ E(G). Por ejemplo, sean los grafos G y H presentados en la Figura 5.8.a y 5.8.b respectivamente. Entonces, su correspondiente producto Cartesiano está dado por el grafo que se presenta en la Figura 5.8.c.

1

1

3

2

2

G 4

H b)

a)

(1,1)

(1,2)

(1,3)

(1,4)

(2,1)

(2,2)

(2,3)

(2,4)

G×H c) Figura 5.8. a) Un grafo G de 2 vértices. b) Un grafo H de 4 vértices. c) El grafo resultante del producto cartesiano de los grafos G y H.

159

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

5 1

6

7

8

9

3

2

4

b) H

a) G

5 1

6

7

8

9

3

2

4

c) Join(G, H) Figura 5.9. a) Un grafo G de 4 vértices. b) Un grafo H de 5 vértices. c) El grafo resultante de la unión de los grafos G y H.

Considérense dos grafos G y H tales que V(G) ∩ V(H) = ∅. La Unión de los Grafos G y H, denotada por Join(G, H), es un grafo cuyo conjunto de vértices está dado por V(Join(G, H)) = V(G) ∪ V(H). El conjunto de aristas se define de la siguiente manera: E(Join(G, H)) = E(G) ∪ E(H) ∪ {(u, v): u ∈ V(G), v ∈ V(H)}. Por ejemplo, sean los grafos G y H presentados en la Figura 5.9.a y 5.9.b, respectivamente. Entonces Join(G, H) está dado por el grafo presentado en la Figura 5.9.c.

5.2 Rutas, Circuitos y Conectividad Una Ruta en un grafo G consiste de una secuencia alternante de vértices y aristas de la forma (v0, e1, v1, e2, v2, ..., en-1, vn-1, en, vn) En donde cada arista ei contiene los vértices vi-1 y vi (los cuales aparecen antes y después de ei en la secuencia). Al número n de aristas se le denomina la Longitud de la Ruta. Por simplicidad, se denota a una ruta sólo por la secuencia de sus vértices, asumiendo que efectivamente existen las aristas que conectan a dos vértices consecutivos dentro de la misma: (v0, v1, ..., vn-1, vn)

160

Capítulo 5. Grafos: Conceptos Básicos

Se dice que una ruta es Cerrada si v0 = vn. De lo contrario se dice que la ruta va de v0 a vn o bien que la ruta conecta a v0 con vn. Una Ruta Simple es aquella en la cual todos sus vértices son distintos. Una ruta en la cual todas las aristas son distintas es llamada una Vía (trail). Un Circuito es una ruta cerrada de longitud mayor o igual 3 en la cual todos los vértices son distintos excepto v0 = vn. Por ejemplo, considérese el grafo de la Figura 5.10. Sean las secuencias: • α = ( P4 , P1 , P2 , P5 , P1 , P2 , P3 , P6 )



β = ( P4 , P1 , P5 , P2 , P6 )



γ = ( P4 , P1 , P5 , P2 , P3 , P5 , P6 )



δ = ( P4 , P1 , P5 , P3 , P6 ) P1

P2

P3

P4

P5

P6

Figura 5.10. Un grafo conectado de 6 vértices y 9 aristas.

La secuencia α es una ruta que va de P4 a P6; sin embargo no es una vía debido a que la arista (P1, P2) es usada dos veces. La secuencia β no es una ruta debido a que la arista (P2, P6) no existe. La secuencia γ es una vía debido a que ninguna de sus aristas es usada en más de una ocasión; pero no es una ruta simple debido a que el vértice P5 es usado en dos ocasiones. La secuencia δ es una ruta simple de P4 a P6; pero ésta no es necesariamente la ruta más corta de P4 a P6 (respecto al número de aristas usadas). La ruta más corta de P4 a P6 es la ruta simple (P4, P5, P6) la cual tiene longitud 2. Un grafo G es Conectado si existe una ruta entre cualesquiera dos de sus vértices. El grafo de la Figura 5.10 es conectado. El grafo de la Figura 5.11 no está conectado debido a que, por ejemplo, no existe una ruta entre los vértices D y E.

A

B

C

D

E

F

Figura 5.11. Un ejemplo de grafo no conectado.

161

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Sea G un grafo conectado. Un vértice v en G es llamado un Punto de Corte (cutpoint) si G \ v es un grafo desconectado (recuérdese que G \ v es el subgrafo obtenido de G al eliminar a v y a todas las aristas conteniendo v). Una arista e de G es llamada un Puente si G \ e es un grafo desconectado (G \ e es el subgrafo obtenido de G al eliminar a la arista e). Considérense los grafos a y b de la Figura 5.12. En el grafo a, el vértice D es un punto de corte y carece de puentes. En el grafo b la arista e = (D, F) es un puente, de hecho, sus vértices D y F son caracterizados como puntos de corte. B

A

a

D

C

E

B

E

A

H

D

F

C

F

H

b

Figura 5.12. El grafo a cuenta con un punto de corte mientras que el grafo b cuenta con un puente.

Se dice que un grafo G es Completo si para cualquier par de vértices u, v en V(G), u ≠ v, existe en E(G) la arista (u, v) que los conecta. Obviamente, un grafo completo G es un grafo conectado. El grafo completo con n vértices se denota como Kn. En la Figura 5.13 se presentan los grafos completos K1 a K6.

K1

K2

K3

K4

K5

K6

Figura 5.13. Los grafos completos de 1 a 6 vértices.

Nótese, observando la Figura 5.13, que K1 tiene 0 aristas, K2 cuenta con 1 arista, K3 tiene 3 aristas, K4 cuenta con 6 aristas, K5 con 10 aristas y K6 tiene 15 aristas. Es decir, tenemos la sucesión 0, 1, 3, 6, 10, 15 La idea es encontrar al elemento general de tal sucesión. Supóngase que los n vértices de Kn se etiquetan de 1 a n. Considérese al vértice 1. Dado que Kn es completo entonces existen n-1 aristas de la forma (1, u), u ∈ V(G), u ≠ 1. Si los vértices representaran personas que se están dando la mano entonces el vértice 1 acaba de efectuar n-1 saludos. Supóngase que los saludos son bidireccionales, es decir, que x salude a y es equivalente a que y salude a x.

162

Capítulo 5. Grafos: Conceptos Básicos

Ahora bien, considérese al vértice 2. El vértice 1 y 2 ya se saludaron previamente cuando contamos los saludos efectuados por el vértice 1, entonces, al vértice 2 sólo le basta efectuar n-2 saludos: un saludo con el vértice 3, un saludo con el vértice 4 y así sucesivamente hasta que saluda al vértice n. El vértice 3 sólo debe efectuar n-3 saludos ya que previamente fue saludado por los vértices 1 y 2. El vértice 4 efectúa n-4 saludos ya que los vértices 1, 2 y 3 lo saludaron antes. Este proceso continúa hasta que llegamos al vértice n-2. A este vértice sólo le falta darse la mano con los vértices n-1 y n, es decir, efectúa sólo dos saludos. Al vértice n-1 sólo le resta 1 saludo el cual se efectúa con el vértice n. Nótese que el vértice n ya no debe darle la mano a nadie dado que ya fue saludado previamente por los n-1 vértices anteriores. ¿Cuántos saludos se efectuaron en total entre los n vértices? Para ello tenemos la siguiente serie: n −1

(n-1) + (n-2) + (n-3) + (n-4) + … + 2 + 1 + 0 =

¦j= j =0

n(n − 1) 2

Este conteo de saludos entre n elementos de un conjunto es lo que se conoce como el Lema de los Saludos (Handshaking Lemma) y nos ha permitido identificar al elemento general de la sucesión: 0, 1, 3, 6, 10, 15, …,

n(n − 1) 2

Es decir, se tiene que el número de aristas en un grafo completo Kn está dado por:

Card(E(Kn)) =

n(n − 1) 2

Nótese que de hecho el número de aristas en un grafo completo Kn representa una cota superior para el número de aristas en cualquier otro grafo conectado de n vértices. El grafo completo Kn describe lo que en Geometría Euclidiana es conocido como un Simplex (n-1)-Dimensional. Entonces, por ejemplo, K3 corresponde a un Simplex 2D (un triángulo) mientras que K4 corresponde a un Simplex 3D (un tetraedro). Ahora bien, una k-celda de Kn, 0 ≤ k < n, se define como un subgrafo de Kn el cual es completo con k+1 vértices. Por ejemplo, considérese el grafo K4. Se puede observar, en la Figura 5.14, que K4 cuenta con cuatro 0-celdas, seis 1-celdas, cuatro 2-celdas y una 3-celda.

Figura 5.14. El grafo K4. Describe a un tetraedro en el Espacio Euclidiano 3D.

163

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Un grafo conectado G es Regular de Grado k si cada uno de sus vértices tiene grado k. En otras palabras, un grafo es regular si cada uno de sus vértices tiene el mismo grado. De hecho, todo grafo completo es regular, pero todo grafo regular no necesariamente es completo. Los grafos regulares conectados de grados 0, 1 o 2 son fácilmente descritos. El grafo conectado regular de grado 0 es el grafo trivial. El grafo conectado regular de grado 1 es el grafo con dos vértices y una arista que los conecta. El grafo conectado regular de grado 2 es el grafo que consiste de sólo un circuito de longitud n. Tales grafos se presentan en la Figura 5.15, donde también se pueden apreciar dos grafos regulares de grado 3 con 6 vértices.

Regular de grado 0

Regular de grado 1

Regulares de grado 2

Regulares de grado 3 con 6 vértices Figura 5.15. Ejemplos de grafos regulares de grados 0 a 3.

Considérese el Producto Cartesiano {0,1}n = {0,1} × {0,1} × ... × {0,1} 

n

tal que n ≥ 0. Un Grafo Hipercúbico n-Dimensional, denotado por Hn, es un grafo cuyos vértices cuentan con etiquetas tomadas de {0, 1}n. Dos vértices u = (x1, x2, …, xi, …, xn) y v = (y1, y2, …, yi, …, yn) formarán una arista de Hn si y sólo si la cardinalidad del conjunto {i: xi ≠ yi, xi ∈ u, yi ∈ v} es exactamente 1. Ahora bien, una k-celda de Hn, 0 ≤ k ≤ n, se define como un subgrafo de Hn que es conectado y regular con 2k vértices de grado k. Por ejemplo, considérese el grafo H3, véase la Figura 5.16. Es claro que H3 cuenta con ocho 0-celdas, doce 1-celdas, seis 2-celdas y una 3-celda.

164

Capítulo 5. Grafos: Conceptos Básicos

(0,1,1)

(0,1,0)

(1,1,1)

(1,1,0)

(0,0,1)

(0,0,0)

(1,0,1)

(1,0,0)

Figura 5.16. El grafo H3.

El grafo asociado a lo que se conoce como un Politopo Cruz n-Dimensional, n ≥ 1, denotado por Cn, es un grafo cuyos vértices tienen sus etiquetas en el § · conjunto de permutaciones de ¨ ± 1, 0,..., 0

¸¸ . Dos vértices u = (x1, x2, …, xi, …, xn) y ¨  n © ¹ v = (y1, y2, …, yi, …, yn) describen una arista en Cn si y sólo si la cardinalidad del conjunto {i: |xi| ≠ |yi|, xi ∈ u, yi ∈ v} es exactamente 2. Ahora bien, una k-celda de Cn, 0 ≤ k < n, se define como un subgrafo de Cn el cual es completo con k+1 vértices. Por ejemplo, considérese el grafo C3, véase la Figura 5.17. Se puede observar que C3 cuenta con seis 0-celdas, doce 1-celdas y ocho 2-celdas. (0,0,1)

(0,1,0)

(-1,0,0)

(1,0,0)

(0,-1,0) (0,0,-1)

Figura 5.17. El grafo C3.

Se dice que un grafo G es Bipartita si el conjunto de sus vértices V(G) puede ser particionado en dos subconjuntos disjuntos M y N tal que cada arista de G conecta un vértice de M a un vértice de N. Cuando se hace referencia a un grafo Bipartita Completo se dice que G es bipartita y además cada vértice de M está conectado a cada vértice de N.

165

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Tal grafo se denota por Km,n en donde m es el número de vértices en M y n es el número de vértices en N y además m ≤ n . Los grafos presentados en la Figura 5.18 corresponden a K2,3, K3,3 y K2,4.

K2,3

K3,3

K2,4

Figura 5.18. Ejemplos de grafos bipartitas completos.

Un grafo que puede ser dibujado en una superficie de tal forma que sus aristas no se intersectan es llamado Grafo Plano. Por ejemplo, véase la Figura 5.19, aunque el grafo completo con cuatro vértices K4 es usualmente dibujado con algunas de sus aristas intersectándose, también puede ser dibujado de manera que no existan tales intersecciones, por lo tanto K4 es un grafo plano.

Æ

Figura 5.19. Verificando que el grafo K4 es un grafo plano.

Un grafo G es llamado Grafo Pesado si a cada arista e de G le es asignado un número no negativo w(e) llamado el Peso de e. En la Figura 5.20 se muestra un ejemplo de grafo pesado. A1

3

3

4

A3 4

7 2

P

6

A2

A4

2

6

2 3

A5

4

A6

Figura 5.20. Ejemplo de grafo pesado.

166

Q

1 2

Capítulo 5. Grafos: Conceptos Básicos

El Peso de una Ruta en un grafo pesado G es definido como la suma de los pesos de las aristas en la ruta. Uno de los problemas más importantes dentro de la teoría de grafos consiste en encontrar la ruta más corta, es decir, la ruta con el peso mínimo entre dos vértices dados. La ruta más corta entre los vértices P y Q en el grafo presentado en la Figura 5.20 tiene un peso igual a 14 y está dada por los vértices (P, A1, A2, A5, A3, A6, Q) Sea G un grafo conectado. Un Conjunto Independiente de G (Independent Set), denotado por IS(G), es un subconjunto de los vértices en V(G) tal que para cualesquiera vértices u, v ∈ IS(G) la arista (u, v) no está presente en E(G). Un Conjunto Independiente Máximo de G (Maximal Independent Set), denotado por MIS(G), es un conjunto independiente de G con la propiedad de que cuando se agrega un vértice adicional v a MIS(G) entonces la arista (v, x) está en E(G) para x ∈ MIS(G). Por ejemplo, considérese el siguiente grafo G de la Figura 5.21. Entonces, MIS(G) = {2, 3, 6, 7}. 7

5

8

6

2

4

1

3

G Figura 5.21. El Conjunto Independiente Máximo de G está dado por los vértices 2, 3, 6 y 7.

Sea G un grafo y sea U un subconjunto de V(G), es decir, U ⊆ V(G). La diferencia G \ U denota al subgrafo de G que se obtiene al eliminar a todos los vértices de G contenidos en U y a todas las aristas que les son incidentes. Ahora sea F un subconjunto de E(G). Entonces, la diferencia G \ F denota al subgrafo de G que se obtiene al eliminar a todas las aristas de G contenidas en F. Se dice que un grafo conectado G es k-Conectado Respecto a sus Vértices si para k < Card(V(G)) y para todo subconjunto X ⊆ V(G), tal que Card(X) < k, se tiene que el subgrafo G \ X es conectado. Ahora bien, el entero k más grande tal que un grafo G es k-conectado respecto a sus vértices se denomina la Conectividad de G Respecto a sus Vértices. A esta conectividad se le denota como κ(G). Por ejemplo, considérese el grafo G de la Figura 5.22. Si deseamos demostrar que es 2-Conectado Respecto a sus Vértices, entonces, de acuerdo a la definición, debemos verificar que para todo subconjunto X de un solo vértice, G \ X permanece conectado. El

167

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

grafo tiene en total 6 vértices, por lo que entonces tendremos que formar 6 conjuntos de prueba: X1 = {1}, X2 = {2}, X3 = {3}, X4 = {4}, X5 = {5} y X6 = {6}. En la Figura 5.23 se muestran todos los subgrafos obtenidos. Es claro que éstos son conectados. Por lo tanto, podemos afirmar que nuestro grafo en cuestión efectivamente es 2-Conectado Respecto a sus Vértices. Si se requiere demostrar que el grafo es 3-conectado respecto a sus vértices entonces se debe verificar que con todo subconjunto X con a lo más 2 vértices el subgrafo G \ X permanece conectado. Dado que ya se demostró que el grafo es 2-conectado respecto a sus vértices entonces sólo deberíamos efectuar las correspondientes pruebas con los posibles 15 subconjuntos de 2 vértices. 1

4

5

6 2

3

G Figura 5.22. Un grafo conectado G de 6 vértices. 1 4

1

5

4

4

5

5

6 2

3

6

6 2

3

G \ {1}

G \ {2}

G \ {3}

1

1

1

5

4

6 2

5

6 3

G \ {4}

4

2

3

G \ {5}

2

3

G \ {5}

Figura 5.23. Los subgrafos G \ {u}, u ∈ V(G), del grafo G presentado en la Figura 5.22. Todos los subgrafos obtenidos son conectados y por lo tanto G es caracterizado como 2-Conectado Respecto a sus Vértices.

168

Capítulo 5. Grafos: Conceptos Básicos

Se dice que un grafo conectado G tal que Card(V(G)) > 1 es O-Conectado Respecto a sus Aristas si para todo subconjunto F ⊆ E(G), tal que Card(F) < O, se tiene que el subgrafo G \ F es conectado. El entero O más grande tal que un grafo G es O-conectado respecto a sus aristas se denomina la Conectividad de G Respecto a sus Aristas y se le denota como λ(G). Considérese nuevamente el grafo G de la Figura 5.22. Para verificar que es 2-Conectado Respecto a sus aristas debemos formar todos los posibles subconjuntos F de 1 arista y verificar que G \ F permanece conectado. Dado que G se forma por 12 aristas entonces tendremos 12 subconjuntos de prueba. Realmente no es difícil apreciar que el grafo G efectivamente es 2-Conectado respecto a sus aristas.

5.3 Circuitos Eulerianos y Circuitos Hamiltonianos Una Ruta Euleriana en un grafo conectado G es una ruta que pasa por cada arista de G exactamente una sola vez, aunque puede visitar a un vértice en más de una ocasión. De hecho una ruta Euleriana es una vía que utiliza todas las aristas del grafo. En la Figura 5.24 se presenta un ejemplo de un grafo que cuenta con una ruta Euleriana.

a

b

Figura 5.24. a) Un grafo conectado. b) La forma en que deben ser recorridas sus aristas a fin de obtener una Ruta Euleriana.

Si un grafo tiene una ruta Euleriana y además ésta es una ruta cerrada entonces se tiene que tal ruta de hecho es un Circuito Euleriano y el grafo es caracterizado como Grafo Euleriano. En la Figura 5.25 se presenta un ejemplo de un grafo Euleriano. Nótese que todos sus vértices son de grado par.

a

b

Figura 5.25. a) Un grafo conectado con 4 vértices de grado 2 y 2 vértices de grado 4. b) La forma en que deben ser recorridas sus aristas a fin de obtener un Circuito Euleriano.

El siguiente Teorema proporciona una condición necesaria y suficiente para caracterizar a un grafo como Euleriano:

169

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Teorema 5.4 (Euler): Un grafo conectado es Euleriano si y sólo si cada uno de sus vértices tiene grado par.

Demostración:

Ÿ) Supóngase que G es un grafo Euleriano. Por lo tanto, G cuenta con un circuito Euleriano E. Asumamos que el circuito está descrito por E = (v, …, u, …, w, …, w, …, v). Por definición, toda arista de G es visitada exactamente una sola vez por el circuito. Los vértices en E pueden ser caracterizados de la siguiente manera: • Vértices u que aparecen una sola vez en la descripción del circuito E. Es claro que estos vértices tienen exactamente grado 2 ya que les es incidente una arista que llega a u y también le es incidente una arista que sale de u. • Vértices w ≠ v que aparecen en más de una ocasión en la descripción del circuito E. Por cada aparición de w se tiene que un par de aristas de G son utilizadas: una arista que llega a w y una arista que sale de w. En consecuencia deg(w) es un número par mayor o igual a 2. • El vértice inicial/final v. Al inicio del circuito el vértice v se conecta con una arista, y al final del circuito al vértice v le es incidente una arista. Si v aparece únicamente al inicio y al final de la descripción de E entonces deg(v) = 2. Por otro lado, si v aparece en otras ocasiones dentro de E entonces por cada una de éstas se utilizan dos aristas de G. En esta situación el grado de v es un número par mayor o igual a 2. Es claro entonces que todo vértice de G es de grado par. ⇐) Ahora supóngase que todos los vértices de G son de grado par. Se demostrará que G es Euleriano mediante el Principio de Inducción Matemática. El Caso Base requiere considerar a aquel grafo conectado con el menor número n de vértices y m de aristas tal que es un grafo Euleriano. Obviamente se debe tomar en cuenta que sus vértices sean todos de grado par. Claramente el grafo a considerar es el grafo completo K3. En esta situación tenemos que n = 3 y m = 3. Ahora se requiere plantear la Hipótesis de Inducción. En nuestro caso simplemente diremos que todo grafo conectado cuyos n’ vértices son todos de grado par y con número de aristas m’ es efectivamente un grafo Euleriano. El Paso Inductivo requiere probar que todo grafo conectado cuyos n vértices son todos de grado par y con número de aristas m es un grafo Euleriano. En este caso supondremos que n > n’ y m > m’. Es decir, nuestra Hipótesis de Inducción es válida para grafos más “pequeños” que el que se está considerando para nuestro Paso Inductivo. Sea v cualquier vértice elegido arbitrariamente en V(G). Ahora, partiendo de v, se elegiran sucesivamente y de manera también arbitraria aristas de G hasta retornar nuevamente a v. Es decir, se ha

170

Capítulo 5. Grafos: Conceptos Básicos

formado una vía W que inicia y termina en v. Dado que todo vértice u de G es de grado par, entonces por cada aparición de u en W se utilizan dos aristas: una arista que incide sobre u y una arista que conecta a u con otro vértice adyacente en W. Por lo tanto se garantiza la existencia de la vía W. Sea EW el conjunto de aristas de G que están presentes en la vía W. Si se remueven las aristas en EW del grafo G entonces es claro que lo que se obtendrá será un conjunto de k subgrafos de G: C1, C2, …, Ck. Evidentemente las aristas en el i-ésimo subgrafo Ci, 1 ≤ i ≤ k, no están incluidas en la vía W. Por otro lado, el número de aristas y vértices en cada uno de estos subgrafos es menor a m=Card(E(G)) y n = Card(V(G)), respectivamente. Ahora considérese a cualquiera de los subgrafos de G. Considérese el i-ésimo, Ci, 1 ≤ i ≤ k. Se deberán responder dos preguntas: • ¿Ci es un grafo conectado? • ¿Todos los vértices de Ci son de grado par? Para responder la primer pregunta únicamente debemos asumir que los subgrafos de G, resultantes de la remoción de las aristas en W, fueron caracterizados de tal forma que cada uno cuenta con únicamente un componente. La segunda pregunta es la que realmente forma nuestro punto de interés actual. Supóngase que Ci tiene al menos un vértice ui de grado impar. Si ui no forma parte de la vía W entonces G claramente tiene un vértice de grado impar, lo que contradice la suposición inicial respecto a G. Por otro lado, si ui forma parte de la vía W, tenemos que ui tiene un número impar de aristas incidentes las cuales no están en W, pero también tiene un número par de aristas incidentes que sí forman parte de W. En consecuencia el grado de ui, respecto a G, es un número impar, lo que de nueva cuenta nos conduce a una contradicción respecto a las consideraciones iniciales sobre el grafo G. Por lo tanto podemos garantizar que el subgrafo Ci es conectado y todos sus vértices son de grado par. Ahora es en este punto donde aplicamos nuestra Hipótesis de Inducción sobre cada uno de los subgrafos C1, C2, …, Ck. Sea Ei el circuito Euleriano asociado al subgrafo Ci. Tal circuito utiliza a todas las aristas de Ci. Dado que G es un grafo conectado entonces existe un vértice ai en Ci, i = 1, 2, …, k, tal que ai está presente tanto en W como en Ei. Formaremos el circuito Euleriano de G de la siguiente manera: • Se recorren los vértices de W comenzando en el vértice inicial v. • A partir de v se recorren los vértices hasta encontrar al vértice a1. En este punto se recorre el circuito E1 y se retorna nuevamente a a1. • Partiendo de a1 en W se recorren los vértices hasta encontrar al vértice a2. Ahora se recorre el circuito E2 y se retorna a a2. • Se continúa recorriendo sucesivamente a W y visitando los circuitos E3, E4, …, Ei-1. Al encontrar al vértice ai, se recorre el circuito Ei y se retorna a ai. • … • Cuando se encuentra al vértice ak se recorre entonces al último circuito Ek y se recorre finalmente al resto de W, finalizando nuevamente en el vértice v.

171

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Es claro que el recorrido descrito visita a todas las aristas de G. Tal recorrido es precisamente un Circuito Euleriano y por lo tanto G es un grafo Euleriano.

El siguiente Corolario establece una condición necesaria y suficiente para determinar la existencia de una ruta Euleriana en un grafo: Corolario 5.2: Un grafo conectado G cuenta con una Ruta Euleriana si y sólo si tiene exactamente dos vértices de grado impar.

Demostración:

Ÿ) Supongamos que G cuenta efectivamente con la ruta Euleriana E. Sabemos que toda aparición de un vértice en E implica que dos aristas de G están siendo utilizadas: una arista que incide sobre el vértice y otra arista que sale del vértice. Sin embargo, ahora debe agregarse un par de excepciones: si u es el vértice inicial de E entonces únicamente se utiliza una arista de G que conecta a u con otro vértice adyacente. Por otro lado, si v es el vértice final de E entonces únicamente se utiliza una arista de G que es incidente a v. Nótese que estos puntos implican que los vértices inicial y final de E son ambos de grado impar mientras que el resto es de grado par. ⇐) Ahora asumamos que G cuenta con exactamente dos vértices u y v de grado impar. Nótese que si se agrega la arista temporal (u, v) a G entonces todos sus vértices son ahora de grado par y aplicando el Teorema 5.4 se obtiene el correspondiente circuito Euleriano. La Ruta Euleriana de G es identificada al remover precisamente la arista temporal (u, v).

Un Circuito Hamiltoniano en un grafo conectado G es un circuito que contiene a todos los vértices de G. Si G admite un circuito Hamiltoniano entonces G es llamado Grafo Hamiltoniano. En la Figura 5.26 se presenta un ejemplo de un grafo Hamiltoniano y su correspondiente circuito Hamiltoniano. Hasta el día de hoy no se ha encontrado un criterio simple y eficiente, tal como sucede con los grafos Eulerianos, que indique si un grafo es o no Hamiltoniano.

a

b

Figura 5.26. a) Un grafo conectado. b) La forma en que deben ser recorridas algunas de sus aristas a fin de obtener un Circuito Hamiltoniano.

172

Capítulo 5. Grafos: Conceptos Básicos

5.4 Árboles A un grafo T se le llama Árbol si es conectado y además T no tiene circuitos. Si un grafo G no es conectado y no tiene circuitos, entonces se le llama Bosque. El árbol que consiste de un solo vértice sin aristas, i.e. el grafo trivial, es llamado Árbol Degenerado. En la Figura 5.27 se presentan ejemplos de un árbol y un bosque. A un árbol de n vértices se le denotará como Tn. 1

2 3

5

4 6

8

7 9

a

b

Figura 5.27. a) Ejemplo de un árbol. b) Ejemplo de un bosque: es un grafo no conectado libre de circuitos que se forma por dos árboles.

Considérese un árbol T. Claramente existe sólo una ruta simple entre cualesquiera dos vértices de T. Además: a) Supóngase que no existe una arista (u, v) en T. Ahora agréguese la arista (u, v) en T. Entonces, la ruta simple original que va de u a v en T, junto con la nueva arista (u, v), formarán un circuito y por lo tanto T dejará de ser un árbol. b) Supóngase que existe una arista (u, v) en T y que ésta es eliminada de T. Entonces T ya no está conectado debido a que ya no existirá una ruta simple de u a v y finalmente T ya no puede ser caracterizado como un árbol. Estos razonamientos nos proporcionan los elementos para probar el siguiente: Teorema 5.5: Sea G un grafo con n > 1 vértices. Entonces se tendrán las equivalencias: a) G es un árbol. b) G no tiene circuitos y tiene n - 1 aristas. c) G está conectado y tiene n - 1 aristas.

El Teorema indica que un árbol T con n vértices, Tn, deberá tener n - 1 aristas. Véase, por ejemplo, el árbol de la Figura 5.27.a que cuenta con n = 8 vértices y n - 1 = 7 aristas. Es claro entonces que contamos con una cota inferior para el número de aristas en cualquier grafo conectado: n-1. Los vértices en cualquier árbol se caracterizan en dos clases: un Nodo Interno o Vértice Interno es aquel vértice v para el cual se tiene que deg(v) ≥ 2. Por otro lado, un Nodo Hoja o Vértice Hoja es aquel vértice cuyo grado es exactamente 1. 173

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Un subgrafo T de un grafo conectado G es llamado un Árbol de Expansión de G si T es un árbol y además T incluye a todos los vértices de G, es decir, V(T) = V(G). En la Figura 5.28 se presenta un grafo G y tres posibles árboles de expansión T1, T2 y T3 de G.

G

T1

T2

T3

Figura 5.28. Tres árboles de expansión para el grafo G.

1

1

3

2

6

4

7

1

2

6

6

7

5

3

7

8

2

5 9

8

3

4

4 10

9 5

10

K5,5, g(K5,5) = 4 H, g(H) = 7 G, g(G) = ∞ a) b) c) Figura 5.29. a) Un grafo G que es un árbol de 10 vértices. b) El grafo bipartita K5,5. c) Un grafo conectado regular de grado 2 con 7 vértices.

174

Capítulo 5. Grafos: Conceptos Básicos

5.5 Girths y Diámetros Sea G un grafo. El Girth de G, denotado por g(G), se define como la longitud, en términos del número de aristas, del circuito más corto en G. Si G es libre de circuitos entonces se dice que su girth tiene valor infinito. Por ejemplo, considérense los grafos presentados en la Figura 5.29. El grafo G, Figura 5.29.a, es un árbol, por lo tanto es libre de circuitos y en consecuencia g(G) = ∞. Para el caso del grafo bipartita K5,5, su circuito mínimo en términos del número de aristas tiene longitud 4. Entonces g(K5,5) = 4. Finalmente, para el caso del grafo H regular de grado 2 con 7 vértices, Figura 5.29.c, se cuenta con un único circuito de longitud 7: g(H) = 7. Sea G un grafo. La ruta más corta, en términos del número de aristas, entre dos vértices u, v ∈ V(G) se denotará como dG(u, v). Si no existe una ruta que conecte a u con v entonces dG(u, v) = ∞. El Diámetro de G se define como la ruta más corta de mayor longitud entre cualesquiera dos vértices de G y se denota por Diameter(G). En términos formales se tiene que Diameter(G) = Max{dG(u,v), u, v ∈ V(G)}. Por ejemplo, en la Figura 5.30 se presenta al grafo Hipercúbico 4-Dimensional H4. Nótese, por ejemplo, que la ruta más corta, en términos del número de aristas, que conecta a los vértices 1 y 16 tiene longitud 4. Pero esta longitud es también la mayor existente para cualquier otra ruta más corta en H4. Por lo tanto el diámetro de H4 es 4.

15

11

16

12

13

14

9

10

7

8

3

4

1

5

6

2

H4, Diameter(H4) = 4 Figura 5.30. El grafo Hipercúbico 4-Dimensional.

En la Figura 5.31.a tenemos un árbol T conformado por 10 vértices. Sabemos que para cualquier par de vértices existe una ruta simple en T que los conecta y además es la más corta. Lo contrario implicaría que T cuenta con al menos dos rutas distintas para conectar a un par de vértices y ello a su vez conduciría a la existencia de un circuito, sin embargo T es un árbol. Es fácil apreciar que la ruta más corta, en términos del número de aristas, que conecta al vértice 4 con el vértice 10 tiene longitud 7. De hecho, esta ruta es la más larga de entre todas las rutas más cortas en T. Por lo tanto, Diameter(T) = 7. En la Figura 5.31.b se tiene al grafo bipartita completo K5,5. La partición de los vértices de K5,5 está dada por los subconjuntos V1 = {1, 2, 3, 4, 5} y V2 = {6, 7, 8, 9, 10}. Toda ruta más 175

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

corta que conecta a cualquier vértice de V1 con un vértice de V2 tiene longitud de 1 arista. Pero toda ruta más corta que conecte a dos vértices ambos en V1 o ambos en V2 tendrá longitud 2. Por lo tanto, para K5,5 tenemos que Diameter(K5,5) = 2. 1

1 6

3

2

4

2 7

5

6

7

3

8

8

9 4

9

10 5

10

T, Diameter(T) = 7

K5,5, Diameter(K5,5) = 2

a)

b)

Figura 5.31. a) Un árbol G de 10 vértices. b) El grafo bipartita K5,5.

176

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

6. Generación Automática de Grafos

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

178

Capítulo 6. Generación Automática de Grafos

6.1 Representación Computacional de Grafos La representación por Listas de Adyacencias de un grafo G consiste en un arreglo Adj de n listas ligadas, n = Card(V(G)), una por cada vértice en V(G). Para cada vértice u ∈ V(G), su lista de adyacencias Adj[u] contiene todos los vértices v tales que existe una arista (u, v) ∈ E(G). Es decir, Adj[u] consiste de todos los vértices adyacentes a u en G. Los vértices en cada lista de adyacencias son por lo regular almacenados en orden arbitrario. En la Figura 6.1 se presenta un ejemplo de listas de adyacencias para un grafo.

1

2 3

5

4

Adj 1 2 3 4 5

Æ Æ Æ Æ Æ

Æ Æ Æ Æ Æ

2 1 2 2 1

5 3 Æ 4 Æ 5 4 5 Æ 3 2 Æ 4

Figura 6.1. Representación por listas de adyacencias del grafo G.

Para cualquier grafo G, la suma de las longitudes de todas sus listas de adyacencias es 2⋅Card(E(G)), debido a que una arista (u, v) aparecerá representada tanto en Adj[u] como en Adj[v]. Por ejemplo, para el grafo de la Figura 6.1, se tiene que las listas que describen la conectividad de los vértices 1, 2, 3, 4 y 5 tienen 2, 4, 2, 3 y 3 elementos respectivamente, de manera que 2 + 4 + 2 + 3 + 3 = 14 = 2⋅7 = 2⋅Card(E(G)). Sea G un grafo para el cual su conjunto de n vértices está enumerado como 1, 2, 3, ..., n. Entonces, la Representación Matricial del grafo consiste de una matriz binaria A de tamaño n × n tal que ­1 si (i, j ) ∈ E (G ) A[i ][ j ] = ® ¯0 si (i, j ) ∉ E (G )

Dado que en un grafo no dirigido sus aristas son bidireccionales, por lo tanto si (u, v) ∈ E(G) entonces A[u][v] = A[v][u] = 1. En la Figura 6.2 se presenta un ejemplo de representación matricial para un grafo. 1

2 3

5

4

1 2 3 4 5

1 0 1 0 0 1

2 1 0 1 1 1

3 0 1 0 1 0

4 0 1 1 0 1

5 1 1 0 1 0

G Figura 6.2. Representación Matricial del grafo G. Nótese que la matriz es simétrica.

179

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Se sabe que la transpuesta de una matriz A es la matriz AT tal que AT[i][j] = A[j][i], para i = 1, 2, …, n y para j = 1, 2, …, n. Debido a que en un grafo (u, v) y (v, u) representan a la misma arista, la representación matricial de tal grafo es su propia transpuesta A = AT, o en otras palabras, la matriz A es simétrica. Sea v un vértice en un grafo G. Se define a la Vecindad de v, denotado por N(v), como el conjunto de vértices adyacentes a v. Por ejemplo, para el grafo de la Figura 6.2, se tiene que N(1) = {2, 5}. Es claro que si v es un vértice aislado entonces N(v) = ∅. De hecho, es evidente que Card(N(u)) = deg(u). Ahora bien, el determinar a la vecindad de un vértice en un grafo será una operación que estará presente en la mayoría de los algoritmos a describir. Sea G un grafo con n = Card(V(G)). Si G está representado por listas de adyacencias, las cuales suponemos están implementadas como estructuras de datos dinámicas, es claro que sólo se requiere ubicarse en la posición v del arreglo de listas Adj, es decir, Adj[v], y retornar la referencia de la lista específica. Por otro lado, si G tiene representación matricial entonces es necesario colocarse en el renglón v de la matriz y recorrer columna por columna recolectando a sus vértices incidentes, es decir, aquellos valores de columnas para los cuales se cumple que A[v][j] = 1, j = 1, 2, 3, …, n. Otra operación a considerar es la remoción de una arista en un grafo. En la representación matricial sólo se requiere, para la arista (u, v), hacer A[u][v] = A[v][u] = 0. En el caso de las listas de adyacencias por un lado se debe dar de baja al vértice v en la lista en Adj[u], y por otro, se debe dar de baja al vértice u en la lista Adj[v]. La remoción de un vértice v en un grafo G requiere remover al vértice del conjunto V(G), es decir, hacer V(G) \ {v}. También deben removerse todas las aristas incidentes a v del conjunto E(G). En el caso de la representación por listas de adyacencias se debe eliminar toda instancia del vértice v, lo cual implica recorrer todas las listas (asumiendo que no están ordenadas) y por último, eliminar la lista en Adj[v]. De hecho, a la posición Adj[v] le deberá ser asignado un valor indicativo de que tal vértice ya no está presente en G. En el caso de la representación matricial sólo es necesario asignar un valor indicativo, para denotar que el vértice ya no existe, a todos los elementos del renglón v y a todos los elementos de la columna v.

6.2 Permutación Aleatoria de n Elementos Se producirá una permutación aleatoria del conjunto de enteros {1, 2, 3, …, n} al generar una secuencia de intercambios aleatorios. Considérese, por ejemplo, la generación de una permutación aleatoria de los enteros en el conjunto {1, 2, 3, 4, 5}, n = 5. Supóngase que los elementos permutados serán guardados en un arreglo de enteros perm. Una primer etapa considerará la inicialización del arreglo perm como perm[i] = i, i = 1, 2…, n. Por lo tanto en un principio se tendrá: • perm[1] = 1 • perm[2] = 2 • perm[3] = 3 • perm[4] = 4 • perm[5] = 5

180

Capítulo 6. Generación Automática de Grafos

La segunda etapa consistirá en la generación de la secuencia de intercambios aleatorios de los elementos del arreglo perm. Se generará un índice j de la siguiente manera: j = «¬i + getNextReal ( ) ⋅ (n + 1- i ) »¼ , i = 1, 2,..., n

En donde: • getNextReal( ) denota a una función que genera números aleatorios en el rango [0.0, 1.0). • El operador «¬⋅»¼ indica el piso (floor) del número real obtenido al efectuar la secuencia de operaciones i + getNextReal( )⋅(n + 1 – i). La función getNextReal( ) tiene por codominio un subconjunto de los números reales, sin embargo, j al ser un índice para el arreglo perm requiere ser un entero. Se usa la función piso ya que de lo contrario pueden obtenerse enteros mayores a n. La idea es la siguiente: se efectuarán n intercambios (swappings) entre dos elementos del arreglo perm. De hecho, se intercambiará al elemento en perm[i] con el elemento en perm[j]. En el ejemplo dado se podría entonces tener la secuencia de intercambios presentada en la Tabla 6.1. Tabla 6.1. Definiendo el conjunto de intercambios a aplicar para obtener una permutación de los elementos del conjunto {1, 2, 3, 4, 5} (Véase el texto para detalles). i getNextReal( ) j j = 1 0.490312 ¬«1 + 0.490312 * (5 + 1 - 1) ¼» = ¬«3.45156¼» = 3 j = «¬ 2 + 0.071558 * (5 + 1 - 2) »¼ = «¬ 2.28623»¼ = 2 2 0.857475 3

0.324372

4

0.980483

5

0.1209

j = «¬3 + 0.324372 * (5 + 1 - 3) »¼ = «¬3.97312 »¼ = 3 j = ¬« 4 + 0.980483 * (5 + 1 - 4) ¼» = ¬«5.96097 »¼ = 5 j = ¬«5 + 0.1209 * (5 + 1 - 5) ¼» = ¬«5.1209¼» = 5

De acuerdo a los índices generados, Tabla 6.1 tercer columna, se tendrá entonces que el arreglo perm queda de la siguiente manera (nótese que se pueden generar “intercambios” entre elementos con el mismo índice): • perm[1] = 3 • perm[2] = 2 • perm[3] = 1 • perm[4] = 5 • perm[5] = 4 El Algoritmo 6.1 implementa el procedimiento antes descrito. Se reciben dos entradas: • n: El número de elementos a permutar. • perm[1, …, n]: El arreglo donde se guardará la permutación generada.

181

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Algoritmo 6.1. Permutación aleatoria de los elementos en el conjunto {1, 2, …., n}.

Procedure randomPermutation(Integer n, Array perm[1, …, n]) for i = 1 until n do perm[i] = i end-of-for for i = 1 until n do // Se genera un índice aleatorio j ∈ {1, …, n}. j = «¬i + getNextReal ( ) *(n + 1- i ) »¼ // Se efectúa un intercambio entre los elementos perm[i] y perm[j]. temp = perm[i] perm[i] = perm[j] perm[j] = temp end-of-for end-of-procedure

6.3 Generación de Grafos Aleatorios Ahora se especificará un procedimiento para generar un grafo aleatorio dados el número de vértices y aristas deseados. El grafo a generar puede ser uno de los siguientes: • Grafo simple (sin lazos y sin aristas paralelas) o multigrafo (con lazos o aristas paralelas). • Dirigido o no dirigido. • Acíclico dirigido. • Pesado o no pesado. El procedimiento deberá ser capaz de generar un grafo válido, por lo tanto, es necesario tomar en cuenta algunas propiedades: • Si se desea generar un grafo simple no dirigido o bien un grafo acíclico dirigido de n vértices, entonces el número de aristas m no debe ser mayor a

n(n − 1) 2 •

Si se desea generar un grafo dirigido simple de n vértices, entonces el número de aristas m no debe ser mayor a n(n − 1)



Obviamente, si se desea generar un grafo simple, la salida omitirá lazos y aristas paralelas. Si el grafo generado es dirigido entonces los pares de vértices que describen a las aristas son pares ordenados. En el caso de un grafo acíclico dirigido de n vértices se hará uso del Algoritmo 6.1 (randomPermutation) para obtener una permutación aleatoria del conjunto {1, 2, …, n}, específicamente se obtiene (perm[1], perm[2], …, perm[n]). Posteriormente sus m aristas serán de la forma (perm[i], perm[j]) tal que i < j.

182

Capítulo 6. Generación Automática de Grafos

Supóngase que se desea generar un grafo aleatorio simple no dirigido de n = 5 vértices y m = 8 aristas. En primer lugar se verifica que efectivamente

m=8≤

n(n − 1) = 10 2

Ahora supongamos que el grafo es representado por una matriz de adyacencias adj de tamaño n × n. La matriz es inicializada con cero (false) en todas sus posiciones. Véase la Tabla 6.2. Tabla 6.2. Matriz de Adyacencias inicial para un grafo simple no dirigido de 5 vértices (véase el texto para detalles). adj 1 2 3 4 5 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 5 0 0 0 0 0

Las aristas que compondrán al grafo serán generadas de manera aleatoria. Los vértices inicial y final de la i-ésima arista, i = 1, 2, …, m, serán generados mediante la siguiente regla: Vértice inicial i-ésima arista: Vértice final i-ésima arista:

nodea = getNextInteger(n) + 1 nodeb = getNextInteger(n) + 1

La función getNextInteger genera enteros aleatorios dentro del conjunto {0, 1, 2, 3, …, n-1}. Existe la posibilidad de que nodea y nodeb tengan el mismo valor, lo cual implica la presencia de un lazo, sin embargo se requiere un grafo simple. En este caso, deberá verificarse que los valores de nodea y nodeb sean distintos. Supóngase que se tienen, tal como presenta la Tabla 6.3, las m = 8 aristas generadas. Tabla 6.3. Un conjunto de 8 aristas candidatas a ser agregadas a un grafo simple no dirigido de 5 vértices (Véase el texto para detalles). Arista: nodea nodeb (nodea, nodeb) 5 3 (5, 3) 1 2 (1, 2) 2 1 (2, 1) 2 3 (2, 3) 4 5 (4, 5) 4 1 (4, 1) 5 1 (5, 1) 1 4 (1, 4)

183

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

También se puede presentar la situación de que se hayan generado aristas repetidas que de hecho son aristas paralelas. Para identificarlas, el par de vértices que describe a una arista será ordenado de menor a mayor. Para el ejemplo tratado se tendrán las aristas, con sus vértices ordenados, presentadas en la Tabla 6.4. Tabla 6.4. Un conjunto de 8 aristas candidatas a ser agregadas a un grafo simple no dirigido de 5 vértices. Los vértices que las conforman han sido ordenados de menor a mayor. (véase el texto para detalles). Arista: (nodea, nodeb) (3, 5) (1, 2) (1, 2) (2, 3) (4, 5) (1, 4) (1, 5) (1, 4)

Finalmente, se procederá a identificar aristas paralelas, y si es el caso desecharlas. Se tiene la siguiente regla: Si (nodea, nodeb) ∉ E(G) entonces E(G) = E(G) ∪ {(nodea, nodeb)} Es decir, la arista (nodea, nodeb) será una arista del grafo final si ésta no ha sido antes introducida en el grafo. En el caso de que (nodea, nodeb) ya hubiese sido antes identificada entonces se procederá a generar un nuevo par de vértices, se verificará que éstos sean distintos y se evaluarán su pertenencia al conjunto E(G). Para cada una de las aristas presentadas en la Tabla 6.4, y considerando la representación matricial de nuestro grafo, se tiene: • (3, 5), adj[3][5] = 0: La arista se agrega al grafo final y adj[3][5] = adj[5][3] = 1. • (1, 2), adj[1][2] = 0: La arista se agrega al grafo final y adj[1][2] = adj[2][1] = 1. • (1, 2), adj[1][2] = 1: La arista ya había sido antes agregada. o Se genera una nueva arista, por ejemplo, (4, 5): ƒ (4, 5), adj[4][5] = 0: La arista se agrega al grafo final y adj[4][5] = adj[5][4] = 1. • (2, 3), adj[2][3] = 0: La arista se agrega al grafo final y adj[2][3] = adj[3][2] = 1. • (4, 5), adj[4][5] = 1: La arista ya había sido antes agregada. o Se genera una nueva arista, por ejemplo, (2, 4): ƒ (2, 4), adj[2][4] = 0: La arista se agrega al grafo final y adj[2][4] = adj[4][2] = 1. • (1, 4), adj[1][4] = 0: La arista se agrega al grafo final y adj[1][4] = adj[4][1] = 1. • (1, 5), adj[1][5] = 0: La arista se agrega al grafo final y adj[1][5] = adj[5][1] = 1. • (1, 4), adj[1][4] = 1: La arista ya había sido antes agregada. o Se genera una nueva arista, por ejemplo, (3, 4): ƒ (3, 4), adj[3][4] = 0: La arista se agrega al grafo final y adj[3][4] = adj[4][3] = 1.

184

Capítulo 6. Generación Automática de Grafos

Las aristas que conforman finalmente a nuestro grafo simple no dirigido, el cual es presentado en la Figura 6.3, son:

(3, 5), (1, 2), (4, 5), (2, 3), (2, 4), (1, 4), (1, 5), (3, 4)

2

1

3

4

5

Figura 6.3. Un grafo simple no dirigido de 5 vértices y 8 aristas.

Supóngase que ahora se busca un grafo simple dirigido acíclico de 8 vértices y 10 aristas. En primer lugar se verifica que efectivamente:

m = 10 ≤

n(n − 1) = 28 2

Se tiene inicialmente una matriz de adyacencias adj presentada en la Tabla 6.5. Tabla 6.5. Matriz de Adyacencias inicial para un grafo simple dirigido acíclico de 8 vértices (véase el texto para detalles). adj 1 2 3 4 5 6 7 8 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0

La Tabla 6.6 presenta las m = 10 aristas generadas con sus vértices reordenados Recuérdese que se debe verificar previamente que los vértices inicial y final sean distintos.

185

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Tabla 6.6. Un conjunto de 10 aristas candidatas a ser agregadas a un grafo simple dirigido acíclico de 8 vértices (véase el texto para detalles). Arista: Arista Reordenada: nodea nodeb (nodea, nodeb) (nodea, nodeb) 6 7 (6, 7) (6, 7) 1 8 (1, 8) (1, 8) 6 1 (6, 1) (1, 6) 2 4 (2, 4) (2, 4) 6 7 (6, 7) (6, 7) 6 5 (6, 5) (5, 6) 2 5 (2, 5) (2, 5) 4 5 (4, 5) (4, 5) 7 8 (7, 8) (7, 8) 8 6 (8, 6) (6, 8)

Considérese un arreglo de enteros dagpermute[1, …, n]. Inicialmente se tendrá que dagpermute tiene los elementos: • dagpermute[1] = 1 • dagpermute[2] = 2 • dagpermute[3] = 3 • dagpermute[4] = 4 • dagpermute[5] = 5 • dagpermute[6] = 6 • dagpermute[7] = 7 • dagpermute[8] = 8 Pero, mediante la aplicación del Algoritmo randomPermutation se podría tener ahora: • dagpermute[1] = 8 • dagpermute[2] = 4 • dagpermute[3] = 6 • dagpermute[4] = 2 • dagpermute[5] = 7 • dagpermute[6] = 3 • dagpermute[7] = 5 • dagpermute[8] = 1 El objetivo del arreglo dagpermute es el de redefinir a las aristas previamente generadas. Cada vértice de cada arista es redefinido mediante la siguiente regla:

nodea = dagpermute[nodea] nodeb = dagpermute[nodeb] Al aplicar la regla se tienen las aristas presentadas en la Tabla 6.7.

186

Capítulo 6. Generación Automática de Grafos

Tabla 6.7. Redefinición de las 10 aristas en la Tabla 6.6 antes de ser incorporadas a un grafo simple dirigido acíclico de 8 vértices (véase el texto para detalles). Arista Original dagpermute[nodea] dagpermute[nodeb] Arista Redefinida (6, 7) 3 5 (3, 5) (1, 8) 8 1 (8, 1) (1, 6) 8 3 (8, 3) (2, 4) 4 2 (4, 2) (6, 7) 3 5 (3, 5) (5, 6) 7 3 (7, 3) (2, 5) 4 7 (4, 7) (4, 5) 2 7 (2, 7) (7, 8) 5 1 (5, 1) (6, 8) 3 1 (3, 1)

Finalmente, se procederá a utilizar la matriz de adyacencias con el fin de identificar aristas paralelas y desecharlas si es el caso. • (3, 5), adj[3][5] = 0: La arista se agrega al grafo final y adj[3][5] = 1. • (8, 1), adj[8][1] = 0: La arista se agrega al grafo final y adj[8][1] = 1 . • (8, 3), adj[8][3] = 0: La arista se agrega al grafo final y adj[8][3] = 1. • (4, 2), adj[4][2] = 0: La arista se agrega al grafo final y adj[4][2] = 1. • (3, 5), adj[3][5] = 1: La arista ya había sido antes agregada. o Se genera y redefine una nueva arista, por ejemplo, (3, 5): ƒ (6, 7), adj[6][7] = 0: La arista se agrega al grafo final y adj[6][7] = 1. • (7, 3), adj[7][3] = 0: La arista se agrega al grafo final y adj[7][3] = 1. • (4, 7), adj[4][7] = 0: La arista se agrega al grafo final y adj[4][7] = 1. • (2, 7), adj[2][7] = 0: La arista se agrega al grafo final y adj[2][7] = 1. • (5, 1), adj[5][1] = 0: La arista se agrega al grafo final y adj[5][1] = 1. • (3, 1), adj[3][1] = 0: La arista se agrega al grafo final y adj[3][1] = 1. Las aristas que conforman al grafo simple dirigido acíclico son: (3, 5), (8, 1), (8, 3), (4, 2), (6, 7), (7, 3), (4, 7), (2, 7), (5, 1), (3, 1) El grafo se puede apreciar visualmente en la Figura 6.4. Dado que el grafo generado es dirigido los pares de vértices que conforman a las aristas deben asumirse pares ordenados, es decir, (i, j) ≠ (j, i), ∀i, j ∈ V(G). 2

1

3 4

8

7

5

6

Figura 6.4. Un grafo simple dirigido acíclico formado por 8 vértices y 10 aristas.

187

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Si se buscase la generación de un multigrafo entonces el procedimiento para generarlo no consideraría el verificar la validez del número m de aristas requeridas, no se requeriría tampoco verificar que el vértice inicial y el vértice final de una arista sean distintos y tampoco se requeriría consultar en ningún si la arista está duplicada. El Algoritmo 6.2 implementa los procedimientos antes descritos. Éste recibe 7 entradas: • n: El número de vértices del grafo a obtener. • m: El número de aristas del grafo a obtener. • Una variable Booleana simple: o simple = true si el grafo a obtener será simple. o simple = false si el grafo a obtener será un multigrafo. • Una variable Booleana directed: o directed = true si el grafo a obtener será dirigido. o directed = false si el grafo a obtener será no dirigido. • Una variable Booleana acyclic: o acyclic = true si el grafo a obtener es acíclico. o acyclic = false si el grafo a obtener es no acíclico. • Una variable Booleana weighted: o weighted = true si el grafo a obtener es pesado. o weighted = false si el grafo a obtener es no pesado. • minweight: El peso mínimo a aplicar a las aristas. • maxweight: El peso máximo a aplicar a las aristas. El Algoritmo 6.2 proporcionará su salida de la siguiente manera: • Si se obtiene el valor NULL entonces la construcción del grafo solicitado no es posible. • Si la construcción del grafo fue exitosa entonces se recibe un conjunto con tres elementos: o V(G): El conjunto de vértices del grafo generado. o E(G): El conjunto de aristas del grafo generado. o W(G): Una estructura asociada a las aristas del grafo y que contiene los pesos de cada una de éstas. Si weighted = false entonces se espera que W(G) = ∅. Nótese que las especificaciones de V(G) y E(G) van directamente en función de si el grafo es representado por matriz de adyacencias o bien por listas de adyacencias. Algoritmo 6.2. Generación de Grafos Aleatorios.

Procedure randomGraph(Integer n, Integer m, Boolean simple, Boolean directed, Boolean acyclic, Boolean weighted, Real minweight, Real maxweight) Integer maxedges, nodea, nodeb, numedges, temp Integer dagpermute[1, 2, …, n] // Se inicializa el grafo con n vértices y 0 aristas. W(G) contendrá los pesos de las // aristas del grafo. V(G) = {1, 2, …, n} E(G) = ∅ W(G) = ∅

188

Capítulo 6. Generación Automática de Grafos

numedges = 0

// Se verifica si los grafos solicitados pueden ser construidos. if simple = true then maxedges = n * (n - 1) if directed = false then maxedges = maxedges / 2 end-of-if if m > maxedges then // Número de aristas excedente. El grafo no se puede construir. return NULL end-of-if end-of-if if acyclic = true then maxedges = n * (n - 1) / 2 if m > maxedges then // Número de aristas excedente. El grafo no se puede construir. return NULL end-of-if // Se requiere un grafo acíclico, se inicializa el arreglo dagpermute. randomPermutation(n, dagpermute) end-of-if while numedges < m do // Se generará una nueva arista para el grafo. // getNextInteger retorna un entero aleatorio en {0, 1, …, n-1} nodea = getNextInteger(n) + 1 nodeb = getNextInteger(n) + 1 if (simple = true) ∨ (acyclic = true) then if nodea = nodeb then // Se ha detectado una arista con vértices inicial y final // iguales y el grafo solicitado es simple o acíclico. // Se reinicia la iteración actual. continue end-of-if end-of-if if ((simple = true) ∧ (directed = false)) ∨ (acyclic = true) then // Si el grafo solicitado es simple no dirigido o bien es un grafo // acíclico se procede a reordenar los vértices de las arista actual // de menor a mayor.

189

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

if (nodea > nodeb) then temp = nodea nodea = nodeb nodeb = temp end-of-if end-of-if

// Si el grafo solicitado es acíclico entonces se procede a redefinir // la arista actual utilizando el arreglo dagpermute. if acyclic = true then nodea = dagpermute[nodea] nodeb = dagpermute[nodeb] end-of-if // Si el grafo es un multigrafo entonces siempre se ejecuta el código // dentro de la siguiente estructura de decisión: la arista actual // es válida aún cuando sea un lazo o bien si es paralela a otra arista ya // existente. // Si el grafo es simple se determina si la arista actual no había sido antes // generada. if (simple = false) ∨ ((simple = true) ∧ ((nodea, nodeb) ∉ E(G))) then numedges = numedges + 1 E(G) = E(G) ∪ {(nodea, nodeb)} // Si el grafo es pesado se genera un peso dentro del intervalo // [minweight, maxweight] if weighted = true then w(nodea, nodeb) = minweight + getNextReal( ) * (maxweight + 1 - minweight) W(G) = W(G) ∪ {w(nodea, nodeb)} end-of-if end-of-if end-of-while // El grafo fue construido exitosamente. return {V(G), E(G), W} end-of-procedure

6.4 Generación de Grafos Bipartitas Aleatorios Tenemos conocimiento de que un grafo bipartita es un grafo no dirigido cuyos vértices pueden ser particionados en dos subconjuntos tal que ninguna arista conecta a dos vértices en el mismo conjunto. Se abordará la generación de grafos bipartitas aleatorios dadas las cardinalidades n1 y n2 de los dos subconjuntos en los que se particiona su

190

Capítulo 6. Generación Automática de Grafos

conjunto de n = n1 + n2 vértices. Es posible también indicar el número m de aristas requeridas. En este caso, el máximo de aristas que se puede llegar a tener está dado por n1⋅n2. Supóngase que se desea generar un grafo bipartita aleatorio con las siguientes características: • n=7 • n1 = 3 • n2 = 4 • m = 10 Dado que se satisface que m = 10 ≤ n1⋅n2 = 12 se tiene que es posible construir el grafo bipartita requerido. Supongamos que nuestro grafo contará con representación matricial. Entonces inicialmente se procede a construir una matriz de adyacencias adj de tamaño n × n. La matriz es inicializada con cero en todas sus posiciones. Véase la Tabla 6.8. Tabla 6.8. Matriz de Adyacencias inicial para un grafo bipartita de 7 vértices (véase el texto para detalles). adj 1 2 3 4 5 6 7 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0

El vértice inicial y vértice final de cada una de las m aristas del grafo son generados aleatoriamente de acuerdo a la siguiente regla:

nodea = «¬1 + getNextReal( ) ⋅ n1 »¼ nodeb = «¬ n1 + 1 + getNextReal( ) ⋅ n2 »¼ En donde: • La función getNextReal genera números aleatorios en el intervalo [0.0, 1.0). • El producto entre getNextReal y n1 es un número en el intervalo [0.0, n1) pero al sumar uno a tal producto se obtiene un número en el intervalo [1.0, n1 + 1). Al utilizar la función piso se asegura que el valor para nodea se encuentre en {1, 2, 3, …, n1}. Estos vértices forman el primer subconjunto en la partición de los vértices del grafo. • El producto entre getNextReal y n2 es un número en el intervalo [0.0, n2), pero al sumarle n1 + 1 se obtiene un número en el intervalo [n1 + 1, n1 + n2 + 1). La función piso asegura que el valor para nodeb forme parte de {n1 + 1, n1 + 2, …, n1 + n2}. Este es el segundo subconjunto que conforma a la partición de los vértices del grafo.

191

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

En el caso de nuestro grafo bipartita se tendrán, por ejemplo, los vértices presentados en la Tabla 6.9. Tabla 6.9. Generación aleatoria de valores dentro de los conjuntos {1, 2, 3} (segunda columna) y {4, 5, 6, 7} (cuarta columna) para la definición de las 10 aristas candidatas a incorporar a un grafo bipartita de 7 vértices (véase el texto para detalles). getNextReal( ) nodea getNextReal( ) nodeb «¬1 + 0.204864 ⋅ 3»¼ «¬3 + 1 + 0.666241 ⋅ 4»¼ 0.666241 0.204864 = «¬1.61459»¼ = 1 = «¬6.66496 »¼ = 6 0.876297

«¬1 + 0.876297 ⋅ 3»¼ = «¬3.62889»¼ = 3

0.123236

«¬3 + 1 + 0.123236 ⋅ 4»¼ = «¬ 4.49294 »¼ = 4

0.116297

«¬1 + 0.116297 ⋅ 3»¼ = «¬1.34889»¼ = 1

0.851271

«¬3 + 1 + 0.851271 ⋅ 4 »¼ = «¬7.40508»¼ = 7

0.980568

¬«1 + 0.980568 ⋅ 3¼» = ¬«3.9417 ¼» = 3

0.498672

¬«3 + 1 + 0.498672 ⋅ 4 »¼ = ¬«5.99469¼» = 5

0.335574

¬«1 + 0.335574 ⋅ 3¼» = ¬« 2.00672 ¼» = 2

0.647207

0.593103

• • • • • • • • • •

¬«1 + 0.593103 ⋅ 3¼»

= «¬ 2.77931»¼ = 2

0.236683

¬«3 + 1 + 0.647207 ⋅ 4 ¼»

= ¬«6.58883¼» = 6 ¬«3 + 1 + 0.236683 ⋅ 4 ¼»

= «¬ 4.94673»¼ = 4

0.435213

«¬1 + 0.435213 ⋅ 3»¼ = «¬ 2.30564 »¼ = 2

0.819453

«¬3 + 1 + 0.819453 ⋅ 4»¼ = «¬7.27781»¼ = 7

0.93808

«¬1 + 0.93808 ⋅ 3»¼ = «¬3.81424»¼ = 3

0.497439

«¬3 + 1 + 0.497439 ⋅ 4»¼ = «¬5.98976»¼ = 5

0.383601

«¬1 + 0.383601 ⋅ 3»¼ = ¬« 2.1508¼» = 2

0.057174

«¬3 + 1 + 0.057174 ⋅ 4 »¼ = ¬« 4.2287 ¼» = 4

0.149941

¬«1 + 0.149941 ⋅ 3¼» = ¬«1.44982¼» = 1

0.376396

¬«3 + 1 + 0.376396 ⋅ 4 »¼ = ¬«5.50558¼» = 5

En consecuencia se tienen las siguientes aristas: (1, 6) (3, 4) (1, 7) (3, 5) (2, 6) (2, 7) (2, 4) (3, 5) (2, 4) (1, 5)

La presencia de cada arista en el grafo será evaluada. Si una arista ya fue previamente registrada entonces se requiere generar dos nuevos vértices y verificar

192

Capítulo 6. Generación Automática de Grafos

nuevamente si la arista resultante está presente o no en el grafo. La regla a utilizar es la siguiente: Si (nodea, nodeb) ∉ E(G) entonces E(G) = E(G) ∪ {(nodea, nodeb)} Veamos que aristas de la Tabla 6.9, y apoyándonos en el uso de la matriz de adyacencias, se agregarán definitivamente a nuestro grafo bipartita: • (1, 6), adj[1][6] = 0: adj[1][6] = 1 y adj[6][1] = 1. • (3, 4), adj[3][4] = 0: adj[3][4] = 1 y adj[4][3] = 1. • (1, 7), adj[1][7] = 0: adj[1][7] = 1 y adj[7][1] = 1. • (3, 5), adj[3][5] = 0: adj[3][5] = 1 y adj[5][3] = 1. • (2, 6), adj[2][6] = 0: adj[2][6] = 1 y adj[6][2] = 1. • (2, 4), adj[2][4] = 0: adj[2][4] = 1 y adj[4][2] = 1. • (2, 7), adj[2][4] = 0: adj[2][7] = 1 y adj[7][2] = 1. • (3, 5), adj[3][5] = 1: La arista fue previamente registrada. o Se procede a generar una nueva arista, por ejemplo: (1, 4) ƒ (1, 4), adj[1][4] = 0: adj[1][4] = 1 y adj[4][1] = 1. • (2, 4), adj[2][4] = 1: La arista fue previamente registrada. o Se procede a generar una nueva arista, por ejemplo: (2, 5) ƒ (2, 5), adj[2][5] = 0: adj[2][5] = 1 y adj[5][2] = 1. • (1, 5), adj[1][5] = 0: adj[1][5] = 1 y adj[5][1] = 1. En este punto la matriz de adyacencias del grafo tiene el siguiente estado presentado en la Tabla 6.10. Debido a que el grafo es no dirigido se tiene de hecho una matriz simétrica. Tabla 6.10. Matriz de Adyacencias para un grafo bipartita de 7 vértices una vez que se le han agregado 10 aristas (véase el texto para detalles). adj 1 2 3 4 5 6 7 1 0 0 0 1 1 1 1 2 0 0 0 1 1 1 1 3 0 0 0 1 1 0 0 4 1 1 1 0 0 0 0 5 1 1 1 0 0 0 0 6 1 1 0 0 0 0 0 7 1 1 0 0 0 0 0

Ahora se generarán n índices de acuerdo a la siguiente regla:

nodec = ¬« nodea + getNextReal( ) ⋅ (n + 1 - nodea ) ¼» Donde nodea = 1, 2, …, n. La idea es utilizar al índice nodec para reetiquetar, de manera aleatoria, los vértices del grafo. El índice nodec es dependiente del índice nodea. Dado un índice nodea y su correspondiente nodec, en toda arista en donde nodea aparezca, ésta será actualizada al reemplazar el valor de nodea por el valor de nodec. En el caso particular de la representación matricial la operación antes descrita es equivalente a utilizar al índice

193

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

nodec para permutar, de manera aleatoria, a los renglones y columnas de la matriz de adyacencia. Dado un índice nodea y su correspondiente nodec, se procede a permutar a los elementos en el renglón nodea con los elementos del renglón nodec, y también se procede a permutar a los elementos en la columna nodea con los elementos en la columna nodec. De acuerdo a lo anterior, se podría tener, para nuestro grafo bipartita en cuestión, la secuencia de permutaciones presentada en la Tabla 6.11. Tabla 6.11. Generación aleatoria de valores dentro del conjunto {1, 2, 3, 4, 5, 6, 7} a fin de establecer intercambios de renglones y columnas en la matriz de la Tabla 6.10 (véase el texto para detalles). nodea getNextReal( ) nodec Permutaciones 1

0.283893

«¬1 + 0.283893 ⋅ (7 + 1 - 1) »¼ = ¬« 2.98725¼» = 2

Renglón 1 por Renglón 2 Columna 1 por Columna 2

2

0.315361

¬« 2 + 0.315361⋅ (7 + 1 - 2) ¼» = ¬«3.70336¼» = 3

Renglón 2 por Renglón 3 Columna 2 por Columna 3

3

0.202841

¬«3 + 0.202841⋅ (7 + 1 - 3) ¼» = ¬« 4.01421¼» = 4

Renglón 3 por Renglón 4 Columna 3 por Columna 4

4

0.16909

5

¬« 4 + 0.169090 ⋅ (7 + 1 - 4) ¼»

= ¬« 4.67636 ¼» = 4

Renglón 4 por Renglón 4 Columna 4 por Columna 4

0.407595

«¬5 + 0.407595 ⋅ (7 + 1 - 5) »¼ = «¬6.22279 »¼ = 6

Renglón 5 por Renglón 6 Columna 5 por Columna 6

6

0.210496

«¬6 + 0.210496 ⋅ (7 + 1 - 6) »¼ = «¬6.42099 »¼ = 6

Renglón 6 por Renglón 6 Columna 6 por Columna 6

7

0.086544

«¬7 + 0.086544 ⋅ (7 + 1 - 7) »¼ = «¬7.08654 »¼ = 7

Renglón 7 por Renglón 7 Columna 7 por Columna 7

Al aplicar los intercambios de renglones y columnas se tiene la matriz de adyacencias final presentada en la Tabla 6.12. Tabla 6.12. Matriz de Adyacencias para un grafo bipartita de 7 vértices una vez que se le han aplicado los intercambios de renglones y columnas especificados en la Tabla 6.11 (véase el texto para detalles). adj 1 2 3 4 5 6 7 1 0 0 1 0 1 1 1 2 0 0 1 0 0 1 0 3 1 1 0 1 0 0 0 4 0 0 1 0 1 1 1 5 1 0 0 1 0 0 0 6 1 1 0 1 0 0 0 7 1 0 0 1 0 0 0

Finalmente, de la matriz de adyacencias se obtienen las aristas del grafo bipartita buscado. Específicamente, éstas son extraídas de su submatriz triangular superior debido a que por definición el grafo es no dirigido. Por lo tanto se tienen las siguientes aristas: (1, 3), (1, 5), (1, 6), (1, 7), (2, 3), (2, 6), (3, 4), (4, 5), (4, 6), (4, 7)

194

Capítulo 6. Generación Automática de Grafos

Véase la Figura 6.5. Analizando los vértices que las conforman se deduce que el conjunto de vértices del grafo fue particionado en los siguientes dos subconjuntos: {3, 5, 6, 7} {1, 2, 4}

3 1 5 2

6 4

7 Figura 6.5. Un grafo bipartita de 7 vértices. Su conjunto de vértices ha sido particionado en los subconjuntos {1, 2, 4} y {3, 5, 6, 7}.

El Algoritmo 6.3 implementa implementación recibe tres entradas: • • •

los

procedimientos

antes

descritos.

La

n1: Número de vértices del primer subconjunto de vértices en el grafo bipartita. n2: Número de vértices del segundo subconjunto de vértices en el grafo. m: Número de aristas requeridas en el grafo. Si m es cero entonces el grafo será generado con un número aleatorio de aristas.

Debe ser claro que n1⋅n2 es el número máximo de aristas con que puede contar un grafo bipartita. Por otro lado previamente se estableció que si m = 0 entonces el número de aristas a generar será determinado de manera aleatoria. El Algoritmo 6.3 proporcionará su salida de la siguiente manera: •

Se recibe un conjunto con tres elementos: o V(G): El conjunto de vértices del grafo generado. o E(G): El conjunto de aristas del grafo generado. o Un entero numedges que contiene el número de aristas en el grafo.

195

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Algoritmo 6.3. Generación Automática de Grafos Bipartitas Aleatorios.

Procedure randomBipartiteGraph(Integer n1, Integer n2, Integer m) Integer n, nodea, nodeb, nodec, numedges n = n1 + n2 // Se inicializa el grafo con n vértices y 0 aristas. V(G) = {1, 2, …, n} E(G) = ∅ if m ≠ 0 then // Se generará un grafo bipartita con exactamente m aristas. if m > n1 * n2 then // Si el número de aristas deseado excede al máximo posible // entonces m es igualado a n1 * n2. m = n1 * n2 end-of-if numedges = 0 while numedges < m do // Se genera un entero en el intervalo [1, n1] nodea = ¬«1 + getNextReal( ) * n1 ¼» // Se genera un entero en el intervalo [n1 + 1, n] nodeb = «¬ n1 + 1 + getNextReal( ) * n2 »¼ if (nodea, nodeb) ∉ E(G) then // Si la arista (nodei, nodej) no había sido previamente // identificada entonces es agregada al conjunto de aristas // de G. E(G) = E(G) ∪ {(nodea, nodeb)} numedges = numedges + 1 end-of-if end-of-while else

// Si m = 0 entonces se genera un grafo bipartita con número aleatorio // de aristas. // El conjunto de aristas de G es inicializado aleatoriamente de manera // que se tengan aristas con vértices del grupo {1, 2, …, n1} a vértices // del grupo {n1+1, n1+2, …, n1+ n2}. for nodea = 1 until n1 do for nodeb = n1 + 1 until n do // Se agrega una arista si y sólo si el siguiente entero // aleatorio generado es cero. if getNextInteger(2) = 0 then E(G) = E(G) ∪ {(nodea, nodeb)} end-of-if end-of-for end-of-for end-of-else

196

Capítulo 6. Generación Automática de Grafos

for nodea = 1 until n do nodec = ¬« nodea + getNextReal( ) * (n + 1 - nodea) ¼» // El vértice nodea será reetiquetado como nodec. // Por lo tanto, todas aquellas aristas de las cuales // forma parte deberán ser modificadas. for each (u, v) ∈ E(G) do if u = nodea then E(G) = E(G) \ {(u, v)} E(G) = E(G) ∪ {(nodec, v)} end-of-if end-of-for for each (u, v) ∈ E(G) do if v = nodea then E(G) = E(G) \ {(u, v)} E(G) = E(G) ∪ {(u, nodec)} end-of-if end-of-for end-of-for numedges = Card(E(G)) return {V(G), E(G), numedges} end-of-procedure

6.5 Generación de Grafos Regulares Aleatorios Sabemos que un grafo regular es aquel en el que todos sus vértices son del mismo grado y además es conectado. Se establecerá un procedimiento para generar un grafo regular aleatorio dados el número de vértices n y el grado d que se desea tenga cada vértice. Antes de establecer nuestro algoritmo, en primer lugar plantearemos de manera textual el siguiente procedimiento de 7 pasos el cual nos mostrará la forma en que se generarán los grafos en cuestión: • Paso 1: Se inicia con un grafo G con n vértices y cero aristas. • Paso 2: Si todo vértice en el grafo es de grado d entonces el procedimiento ha terminado. • Paso 3: o Se eligen aleatoriamente dos vértices no adyacentes u y v, es decir la arista (u, v) ∉ E(G), tales que su grado sea menor a d. Si tales vértices no son encontrados entonces ir al Paso 5. • Paso 4: Se agrega la arista (u, v) al grafo y se retorna al Paso 2. • Paso 5: Si existe en G un único vértice con grado menor a d entonces ir al Paso 7. • Paso 6: o Se eligen aleatoriamente dos vértices adyacentes r y s, (r, s) ∈ E(G), ambos de grado menor a d. También se eligen aleatoriamente, e independientemente de su

197

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

grado, dos vértices adyacentes p y q, (p, q) ∈ E(G), tales que p no es adyacente a r y q no es adyacente a s, es decir, se debe cumplir: (p, r) ∉ E(G) ∧ (q, s) ∉ E(G) Se remueve la arista (p, q) y se agregan las nuevas aristas (p, r) y (q, s) a G. Se retorna al Paso 2. •

Paso 7: o Considérese el vértice r de grado menor a d. Se eligen aleatoriamente dos vértices adyacentes p y q, (p, q) ∈ E(G), tales que no sean adyacentes al vértice r. Es decir, se satisface que: (p, r) ∉ E(G) ∧ (q, r) ∉ E(G) Ahora la arista (p, q) será removida de G y se agregarán las nuevas aristas (p, r) y (q, r). Se retorna al paso 2.

Es necesario tomar en cuenta que si el valor de d es impar entonces el valor de n debe ser un número par. Ello se debe a que sabemos, desde el Capitulo 5, que el número de vértices de grado impar es siempre par. De hecho, la situación planteada requiere que todos los vértices sean de grado impar, en consecuencia, el valor de n necesariamente tiene que ser par. Por otro lado, y de manera evidente, el valor de d debe ser siempre estrictamente menor al de n. De lo contrario, el grafo buscado no puede ser construido. Finalmente, hemos de tomar en cuenta que el número de aristas en un grafo regular de n vértices y grado d estará dado por (n⋅d)/2. El método anterior será aplicado en la ejemplificación de la generación de un grafo regular de n = 10 vértices y grado d = 3. Dado que d es impar, n es par y d < n, entonces el grafo podrá ser efectivamente construido. De acuerdo al Paso 1 se iniciará con un grafo de 10 vértices y cero aristas. Véase la Figura 6.6.a. Es claro que la proposición especificada en el Paso 2 es falsa: todos los vértices son de grado diferente a 3. Por lo tanto se procede al Paso 3. Se deben elegir dos vértices u y v no adyacentes, no conectados por una arista, con grado menor a 3. En este punto contamos con varias opciones. Supóngase que se elige u = 1 y v = 2. De acuerdo al Paso 4 la arista (1, 2) es agregada al grafo y se retorna al Paso 2. Véase la Figura 6.6.b. Nuevamente vemos que no se satisface la proposición especificada en el Paso 2 ya que todos los vértices son de grado diferente a 3, por lo tanto se procede al Paso 3. Se eligen dos vértices no adyacentes de grado menor a 3, u = 8 y v = 7. Se agrega entonces la arista (8, 7), Paso 4. Véase la Figura 6.6.c. Se retorna al Paso 2. La proposición especificada en el Paso 2 sigue sin ser satisfecha ya que todos los vértices son de grado diferente a 3. Por lo tanto se procede al paso 3. Debe ser claro que la idea es agregar aristas al grafo mientras la proposición del Paso 2 no sea satisfecha y mientras en el Paso 3 se encuentren pares de vértices no adyacentes con grados menores a 3 los cuales dan lugar a una nueva arista según el Paso 4. Las Figuras 6.6.d, 6.6.e y 6.6.f, las Figuras 6.7.a a 6.7.f, y las Figuras 6.8.a y 6.8.b, muestran la secuencia de aristas agregadas según los Pasos 3 y 4. Tal secuencia finalizará, para nuestro ejemplo, cuando en el Paso 3 no se encuentre un par de vértices no adyacentes de grado menor a 3.

198

Capítulo 6. Generación Automática de Grafos

1

2

9

3

1

8

10

4

7

2

6

3

5

1

8

9

6

10

b) Arista agregada: (1, 2).

a) Inicialización.

2

7

9

4

5

1

8

7

2

6

3

8

9

7

10 3

10

4

5

4

c) Arista agregada: (7, 8).

1

2

1

7

8

9

2

10

7

10

3

6

4

5

d) Arista agregada: (3, 6).

8

9

6

5

3

6

4

5

e) Arista agregada: (4, 7). f) Arista agregada: (2, 6). Figura 6.6. Proceso de construcción de un grafo regular de grado 3 y 10 vértices (Primera Parte, véase el texto para detalles).

199

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

1

2

1

8

9

7

9

2

3

6

3

1

8

9

7

6

3

5

1

7

8

9

2

7

10

10 3

6

4

5

d) Arista agregada: (1, 8).

8

9

6

4

c) Arista agregada: (2, 5).

2

7

10

3

1

8

9

2

10

4

5

b) Arista agregada: (3, 4).

a) Arista agregada: (4, 5).

2

6

4

5

1

7

10

10

4

8

5

3

6

4

5

f) Arista agregada: (5, 6). e) Arista agregada: (1, 7). Figura 6.7. Proceso de construcción de un grafo regular de grado 3 y 10 vértices (Segunda Parte, véase el texto para detalles).

200

Capítulo 6. Generación Automática de Grafos

1

2

1

8

9

7

2

6

3

7

9

10

10

3

4

8

5

6

4

5

a) Arista agregada: (3, 8). b) Arista agregada: (9, 10). Figura 6.8. Proceso de construcción de un grafo regular de grado 3 y 10 vértices (Tercera Parte, véase el texto para detalles).

En este punto de nuestro ejemplo, Figura 6.8.b, tenemos que las condiciones impuestas en el Paso 3 no pueden ser satisfechas ya que todos los vértices son de grado 3 excepto los vértices 9 y 10 cuyo grado es uno. Estos últimos vértices tampoco pueden ser seleccionados por el Paso 3 debido a que son adyacentes. El procedimiento tampoco puede finalizar porque precisamente los vértices 9 y 10 no son de grado 3 aún. De acuerdo al Paso 3, debido a que los vértices no adyacentes u y v de grado menor a 3 no pudieron ser encontrados entonces se procede a efectuar el Paso 5.

De acuerdo al Paso 5, se debe satisfacer la existencia de un único vértice de grado menor a 3. Sin embargo se tienen dos, lo que implica proceder a efectuar el Paso 6. Éste requiere de la elección de dos vértices adyacentes r y s con grados menores a 3. También se requiere la elección de dos vértices adyacentes p y q tales que p no es adyacente a r y q no es adyacente a s. Sean r y s los vértices 9 y 10 respectivamente. Sean p y q los vértices 3 y 8 respectivamente. La arista (3, 8) debe ser removida mientras que las aristas (3, 9) y (8, 10) son agregadas. Véase la Figura 6.9. Se retorna al Paso 2.

Por la Figura 6.9.b sabemos que los vértices 9 y 10 son ambos de grado 2 mientras que los restantes de grado 3. La condición del Paso 2 no es aún satisfecha. Tampoco la condición del Paso 3 es satisfecha ya que los vértices 9 y 10 son adyacentes. La condición del Paso 5 tampoco es satisface. Nuevamente se efectúa el Paso 6. La elección lógica para los vértices r y s son nuevamente los vértices 9 y 10. Los vértices adyacentes p y q pueden ser los vértices 1 y 2 ya que el vértice 9 no es adyacente al vértice 1 y el vértice 10 no es adyacente al vértice 2. Por lo tanto la arista (1, 2) es eliminada mientras que las aristas (1, 9) y (2, 10) son agregadas al grafo. Véase la Figura 6.10.

201

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

1

2

1

8

7

9

2

7

9

10

10

3

6

4

8

3

5

6

4

5

a) b) Figura 6.9. Proceso de construcción de un grafo regular de grado 3 y 10 vértices (Cuarta Parte, véase el texto para detalles).

1

2

1

8

7

9

2

7

9

10

10

3

6

4

8

5

3

6

4

5

a) b) Figura 6.10. Proceso de construcción de un grafo regular de grado 3 y 10 vértices (Quinta y Última Parte, véase el texto para detalles).

Al retornar al Paso 2 se tiene que se satisface que todos los vértices del grafo son de grado 3 (Figura 6.10.b). En este punto el proceso finaliza. El procedimiento computacional que permite la generación de grafos regulares de n vértices de grado d, Algoritmo 6.4, opera de la siguiente manera: • Se hace uso del Algoritmo 6.1, randomPermutation, para efectuar las selecciones aleatorias de vértices. • Se utilizará un arreglo de enteros deg[1, …, n] el cual contiene los grados de los vértices del grafo actual. • Etapa 1: o Se buscan pares de vértices no adyacentes tales que su grado sea menor a d. Si se identifica un par, entonces la arista que los conecte es agregada. Si se encuentra una arista que ya fue agregada pero sus vértices son de grado menor a

202

Capítulo 6. Generación Automática de Grafos



d entonces se utilizará una variable bandera indicando la existencia de vértices adyacentes de grado menor a d. Esta bandera será utilizada en la Etapa 2 del algoritmo. Es posible qué no se identifiquen pares de vértices con grados menores a d, sino que sólo un vértice con grado menor a d fue identificado el cuál no pudo ser conectado con los restantes vértices debido a que los grados de éstos ya son iguales a d. En tal caso la mencionada bandera es también activada. Etapa 2: o Si la bandera indicando la presencia de vértices con grados menores a d no está encendida, entonces ello implica que todos los vértices tienen grados iguales a d y por lo tanto el grafo ha sido construido y por ende el proceso finaliza. Si la bandera sí se encuentra encendida entonces se procede a verificar si se encontró una arista con vértices de grados menores a d o bien sólo un vértice con grado menor a d. ƒ Si sólo se identificó un único vértice r de grado menor a d entonces se deben buscar un par de vértices adyacentes p y q tales que p y r, así como q y r, no sean adyacentes. Si p y q son identificados se procede a eliminar la arista (p, q) y se agregan las aristas (p, r) y (q, r). El grado del vértice r se actualiza. ƒ Si se identificaron dos vértices adyacentes r y s de grados menores a d entonces se deben buscar un par de vértices adyacentes p y q tales que p y r, así como q y s, no sean adyacentes. Si p y q son identificados se procede a eliminar la arista (p, q) y se agregan las aristas (p, r) y (q, s). Los grados de los vértices r y s se actualizan. El proceso retorna al inicio de la Etapa 1. ƒ En cualquier caso, el flujo del algoritmo se traslada nuevamente al inicio de la Etapa 1.

El Algoritmo 6.4 recibe dos entradas: • n: Número de vértices del grafo regular a obtener. • degree: Grado de cada vértice en el grafo regular a obtener. Se tendrá la salida correspondiente de la siguiente manera: • Si el Algoritmo retorna un valor NULL entonces se presentó una de las dos siguientes situaciones por las cuales el grafo no pudo ser construido: o El número de vértices es impar y el grado es impar. o El número de vértices es menor o igual al grado esperado en cada vértice. • Si el algoritmo no proporcionó como salida NULL entonces lo que se ha retornado es un conjunto formado por 2 elementos: o V(G): el conjunto de vértices del grafo. o E(G): el conjunto de aristas del grafo. Algoritmo 6.4. Generación Automática de Grafos Regulares de Grado d.

Procedure randomRegularGraph(Integer n, Integer degree) Integer i, j, p, q, r, s, u, v Integer permute[1, 2, …, n] Integer deg[1, 2, …, n] Boolean more

203

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

r=0 s=0 v=0

// Se inicializa el grafo con n vértices y 0 aristas. V(G) = {1, 2, …, n} E(G) = ∅ // El grado de cada vértice es inicializado a cero. for i = 1 until n do deg[i] = 0 end-of-for // Se verifica si es posible construir el grafo solicitado. if degree mod 2 ≠ 0 then if n mod 2 ≠ 0 then // Si el grado es impar y el número de vértices también // es impar, entonces no es posible construir el grafo. return NULL end-of-if end-of-if if n ≤ degree then // Si el número de vértices es menor al grado deseado, entonces no // es posible construir el grafo. return NULL end-of-if

// La etiqueta iterate identifica al ciclo while principal. iterate: while true do randomPermutation(n, permute) more = false // ETAPA 1: Se buscarán pares de nodos no adyacentes con grados // menores a degree. u=0 for i = 1 until n do if deg[permute[i]] < degree then // El vértice en la posición permute[i] tiene grado menor // a degree. El indice permute[i] es guardado en la // variable v. v = permute[i] // Dado que se encontró un vértice con grado menor // a degree, entonces la variable more es actualizada a true. more = true

204

Capítulo 6. Generación Automática de Grafos

for j = i+1 until n do if deg[permute[j]] < degree then // El vértice en la posición permute[j] tiene // grado menor a degree. El indice permute[j] // es guardado en la variable u. u = permute[j] if (v, u) ∉ E(G) then // La arista (u, v) no ha sido // previamente identificada. // Se agrega al grafo y los grados // de los vértices u y v son actualizados. E(G) = E(G) ∪ {(v, u)} deg[v] = deg[v] + 1 deg[u] = deg[u] + 1 // Se ignora la iteración actual del // ciclo principal while y se inicia una // nueva. continue iterate else // Se han encontrado un par de vértices // adyacentes pero con grados menores // a degree. Los vértices de la última // arista encontrada con tales // características son guardados en las // variables r y s. Obviamente la arista // (r, s) no se agrega al grafo. r=v s=u end-of-else end-of-if end-of-for end-of-if end-of-for

if more = false then // No hay vértices con grados menores a degree. // Todos los vértices tienen grados iguales a degree, por lo tanto, // el grafo deseado ha sido construido. Se termina la ejecución // del ciclo while principal. break end-of-if

205

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

// ETAPA 2: Existen vértices con grados menores a d pero que no pudieron // ser conectados a los restantes vértices del grafo. if u = 0 then // Se tiene que sólo se identificó un vértice de grado menor a d que // no pudo ser conectado a los vértices restantes del grafo. // Tal vértice está guardado en la variable v. Ahora es renombrado // como r. r=v // Se procede a buscar dos vértices adjacentes p y q que a su vez no // sean adyacentes al vértice r. for i = 1 until n - 1 do p = permute[i] // Se tiene un vértice candidato p. if r ≠ p then // Se verifica que p y r sean distintos. if (r, p) ∉ E(G) then // Los vértices p y r no son adyacentes. for j = i + 1 until n do // Se tiene un vértice candidato q. q = permute[j] // Se verifica que q y r sean distintos. if q ≠ r then if ((p, q) ∈ E(G)) ∧ ((r, q) ∉ E(G)) then // Si p y q son // adyacentes, y q y r no // son adyacentes // entonces la arista // (p, q) se elimina y se // agregan a la matriz de // adyacencias las aristas // (r,p) y (r,q). E(G) = E(G) ∪ {(r, p)} E(G) = E(G) ∪ {(r, q)} E(G) = E(G) \ {(p, q)} // Se actualiza el grado // del vértice r. deg[r] = deg[r] + 1 deg[r] = deg[r] + 1 // Se ignora la iteración // actual del ciclo // principal while // y se inicia una nueva. continue iterate end-of-if

206

Capítulo 6. Generación Automática de Grafos

end-of-if end-of-for end-of-if end-of-if end-of-for else

// Se identificaron dos vértices adyacentes de grado menor a degree. // Tales vértices se alojan en las variables r y s. // Se procede a buscar dos vértices adyacentes p y q tales que p no // sea adyacente a r y que q no sea adyacente a s. for i = 1 until n do p = permute[i] // Se tiene un vértice candidato p. // Se verifica que p sea distinto a r y a s. if (p ≠ r) ∧ (p ≠ s) then if (r, p) ∉ E(G) then // Los vértices p y r no son adyacentes. for j = 1 until n do // Se tiene un vértice candidato q. q = permute[j] if (q ≠ r) ∧ (q ≠ s) then // Se verifica que q sea distinto a // r y a s. if ((p, q) ∈ E(G)) ∧ ((s, q) ∉ E(G)) then // Si p y q son adyacentes // y s y q no son // adyacentes entonces se // remueve la arista // (p, q) y se agrega la // arista (p, r) y la arista // (q, s). E(G) = E(G) \ {(p, q)} E(G) = E(G) ∪ {(r, p)} E(G) = E(G) ∪ {(s, q)} // Se actualizan los // grados de los vértices // r y s. deg[r] = deg[r] + 1 deg[s] = deg[s] + 1 // Se ignora la iteración // actual del ciclo // principal while // y se inicia una nueva. continue iterate end-of-if

207

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

end-of-if end-of-for end-of-if end-of-if end-of-for end-of-else end-of-while

// El grafo regular de n vértices de grado degree ha sido construido. return {V(G), E(G)} end-of-procedure

6.6 Generación de Árboles de Expansión Aleatorios El siguiente procedimiento genera un árbol de expansión aleatorio de n vértices. El método construye el grafo requerido de la siguiente manera: • • •



Se genera en primer lugar una permutación aleatoria de n índices: (perm[1], perm[2], …, perm[n]). Se construye un árbol parcial inicial que se forma únicamente por el vértice perm[1]. De manera sucesiva se irán agregando vértices al árbol. Supóngase que los vértices que conforman al árbol parcial actual son {perm[1], perm[2], …, perm[i]}. Elíjase aleatoriamente un vértice k en el árbol parcial y actualícese el grafo al agregarle tanto el vértice perm[i+1] así como la arista (perm[i+1], k). El proceso de construcción termina cuando los n vértices han sido todos incluidos en el árbol.

Sabemos, desde el Capítulo 5, que todo árbol de expansión de n vértices tiene exactamente n-1 aristas. Considérese la construcción de un árbol de expansión de n = 8 vértices. Por lo tanto se deberá generar una permutación aleatoria del conjunto {1, 2, 3, 4, 5, 6, 7, 8}. Supongamos que ésta queda de la siguiente manera: • perm[1] = 4 • perm[2] = 1 • perm[3] = 2 • perm[4] = 8 • perm[5] = 6 • perm[6] = 7 • perm[7] = 3 • perm[8] = 5 De acuerdo al procedimiento antes descrito se tiene que el árbol parcial inicial se conformará únicamente por el vértice perm[1] = 4. Véase la Figura 6.11.a.

208

Capítulo 6. Generación Automática de Grafos

El conjunto actual de vértices del árbol parcial es obviamente {4} (i = 1). De acuerdo a nuestro procedimiento debe elegirse un vértice k ∈ {4} el cuál será conectado con el vértice perm[i + 1] = perm[2] = 1. Evidentemente k = 4 y el árbol actual queda como se presenta en la Figura 6.11.b.

El siguiente vértice k a agregar debe ser elegido del conjunto {4, 1} (i = 2) y será conectado al vértice perm[i + 1] = perm[3] = 2. Supóngase que nuevamente k = 4. Véase la Figura 6.11.c.

El conjunto actual de vértices de nuestro árbol está dado por {4, 1, 2} (i = 3). El siguiente vértice k deberá ser aleatoriamente elegido de tal conjunto y se hará adyacente al vértice perm[i + 1] = perm[4] = 8. Haciendo que k = 1, entonces se tiene el árbol de la Figura 6.11.d.

Dados los vértices {4, 1, 2, 8} (i = 4) y haciendo k = 8, se tiene que se agrega la arista con vértice inicial 8 y vértice final perm[i + 1] = perm[5] = 6. Véase la Figura 6.11.e.

El siguiente vértice k debe ser elegido del conjunto {4, 1, 2, 8, 6} (i = 5) y será conectado al vértice perm[i + 1] = perm[6] = 7. Supóngase que k = 4. Se tiene el árbol presentado en la Figura 6.11.f.

Para i = 6 y con el conjunto actual de vértices {4, 1, 2, 8, 6, 7} se conectará al vértice perm[i + 1] = perm[7] = 3 con el vértice, elegido aleatoriamente, k = 6 ∈ {4, 1, 2, 8, 6, 7}. Véase la Figura 6.11.g. Finalmente, para i = 7 el vértice perm[i + 1] = perm[8] = 5 será conectado con el vértice, supongamos, k = 8 ∈ {4, 1, 2, 8, 6, 7, 3}. Se tiene al árbol de expansión final requerido con n = 8 vértices y presentado en la Figura 6.11.h.

El Algoritmo 6.5, que implementa el procedimiento antes descrito, recibe como entrada únicamente el número n de vértices del árbol de expansión deseado. Como se comentó previamente, el árbol se conformará por n-1 aristas, las cuales son especificadas en el conjunto, proporcionado como salida, E(G). También se proporciona como salida el conjunto de vértices V(G).

209

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

4

4

1

a)

4

b)

1

4

2

1

8

2 c)

4

1

2

d)

8

4

1

8

6

2

7

6

e)

f)

4

1

8

2

7

6

3

g)

4

1

8

5

2

7

6

3

h) Figura 6.11. Proceso de construcción de un árbol de expansión de 8 vértices (véase el texto para detalles).

210

Capítulo 6. Generación Automática de Grafos

Algoritmo 6.5. Generación Automática de Árboles de Expansión Aleatorios.

Procedure randomSpanningTree(Integer n) Integer nodea, nodeb Integer permute[1, 2, …, n]

// Se inicializa el grafo con n vértices y 0 aristas. V(G) = {1, 2, …, n} E(G) = ∅ // Se genera una permutación aleatoria de n índices. randomPermutation(n, permute) // Sea agregan n-1 aristas para formar el árbol de expansión. for nodea = 2 until n do // nodea es el vértice a ser agregado al árbol actual. // Se obtiene aleatoriamente un entero en el conjunto {1, 2, ..., nodea} // Tal entero es guardado en la variable nodeb. nodeb = getNextInteger(nodea - 1) + 1 // Se agrega la arista conformada por los vértices nodea y nodeb. E(G) = E(G) ∪ {(permute[nodea], permute[nodeb])} end-of-for return {V(G), E(G)} end-of-procedure

6.7 Generación de Árboles Etiquetados y Códigos de Prüfer Un Árbol Etiquetado es un árbol al que le es asignada una etiqueta única a cada uno de sus vértices. El número total de árboles etiquetados de n vértices es nn-2. Esta fórmula tiene lugar gracias a que en 1918 Heinz Prüfer proporcionó un método de codificación de árboles etiquetados al que hoy se le conoce como el Código o Secuencia de Prüfer. Un Código de Prüfer no es más que una cadena de n-2 enteros tomados del conjunto {1, 2, 3, …, n}, admitiendo repeticiones, para la cual está demostrado que está asociada a uno y sólo un árbol etiquetado de n vértices. Ello quiere decir que cada posición en un Código es uno de n posibles elementos. Dado que el Código tiene longitud n-2 entonces tenemos que el número total de posibles códigos es precisamente nn-2. Por ende, este es también el número total de árboles etiquetados de n vértices.

Considérese el árbol T presentado en la Figura 6.12. Éste cuenta con el código de Prüfer [3, 3, 4, 5, 4, 6]. En primer lugar véase que la longitud del código es 6, por lo tanto n = 8 = V(T). Obsérvese que el conjunto de enteros a tomar en cuenta está dado por {1, 2, 3, 4, 5, 6, 7, 8}. Aquellos enteros que no aparecen en el código son 1, 2, 7 y 8. De acuerdo a la Figura 6.12, precisamente tales enteros corresponden a Nodos Hoja del árbol

211

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

T. Obsérvese también la relación que existe entre el grado de cualquier vértice v en T con el número de veces que éste aparece en su Código de Prüfer. Los vértices de mayor grado en T son el 3 y el 4, ambos con grado 3. Ambos vértices aparecen dos veces en el código. A este par le siguen los vértices 5 y 6 cuyo grado es 2 y que aparecen únicamente una sola vez en el código. Estas observaciones conducen a establecer que todo vértice v de grado deg(v) que forma parte de un árbol etiquetado aparecerá deg(v) – 1 veces en el correspondiente Código de Prüfer. Esta propiedad es consistente con los nodos hoja ya que éstos al ser de grado 1 aparecen 0 veces en el código.

7

1

5 3

2

4 6 8

Figura 6.12. Un Árbol Etiquetado de 8 vértices con Código de Prüffer [3, 3, 4, 5, 4, 6].

El siguiente procedimiento permite obtener un árbol etiquetado de n vértices dado su código de Prüfer. Dada la cadena de n-2 enteros [p1, p2, …, pn-2] se procede como sigue: • Se inicia con un árbol vacío T, V(T) = E(T) = ∅, y se tienen dos conjuntos L1 y L2: o L1 se inicializa con los n enteros 1, 2, …, n, i.e., L1 = {1, 2, …, n}. o L2 se inicializa con los n-2 enteros en el Código de Prüfer dado, i.e., L2 = {p1, p2, …, pn-2}. • Sea w1 el número más pequeño contenido en L1 pero que a su vez no se encuentre en L2, es decir: w1 = min{i: i ∈ L1 ∧ i ∉ L2}. • Se agrega la arista (w1, p1) al árbol T y se borra w1 de L1 y p1 de L2. Es decir, se efectúan las actualizaciones: o V(T) = V(T) ∪ {w1, p1} o E(T) = E(T) ∪ {(w1, p1)} o L1 = L1 \ {w1} o L2 = L2 \ {p1} • Sea w2 el número más pequeño contenido en L1 pero no en L2: o w2 = min{i: i ∈ L1 ∧ i ∉ L2} • Agregar la arista {w2, p2} al árbol T y borrar w2 de L1 y p2 de L2: o V(T) = V(T) ∪ {w2, p2} o E(T) = E(T) ∪ {(w2, p2)} o L1 = L1 \ {w2} o L2 = L2 \ {p2}

212

Capítulo 6. Generación Automática de Grafos





El proceso anterior se efectúa para cada wi, i = 1, 2, 3, …, n-2: o wi = min{i: i ∈ L1 ∧ i ∉ L2} o V(T) = V(T) ∪ {wi, pi} o E(T) = E(T) ∪ {(wi, pi)} o L1 = L1 \ {wi} o L2 = L2 \ {pi} Es claro que cuando L2 se encuentre vacío se tendrá que L1 contiene exactamente dos enteros u y v. En este punto el árbol T es completado al agregarle la arista (u, v).

Por ejemplo, considérese el siguiente Código de Prüfer: [1, 2, 1, 3, 3, 5]. Se tienen 6 enteros lo que implica que su árbol asociado tiene n = 8 vértices. Se obtendrá su árbol etiquetado asociado. Se tienen inicialmente un árbol vacío y los conjuntos: • L1 = {1, 2, 3, 4, 5, 6, 7, 8} • L2 = {p1 = 1, p2 = 2, p3 = 1, p4 = 3, p5 = 3, p6 = 5} Se busca al entero w1 más pequeño en L1 pero que no esté contenido en L2: 4. Se agrega la arista {w1, p1} = (4, 1). Véase la Figura 6.13.a. Ahora L1 = {1, 2, 3, 5, 6, 7, 8} y L2 = {p2 = 2, p3 = 1, p4 = 3, p5 = 3, p6 = 5}. Se busca al entero w2 más pequeño en L1 pero no contenido en L2. En este caso se tiene w2 = 6. Se actualiza el árbol al agregar la arista (6, p2) = (6, 2) (Figura 6.13.b). Se remueve w2 = 6 de L1 y p2 = 2 de L2: • L1 = {1, 2, 3, 5, 7, 8} • L2 = {p3 = 1, p4 = 3, p5 = 3, p6 = 5} La siguiente arista a agregar es (2, 1) donde w3 = 2 y p3 = 1. Véase la Figura 6.13.c. Al remover w3 y p3 de L1 y L2 respectivamente se tiene: • L1 = {1, 3, 5, 7, 8} • L2 = {p4 = 3, p5 = 3, p6 = 5} Es claro que ahora w4 = 1, por lo que se tiene que la arista (1, 3) es agregada al árbol actual (Figura 6.13.d).

L1 y L2 son debidamente actualizados: • L1 = {3, 5, 7, 8} • L2 = {p5 = 3, p6 = 5} Se busca al entero w5 más pequeño en L1 pero que no esté en L2: 7. Se agrega la arista (w5, p5) = (7, 3). Véase la Figura 6.13.e. Ahora L1 = {3, 5, 8} y L2 = {p5 = 5}. Claramente la siguiente arista a agregar es (3, 5), donde w6 = 3 y p6 = 5 (Figura 6.13.f). Finalmente se tiene que L1 = {5, 8} y L2 =∅. Por lo que sólo basta agregar la arista (5, 8) y con ello se tiene el árbol etiquetado final presentado en la Figura 6.13.g. En el caso de nuestro árbol etiquetado con código de Prüfer [1, 2, 1, 3, 3, 5] se tiene que los enteros 4, 6, 7 y 8 son aquellos que precisamente no están presentes en el código. De acuerdo a la representación visual del árbol, Figura 6.13.g, se comprueba que los vértices con tales etiquetas corresponden a nodos hoja. 213

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

4

1

a)

6

2

4

1

b) 6

2

6

2

4

1

4

1

c)

3

d) 6

2

7

4

1

3

6

2

7

4

1

3

e)

5

f) 6

2

7

4

1

3

8

5

g) Figura 6.13. Proceso de construcción de un Árbol Etiquetado de 8 vértices y Código de Prüfer [1, 2, 1, 3, 3, 5] (Véase el texto para detalles)

214

Capítulo 6. Generación Automática de Grafos

El Algoritmo 6.6 genera de manera aleatoria un código de Prüfer y a partir de éste construye su árbol etiquetado correspondiente. Se espera como único parámetro de entrada el número n de vértices en el árbol a generar. La salida del Algoritmo 6.6 es un conjunto formado por 3 elementos: • El conjunto de vértices del árbol, V(T). • El conjunto de aristas E(T). • El Código de Prüfer [p1, p2, …, pn-2] correspondiente al árbol generado se guarda en el arreglo prufercode de manera que prufercode[i] = pi, i = 1, 2, …, n-2. Algoritmo 6.6. Generación Automática de Árboles Etiquetados y Códigos de Prüfer.

Procedure randomLabeledTree(Integer n) Array prufercode[1, …, n-2] Array L2[1, …, n-2] Array L1[1, …, n] Integer u, v, i = 0, j = 0, k = 1, w = 0 Integer position = 0, selected = 0, currentEdge = 1 Boolean exists

// Si n es menor o igual 2 entonces no puede generarse un árbol mediante // un Código de Prüfer. if n ≤ 2 then return NULL end-of-if

// Se inicializa el árbol con n vértices y 0 aristas. V(T) = {1, 2, …, n} E(T) = ∅ // Se seleccionan de manera aleatoria n-2 enteros en {1, 2, 3, ..., n} // para generar el Código de Prüfer. for i = 1 until n – 2 do L2[i] = ¬«1 + getNextReal( ) * n ¼» prufercode[i] = L2[i] end-of-for

// Se inicializa el arreglo L1 de manera que L1[i] = i, i = 1, ..., n. for i = 1 until n do L1[i] = i end-of-for

215

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

// Se procede a la construcción del árbol T mediante el código de Prüfer // guardado en el arreglo L2. while selected < n - 2 do // Se busca al número w más pequeño en L1 que no esté en L2. w= ∞ for i = 1 until n do if (L1[i] ≠ -1) ∧ (L1[i] < w) then // Se tiene que el entero en L1[i] es más pequeño // que el w actual. // Se verifica si L1[i] no existe en L2. exists = false for j = 1 until n – 2 do if L2[j] = L1[i] then // L1[i] está en L2[i] por lo tanto se detiene // la búsqueda y se hace exists = true // para indicar su existencia. exists = true break end-of-if end-of-for if exists = false then // L1[i] es más pequeño que el w actual y no // está en L2. // Se actualiza la variable w y se guarda su posición i. w = L1[i] position = i end-of-if end-of-if end-of-for // Se tiene identificado al w más pequeño en L1 que no está en L2. // w es "removido" de L1. L1[position] = -1 // Se agrega la arista (w, L2[k]) E(G) = E(G) ∪ {(w, L2[k])} // L2[k] es "removido". L2[k] = -1 // Se incrementa el contador k para apuntar al siguiente elemento de L2. k=k+1 // Se incrementa el contador de aristas. currentEdge = currentEdge + 1 // Se incrementa el contador de aristas agregadas al árbol. selected = selected + 1 end-of-while

216

Capítulo 6. Generación Automática de Grafos

// L1 tiene exactamente dos enteros u y v diferentes de -1. // Tales enteros forman la última arista a agregar en el árbol. // Se busca el primer entero y se guarda en u. for i = 1 until n do if L1[i] ≠ -1 then u = L1[i] L1[i] = -1 break end-of-if end-of-for // Se busca el segundo entero y se guarda en v. for i = 1 until n do if L1[i] ≠ -1 then v = L1[i] break end-of-if end-of-for // Se agrega la arista final (u, v). // El árbol tendrá todas sus aristas especificadas. E(G) = E(G) ∪ {(u, v)} return {V(G), E(G), prufercode} end-of-procedure

6.8 Generación de Grafos Hamiltonianos Aleatorios Recordemos que un circuito Hamiltoniano en un grafo G es un circuito que visita a cada vértice de G exactamente una sola vez. Si G admite un circuito Hamiltoniano entonces G es llamado grafo Hamiltoniano. En la Figura 6.14 se presenta un ejemplo de un grafo Hamiltoniano.

Figura 6.14. Un Grafo Hamiltoniano de 6 vértices.

Es claro que sólo los grafos conectados pueden ser Hamiltonianos, en el sentido de que existe la posibilidad de que cuenten con un circuito Hamiltoniano. Sin embargo, no existe un criterio simple que indique si un grafo es o no Hamiltoniano.

217

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

El siguiente procedimiento genera un grafo Hamiltoniano aleatorio con un número dado de n vértices y m aristas. El grafo puede ser dirigido o no dirigido. El método genera inicialmente una permutación aleatoria de n elementos (perm[1], perm[2], …, perm[n]). Cada uno de los elementos perm[i], i = 1, 2, …, n, hará el papel de vértice. El grafo es entonces descrito en principio por el circuito Hamiltoniano (perm[1], perm[2], ..., perm[n-1], perm[n], perm[1]) Posteriormente se agregan de manera aleatoria aristas en el grafo hasta que el número requerido m de éstas es alcanzado. Se deben tomar algunas consideraciones respecto a qué grafos pueden ser construidos: • El número m de aristas debe ser al menos n, es decir, m ≥ n. • El número m de aristas debe ser a lo más n(n-1)/2 para grafos no dirigidos y n(n-1) para grafos dirigidos. Supóngase, por ejemplo, que se desea construir un grafo Hamiltoniano no dirigido de n = 10 vértices y m = 20 aristas. Es claro que m satisface

n(n − 1) = 45 ≥ m = 20 ≥ n = 10 2 Asumamos que se cuenta con la siguiente permutación aleatoria de los elementos en el conjunto {1, 2, …, 9, 10}: • perm[1] = 9 • perm[2] = 10 • perm[3] = 7 • perm[4] = 5 • perm[5] = 8 • perm[6] = 3 • perm[7] = 1 • perm[8] = 2 • perm[9] = 6 • perm[10] = 4 Tal como mencionamos con anterioridad el grafo contará con el siguiente circuito Hamiltoniano: (9, 10, 7, 5, 8, 3, 1, 2, 6, 4, 9) Supongamos que el grafo es representado mediante una matriz de adyacencias. Al agregar las 10 aristas requeridas para tal circuito (Figura 6.15) se tiene que la matriz de adyacencias adj del grafo tiene el estado presentado en la Tabla 6.13.

218

Capítulo 6. Generación Automática de Grafos

1

2

3

4

5

6

7

8

10

9

Figura 6.15. Las 10 aristas iniciales que conforman un Circuito Hamiltoniano para un grafo de 10 vértices y 20 aristas (Véase el texto para detalles).

Tabla 6.13. Representación matricial del grafo Hamiltoniano en su fase inicial de construcción de acuerdo a la Figura 6.15 (Véase el texto para detalles). adj 1 2 3 4 5 6 7 8 9 10 1 0 1 1 0 0 0 0 0 0 0 2 1 0 0 0 0 1 0 0 0 0 3 1 0 0 0 0 0 0 1 0 0 4 0 0 0 0 0 1 0 0 1 0 5 0 0 0 0 0 0 1 1 0 0 6 0 1 0 1 0 0 0 0 0 0 7 0 0 0 0 1 0 0 0 0 1 8 0 0 1 0 1 0 0 0 0 0 9 0 0 0 1 0 0 0 0 0 1 10 0 0 0 0 0 0 1 0 1 0

Aún faltan por incorporar 10 aristas al grafo. Estas serán agregadas al generar aleatoriamente sus vértices inicial y final, nodea y nodeb respectivamente, de acuerdo a las siguientes reglas:

nodea = getNextInteger(n) + 1 nodeb = getNextInteger(n) + 1 Se asume que getNextInteger(n) proporciona un entero aleatorio en el conjunto {0, 1, …, n-1}. En el caso de que nodea = nodeb o bien si la arista (nodea, nodeb) ya existe, entonces los valores deben ser calculados nuevamente. Supóngase que se tienen las aristas generadas presentadas en la Tabla 6.14.

219

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Tabla 6.14. El conjunto de 10 aristas candidatas a ser agregadas al grafo Hamiltoniano de la Figura 6.15 (Véase el texto para detalles). getNextInteger(n) nodea getNextInteger(n) nodeb Arista 0 1 9 10 (1, 10) 3 4 2 3 (3, 4) 8 9 1 2 (2, 9) 7 8 3 4 (4, 8) 2 3 6 7 (3, 7} 9 10 4 5 (5, 10) 5 6 2 3 (3, 6) 1 2 4 5 (2, 5) 1 2 2 3 (2, 3) 0 1 3 4 (1, 4)

Finalmente nuestro grafo Hamiltoniano no dirigido generado queda tal como se presenta en la Figura 6.16. 1

2

3

4

5

6

7

8

10

9

Figura 6.16. Un Grafo Hamiltoniano no dirigido conformado por 10 vértices y 20 aristas.

Como establecimos con anterioridad, nuestro método también permite la generación de grafos Hamiltonianos dirigidos. Sólo debe tenerse en cuenta que las aristas son de hecho aristas dirigidas. Por ejemplo, se desea un grafo Hamiltoniano dirigido con n = 6 vértices, m = 10 aristas y bajo representación matricial. Vemos en primer lugar que efectivamente se satisface la relación entre el número de vértices y el número de aristas del grafo: n(n − 1) = 30 ≥ m = 10 ≥ n = 6 Se tiene la siguiente permutación aleatoria de los elementos del conjunto {1, 2, 3, 4, 5, 6}: • perm[1] = 6 • perm[2] = 3 • perm[3] = 1 • perm[4] = 4 • perm[5] = 5 • perm[2] = 2

220

Capítulo 6. Generación Automática de Grafos

Por lo que grafo tendrá el siguiente circuito Hamiltoniano (Figura 6.17): (6, 3, 1, 4, 5, 2, 6) La matriz de adyacencia asociada se presenta en la Tabla 6.15.

1

2

6

3

5

4

Figura 6.17. Las 6 aristas iniciales que conforman un Circuito Hamiltoniano para un grafo dirigido de 6 vértices y 10 aristas (Véase el texto para detalles). Tabla 6.15. Representación matricial del grafo dirigido Hamiltoniano en su fase inicial de construcción de acuerdo a la Figura 6.17 (Véase el texto para detalles). adj 1 2 3 4 5 6 1 0 0 0 1 0 0 2 0 0 0 0 0 1 3 1 0 0 0 0 0 4 0 0 0 0 1 0 5 0 1 0 0 0 0 6 0 0 1 0 0 0

Las cuatro aristas que complementan al grafo se generan aleatoriamente respetando el orden en que los vértices fueron generados ya que las aristas son dirigidas. Véase la Tabla 6.16. Tabla 6.16. El conjunto de 4 aristas candidatas a ser agregadas al grafo dirigido Hamiltoniano de la Figura 6.17 (Véase el texto para detalles). getNextInteger(n) nodea getNextInteger(n) nodeb Arista 3 4 5 6 (4, 6) 3 4 2 3 (4, 3) 5 6 1 2 (6, 2) 3 4 0 1 (4, 1)

Con lo que se tiene el grafo Hamiltoniano dirigido final de la Figura 6.18.

221

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

1

2

6

3

5

4

Figura 6.18. Un Grafo Dirigido Hamiltoniano conformado por 6 vértices y 10 aristas. El siguiente procedimiento, Algoritmo 6.7, permite la generación de grafos Hamiltonianos aleatorios. El algoritmo recibe 3 entradas: • n: Número de vértices. • m: Número de aristas. • directed: Un valor Booleano. o true si el grafo a obtener es dirigido. o false si el grafo a obtener es no dirigido. La salida del Algoritmo 6.7 estará constituida de la siguiente manera: • Si el grafo no pudo ser construido entonces se obtiene una salida NULL la cual implica que una de las siguientes dos situaciones se presentó: o El número de aristas es menor al de vértices. o El número de aristas excede al máximo permitido. • Si el grafo fue exitosamente construido entonces se obtiene como salida un conjunto formado por V(G) y E(G). Algoritmo 6.7. Generación Automática de Grafos Hamiltonianos Aleatorios.

Procedure randomHamiltonGraph(Integer n, Integer m, Boolean directed) Integer k, maxedges, nodea, nodeb, numedges, temp Array permute[1, …, n]

// Se inicializa el grafo con n vértices y 0 aristas. V(G) = {1, 2, …, n} E(G) = ∅ // Se determina si los parámetros de entrada son válidos. if m < n then // El número de aristas es menor al de vértices. // El grafo no se puede construir. return NULL end-of-if

222

Capítulo 6. Generación Automática de Grafos

maxedges = n * (n - 1) if directed = false then maxedges = maxedges / 2 end-of-if

if m > maxedges then // Si el grafo que se desea es no dirigido pero el número de aristas // es mayor a n(n-1)/2 entonces éste no puede ser construido. // Si el grafo que se desea es dirigido pero el número de aristas // es mayor a n(n-1) entonces éste tampoco puede ser construido. return NULL end-of-if

numedges = 0

// Se genera una permutación aleatoria de los elementos en el // conjunto {1, 2, 3, ..., n} randomPermutation(n, permute)

// Se construye el circuito Hamiltoniano inicial. for k = 1 until n do if k = n then nodea = permute[n] nodeb = permute[1] else nodea = permute[k] nodeb = permute[k + 1] end-of-else numedges = numedges + 1 // Se agrega la arista (nodea, nodeb). E(G) = E(G) ∪ {(nodea, nodeb)} if directed = false then // Si el grafo es no dirigido entonces se debe sobreentender // que la arista recien agregada (nodea, nodeb) es // bidireccional. end-of-if end-of-for

223

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

// Se agregan las aristas aleatorias restantes. while numedges < m do // Se generan los vértices inicial y final. // getNextInteger(n) retorna un entero aleatorio en {0, 1, 2, ..., n-1} nodea = getNextInteger(n) + 1 nodeb = getNextInteger(n) + 1 // Si los valores de nodea y nodeb son iguales entonces se cancela // la iteración actual del ciclo while y se inicia una nueva. if nodea = nodeb then continue end-of-if // Si el grafo es no dirigido y el valor de nodea es mayor al de nodeb, // entonces se efectúa un intercambio entre los valores de nodea y nodeb. if (nodea > nodeb) ∧ (directed = false) then temp = nodea nodea = nodeb nodeb = temp end-of-if if (nodea, nodeb) ∉ E(G) then // Si la arista (nodea, nodeb) no existe entonces se agrega al grafo. numedges = numedges + 1 E(G) = E(G) ∪ {(nodea, nodeb)} end-of-if end-of-while return {V(G), E(G)} end-of-procedure

6.9 Generación de Grafos Regulares Isomorfos Aleatorios Previamente, en el Capítulo 5, establecimos que un Isomorfismo entre dos grafos G y H es una biyección ƒ entre los conjuntos de vértices V(G) y V(H) de los grafos G y H respectivamente:

f : V (G ) → V ( H ) De manera que cualesquiera par de vértices u y v son adyacentes en G si y sólo si f(u) y f(v) son adyacentes en H. Si existe un Isomorfismo entre dos grafos sabemos que éstos son Isomorfos. Si se da el caso en que los grafos G y H son el mismo grafo, entonces se dice que se tiene un Automorfismo. Considérese el par de grafos G y H presentados en la Figura 6.19.

224

Capítulo 6. Generación Automática de Grafos

a 5

b

6

1

c

d

e

f

2 8

7

4

3 g

G

h

H Figura 6.19. Dos grafos simples, G y H, Isomorfos.

Considérese el siguiente mapeo biyectivo:

­a °b ° °c ° °d f ( n) = ® °e °f ° °g °h ¯

si si si si si si si si

n =1 n=2 n=3 n=4 n=5 n=6 n=7 n=8

Se verificará si los grafos G y H, de la Figura 6.19, son grafos Isomorfos. Para ello, se determinará en primer lugar si toda arista de G es efectivamente una arista de H utilizando la función f. A través de la Tabla 6.17 podemos verificar que efectivamente el punto planteado es cierto.

225

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Tabla 6.17. Verificando si toda arista del grafo G, de la Figura 6.19, puede ser mapeada a una arista válida en el grafo H mediante la función de mapeo f (Véase el texto para detalles). Arista (u, v) en G Arista (f(u), f(v)) ¿(f(u), f(v)) es arista de H? (1, 2) (f(1), f(2)) = (a, b) SI (1, 4) (f(1), f(4)) = (a, d) SI (1, 5) (f(1), f(5)) = (a, e) SI (2, 3) (f(2), f(3)) = (b, c) SI (2, 6) (f(2), f(6)) = (b, f) SI (3, 4) (f(3), f(4)) = (c, d) SI (3, 7) (f(3), f(7)) = (c, g) SI (4, 8) (f(4), f(8)) = (d, h) SI (5, 6) (f(5), f(6)) = (e, f) SI (5, 8) (f(5), f(8)) = (e, h) SI (6, 7) (f(6), f(7)) = (f, g) SI (7, 8) (f(7), f(8)) = (g, h) SI

f

-1

Dado que la función f fue definida como biyectiva entonces existe la función inversa tal que f o f -1 y f -1 o f son funciones identidad. De hecho, f -1 está dada por:

­1 °2 ° °3 ° °4 −1 f ( n) = ® °5 °6 ° °7 °8 ¯

iff iff iff iff iff iff iff iff

n=a n=b n=c n=d n=e n= f n=g n=h

Ahora se verificará si toda arista de H es efectivamente una arista de G utilizando a la función f -1. De acuerdo a los resultados presentados en la Tabla 6.18 tenemos que la respuesta a nuestro cuestionamiento es afirmativa. Tabla 6.18. Verificando si toda arista del grafo H, de la Figura 6.19, puede ser mapeada a una arista válida en el grafo G mediante la inversa de la función de mapeo f (Véase el texto para detalles). Arista (u, v) en H Arista (f -1(u), f -1(v)) ¿(f -1(u), f -1(v)} es arista de G? (a, b) (f -1(a), f -1(b)) = (1, 2) SI (a, d) (f -1(a), f -1(d)) = (1, 4) SI (a, e) (f -1(a), f -1(e)) = (1, 5) SI (b, c) (f -1(b), f -1(c)) = (2, 3) SI (b, f) (f -1(b), f -1(f)) = (2, 6) SI (c, d) (f -1(c), f -1(d)) = (3, 4) SI (c, g) (f -1(c), f -1(g)) = (3, 7) SI (d, h) (f -1(d), f -1(h)) = (4, 8) SI (e, f) (f -1(e), f -1(f)) = (5, 6) SI (e, h) (f -1(e), f -1(h)) = (5, 8) SI (f, g) (f -1(f), f -1(g)) = (6, 7) SI (g, h) (f -1(g), f -1(h)) = (7, 8) SI

226

Capítulo 6. Generación Automática de Grafos

Por lo tanto, para los grafos dados, de la Figura 6.19, se ha demostrado que toda arista de G es una arista de H, y viceversa, mediante la biyección f. Por lo tanto, los grafos G y H son Isomorfos. Ahora se presentará un procedimiento para la generación de grafos Isomorfos. En particular, se considerará la generación de grafos regulares no dirigidos Isomorfos. El Algoritmo 6.8 requerirá se especifique el número n de vértices y su grado d. En primer lugar se genera un grafo regular aleatorio mediante el algoritmo randomRegularGraph (Algoritmo 6.4). Posteriormente se genera una permutación aleatoria del conjunto {1, 2, 3, …, n} que se guarda en un arreglo map. El segundo grafo se obtiene al renombrar a los vértices del primer grafo aleatorio utilizando la permutación aleatoria como función de mapeo. El vértice i en el primer grafo será renombrado como el vértice map[i] en el segundo grafo. Evidentemente los dos grafos generados son Isomorfos. Se reciben dos parámetros de entrada: • n: Número de vértices en los grafos. • degree: Grado de los vértices. La salida será un conjunto formado por los siguientes elementos: • Grafo 1: Su conjunto de vértices V(G) y aristas E(G). • Grafo 2: Su conjunto de vértices V(G2) y aristas E(G2). • Se tiene un arreglo de enteros map que representa el mapeo que permite la relación de Isomorfismo entre los grafos obtenidos. El vértice i del primer grafo es renombrado como el vértice map[i] en el segundo grafo, i = 1, 2, …, n. Algoritmo 6.8. Generación Automática de Grafos Isomorfos Regulares de Grado d.

Procedure randomIsomorphicRegularGraphs(Integer n, Integer degree) Array map[1, …, n]

// Se genera un grafo regular de grado degree con n vértices. // Se asume que los valores de n y degree son compatibles de manera que la // construcción del grafo es exitosa. {V(G), E(G), numedges} = randomRegularGraph(n, degree) // Se inicializa el segundo grafo con n vértices y 0 aristas. V(G2) = {1, 2, …, n} E(G2) = ∅ // Se genera una permutación aleatoria de los elementos // del conjunto {1, 2, ..., n} randomPermutation(n, map)

227

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

// Los vértices que conforman las aristas del primer grafo // son renombrados a fin de obtener el segundo grafo. for each (u, v) ∈ E(G) do // Los vertices de la arista (u, v) del primer grafo son renombrados // utilizando el mapeo generado con randomPermutation. E(G2) = E(G2) ∪ {(map[u], map[v])} end-of-for // El arreglo map contiene el mapeo que relaciona // a los grafos como isomorfos. return {V(G), E(G), V(G2), E(G2), map} end-of-procedure

228

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

7. Grafos: Algoritmos Básicos

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

230

Capítulo 7. Grafos: Algoritmos Básicos

7.1 Búsqueda por Profundidad Se presentará un algoritmo el cual examina de manera sistemática los vértices y aristas de un grafo G. El grafo G que se usará para ejemplificar el algoritmo de Búsqueda por Profundidad es presentado en la Figura 7.1 junto con sus listas de adyacencias. A

C

B

D

F

E

G

H

Vértice A B C D E F G H

Listas de adyacencias B, C, D A, E, F A, F A B, F, G B, C, E E, H G

Figura 7.1. Un grafo con su representación por listas de adyacencias.

Durante la ejecución del algoritmo, cada vértice X de G estará en uno de tres estados, referenciados como el estatus de X tal como sigue: • STATUS(X) = 1: El vértice X no ha sido procesado. • STATUS(X) = 2: El vértice X está en lista de espera. • STATUS(X) = 3: El vértice X ha sido procesado. La lista de espera para la Búsqueda por Profundidad será una pila (stack). La idea general detrás del algoritmo, iniciando por el vértice A, es como sigue: • Primero se procesa el vértice inicial A. • Entonces se procesa cada vértice X a lo largo de una ruta P que comienza en A; es decir, se procesa a un vecino de A, después a un vecino de un vecino de A y así sucesivamente. • Después de llegar a un punto muerto, es decir, a un vértice sin vecinos no procesados, se retrocede sobre la ruta P hasta que se continúa a lo largo de otra ruta P' y así sucesivamente. • El retroceso es controlado mediante una pila que contiene vértices es espera los cuales serán utilizados para definir posibles futuras rutas. El valor STATUS indica el estatus actual de cualquier vértice a fin de evitar el procesar a un vértice en más de una ocasión. En el Algoritmo 7.1 se presenta nuestra implementación de la Búsqueda por Profundidad. La pila es controlada a través de las bien conocidas funciones Push y Pop. También se mencionan las funciones IsEmpty e Initialize que determinan si una pila está vacía y que inicializan una pila vacía, respectivamente. El Algoritmo 7.1 sólo procesara aquellos vértices que están conectados al vértice inicial A, es decir, aquellos vértices a los que se puede llegar a partir de A. Por ejemplo, la Búsqueda por Profundidad aplicada al grafo de la Figura 7.2, iniciando desde el vértice 1, nunca procesará al vértice 3 debido a que no existe una ruta entre ellos.

231

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

1

2

4

3

5

Figura 7.2. Un grafo desconectado para el cual la Búsqueda por Profundad nunca descubre al vértice 3 por no existir una ruta que lo conecte con el vértice inicial 1. Algoritmo 7.1. Implementación de la Búsqueda por Profundidad.

Procedure DepthFirstSearch(graph G, vertex A)

Initialize(S)

// Se inicializa la pila vacía S.

for each vertex v ∈ V(G) do STATUS(v) = 1 end-of-for

STATUS(A) = 2 Push(S, A)

// Se introduce el vértice inicial A en la pila S.

while(IsEmpty(S) = False) do // Mientras la pila S no esté vacía. X = Pop(S) // Es extraído un vértice de la pila S. STATUS(X) = 3 // Se etiqueta al vértice X como procesado. N(X) = getNeighborhood(X) // Se calcula la vecindad del vértice N. for each vertex J ∈ N(X) do if (STATUS(J) = 1) then // Se ha descubierto un vértice no procesado. STATUS(J) = 2 Push(S, J) // El vértice J se introduce a la pila S. end-of-if // Si STATUS(J) = 2 o 3 entonces el vértice solo es ignorado debido // a que ya fue previamente descubierto o visitado. end-of-for end-of-while end-of-procedure

Considérese que al grafo presentado en la Figura 7.1 se le aplica una Búsqueda por Profundidad iniciando por el vértice A. Los vértices serán procesados por el algoritmo en el siguiente orden: A, D, C, F, E, G, H, B Específicamente, en la Tabla 7.2 se muestra la secuencia de listas de espera en la pila y en la Tabla 7.1 el procesamiento de los vértices junto con sus estados en cada iteración, denotada por T. Cada vértice, excluyendo al inicial A, es obtenido de una vecindad y por lo tanto tal vértice y el vértice propietario de la vecindad definen una arista en el grafo. Estas aristas forman un árbol de G el cuál es presentado en la Figura 7.24 (los números indican el orden en que las aristas fueron agregadas al árbol).

232

Capítulo 7. Grafos: Algoritmos Básicos

Tabla 7.1. Procesamiento de los vértices del grafo de la Figura 7.1 en cada iteración T de la Búsqueda por Profundidad. El vértice inicial es A.

Vértice A B C D E F G H

T=0 2 1 1 1 1 1 1 1

T=1 3 2 2 2 1 1 1 1

T=2 3 2 2 3 1 1 1 1

Estatus T=4 3 2 3 3 2 3 1 1

T=3 3 2 3 3 1 2 1 1

T=5 3 2 3 3 3 3 2 1

T=6 3 2 3 3 3 3 3 2

T=7 3 2 3 3 3 3 3 3

T=8 3 3 3 3 3 3 3 3

Tabla 7.2. Estado de la lista de espera (pila) en cada iteración T de la Búsqueda por Profundidad aplicada sobre el grafo de la Figura 7.1. El vértice inicial es A.

T

Vértice Procesado

0 1 2 3 4 5 6 7 8

A D C F E G H B

Pila ( TOP Æ) A D, C, B C, B F, B E, B G, B H, B B

A 2

1

7

C

B

F

E

D

3 5

G

4 6 H Figura 7.3. Árbol generado por la Búsqueda por Profundidad aplicada sobre el grafo de la Figura 7.1 con el vértice inicial A (los números indican el orden en que las aristas fueron agregadas al árbol).

233

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Ahora se aplicará al mismo grafo de la Figura 7.1 una Búsqueda por Profundidad pero iniciando por el vértice F. Los vértices serán procesados por el algoritmo en el siguiente orden:

F, E, G, H, B, A, D, C

En las Tablas 7.3 y 7.4 se muestran los correspondientes procesamientos de los vértices y el estado de la pila durante cada iteración del algoritmo, respectivamente. Nótese que el árbol obtenido, y presentado en la Figura 7.4, es diferente al de la Figura 7.3. El primer árbol proporciona información respecto a qué vértices son alcanzables desde el vértice A, mientras que el segundo muestra los vértices alcanzables desde F. En ambos casos todos los vértices del grafo son alcanzables desde A o F ya que el grafo original es conectado. Tabla 7.3. Procesamiento de los vértices del grafo de la Figura 7.1 en cada iteración T de la Búsqueda por Profundidad. El vértice inicial es F.

Vértice A B C D E F G H

T=0 1 1 1 1 1 2 1 1

T=1 1 2 2 1 2 3 1 1

T=2 1 2 2 1 3 3 2 1

T=3 1 2 2 1 3 3 3 2

Status T=4 1 2 2 1 3 3 3 3

T=5 2 3 2 1 3 3 3 3

T=6 3 3 2 2 3 3 3 3

T=7 3 3 2 3 3 3 3 3

T=8 3 3 3 3 3 3 3 3

Tabla 7.4. Estado de la lista de espera (pila) en cada iteración T de la Búsqueda por Profundidad aplicada sobre el grafo de la Figura 7.1. El vértice inicial es F.

234

T

Vértice Procesado

0 1 2 3 4 5 6 7 8

F E G H B A D C

Pila ( TOP Æ) F E, B, C G, B, C H, B, C B, C A, C D, C C

Capítulo 7. Grafos: Algoritmos Básicos

A 6

5 C

B

D

4

7 F

E 1

2

G

3 H Figura 7.4. Árbol generado por la Búsqueda por Profundidad aplicada sobre el grafo de la Figura 7.1 con el vértice inicial F (los números indican el orden en que las aristas fueron agregadas al árbol).

7.2 Búsqueda por Amplitud La idea general detrás de la Búsqueda por Amplitud está dada de la siguiente manera: • Primero se procesa el vértice inicial A. • Se procesan primero todos los vecinos de A, es decir, a aquellos vértices en N(A). Al momento de procesar a un vértice en N(A) se descubrirán nuevos vértices. Estos nuevos vértices son vecinos de los vecinos del vértice A y se agregan al final de la lista de espera. • Se procesan ahora a todos los vecinos de los vecinos de A (aquellos vértices descubiertos en el punto anterior). Al procesar a cada uno de estos vértices es claro que se descubrirán otros nuevos, pero serán agregados al final de la lista de espera. Y así sucesivamente. Naturalmente, se requiere mantener el seguimiento de los vecinos de un vértice, y se deberá garantizar que ningún vecino sea procesado en dos ocasiones. Estos requerimientos se completan al considerar el uso de una cola (queue) para mantener a los vértices en espera de ser procesados y también al considerar un estatus (1, 2, o 3) que indica el estado actual de un vértice. Nótese que, a diferencia de la Búsqueda por Profundidad, los vértices serán procesados estrictamente en el orden en que son descubiertos.

La implementación para la Búsqueda por Amplitud se presenta en el Algoritmo 7.2. Obsérvese que de hecho el algoritmo presentado es el mismo que el Algoritmo 7.1 (Búsqueda por Profundidad), excepto que se consideran ahora las instrucciones para la manipulación de una cola: Enqueue, Dequeue, Initialize, IsEmpty. Enqueue y Dequeue insertan y extraen un elemento de la cola, respectivamente. Initialize inicializa una cola vacía e IsEmpty verifica si una cola está o no vacía.

235

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Algoritmo 7.2. Implementación de la Búsqueda por Amplitud.

Procedure BreadthFirstSearch(graph G, vertex A)

Initialize(Q)

//Se inicializa la cola vacía Q.

for each vertex v ∈ V(G) do STATUS(v) = 1 end-of-for

STATUS(A) = 2 Enqueue(Q, A)

//Se introduce el vértice inicial A en la cola Q.

while(IsEmpty(Q) = False) do //Mientras la cola Q no esté vacía. X = Dequeue(Q) //Es extraído un vértice de la cola Q. STATUS(X) = 3 //Se etiqueta al vértice X como procesado. N(X) = getNeighborhood(X) //Se calcula la vecindad del vértice N. for each vertex J ∈ N(X) do if (STATUS(J) = 1) then //Se ha descubierto un vértice no procesado. STATUS(J) = 2 Enqueue(S, J) //El vértice J se introduce a la cola Q. end-of-if // Si STATUS(J) = 2 o 3 entonces el vértice solo es ignorado debido // a que ya fue previamente descubierto o visitado. end-of-for end-of-while end-of-procedure

Tal como en la Búsqueda por Profundidad, el Algoritmo 7.2 sólo procesara aquellos vértices que están conectados al vértice inicial A, es decir, aquellos vértices para los cuales existe una ruta que permita llegar al vértice A. Considérese que al grafo, usado en la ejemplificación de la Búsqueda por Profundidad, y presentado en la Figura 7.1, se le aplica una Búsqueda por Amplitud iniciando por el vértice A. Los vértices serán procesados en el siguiente orden:

A, B, C, D, E, F, G, H Específicamente, en la Tabla 7.6 se muestra, para cada iteración T del algoritmo, el estado de la lista de espera y, en la Tabla 7.5, el procesamiento de los vértices junto con la evolución de sus estados. Cada vértice procesado X es obtenido de una vecindad N(J), y por lo tanto ambos forman una arista (X, J) presente en el grafo de entrada. Estas aristas forman un árbol de G el cuál es presentado en la Figura 7.5. En general, los árboles obtenidos mediante Búsqueda por Amplitud son distintos a los obtenidos mediante Búsqueda por Profundidad.

236

Capítulo 7. Grafos: Algoritmos Básicos

Tabla 7.5. Procesamiento de los vértices del grafo de la Figura 7.1 en cada iteración T de la Búsqueda por Amplitud. El vértice inicial es A.

Vértice A B C D E F G H

T=0 2 1 1 1 1 1 1 1

T=1 3 2 2 2 1 1 1 1

T=2 3 3 2 2 2 2 1 1

Estatus T=4 3 3 3 3 2 2 1 1

T=3 3 3 3 2 2 2 1 1

T=5 3 3 3 3 3 2 2 1

T=6 3 3 3 3 3 3 2 1

T=7 3 3 3 3 3 3 3 2

T=8 3 3 3 3 3 3 3 3

Tabla 7.6. Estado de la lista de espera (cola) en cada iteración T de la Búsqueda por Amplitud aplicada sobre el grafo de la Figura 7.1. El vértice inicial es A.

T

Vértice Procesado

0 1 2 3 4 5 6 7 8

A B C D E F G H

Cola ( Tail Æ Head ) A D, C, B F, E, D, C F, E, D F, E G, F G H

A 2 C

B 5

F

3

1

D 4

E

6

G

7 H Figura 7.5. Árbol generado por la Búsqueda por Amplitud aplicada sobre el grafo de la Figura 7.1 con el vértice inicial A (los números indican el orden en que las aristas fueron agregadas al árbol).

Ahora se aplicará al mismo grafo, de la Figura 7.1, una Búsqueda por Amplitud iniciando por el vértice F. Los vértices serán procesados en el siguiente orden:

F, B, C, E, A, G, D, H

237

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

En las Tablas 7.7 y 7.8 se muestran los correspondientes procesamientos de los vértices y el estado de la cola durante cada iteración del algoritmo, respectivamente. En la Figura 7.6 se muestra el correspondiente árbol de Búsqueda por Amplitud. Tabla 7.7. Procesamiento de los vértices del grafo de la Figura 7.1 en cada iteración T de la Búsqueda por Amplitud. El vértice inicial es F.

Vértice A B C D E F G H

T=0 1 1 1 1 1 2 1 1

T=1 1 2 2 1 2 3 1 1

T=2 2 3 2 1 2 3 1 1

Estatus T=4 2 3 3 1 3 3 2 1

T=3 2 3 3 1 2 3 1 1

T=5 3 3 3 2 3 3 2 1

T=6 3 3 3 2 3 3 3 2

T=7 3 3 3 3 3 3 3 2

Tabla 7.8. Estado de la lista de espera (cola) en cada iteración T de la Búsqueda por Amplitud aplicada sobre el grafo de la Figura 7.1. El vértice inicial es F.

T

Vértice Procesado

0 1 2 3 4 5 6 7 8

F B C E A G D H

Cola ( Tail Æ Head ) F E, C, B A, E, C A, E G, A D, G H, D H

A 4 C 2 F

6

B

D

1 3

E

5

G

7 H Figura 7.6. Árbol generado por la Búsqueda por Amplitud aplicada sobre el grafo de la Figura 7.1 con el vértice inicial F (los números indican el orden en que las aristas fueron agregadas al árbol).

238

T=8 3 3 3 3 3 3 3 3

Capítulo 7. Grafos: Algoritmos Básicos

7.3 Árboles de Expansión Mínimos Recordemos que un subgrafo T de un grafo conectado G es llamado un Arbol de Expansión de G si T es un árbol y además T incluye a todos los vértices de G, es decir, V(T) = V(G). En la Figura 7.7 se presenta un grafo G y tres posibles árboles de expansión T1, T2 y T3 de G. Nótese que las Búsquedas por Profundidad y Amplitud, cuando reciben como entrada un grafo conectado, forman un árbol de expansión de tal grafo de entrada.

G

T1

T2

T3

Figura 7.7. Tres árboles de expansión para el grafo G.

Ahora supóngase que G es un grafo conectado pesado. Es decir, cada arista de G tiene asignado un número no negativo: el peso de la arista. Entonces a cualquier árbol de expansión T de G le es asignado un peso total obtenido al sumar los pesos de las aristas en T. Un Árbol de Expansión Mínimo (Minimum Spanning Tree) de G es un árbol de expansión cuyo peso total es tan pequeño como sea posible. Se presentarán dos soluciones algorítmicas. Para todo grafo conectado G de n vértices es claro que todo árbol de expansión de G tendrá exactamente n-1 aristas. El primer método procederá de la siguiente manera: 1. Hacer T = G. 2. Ordenar las aristas de G en orden decreciente respecto a su peso. 3. Se procede secuencialmente, respetando el ordenamiento previo, examinando cada arista. La arista actual e se borrará de T siempre y cuando T \ e no sea un grafo desconectado. Se termina el proceso cuando T cuenta con exactamente n-1 aristas. 4. T es el árbol de expansión mínimo y se retorna como salida. La otra solución que consideraremos es conocida como el Algoritmo de Kruskal. Se procede de la siguiente manera: 1. Se inicializa a T como un bosque formado únicamente por los vértices de G. 2. Ordenar las aristas de G en orden ascendente respecto a su peso. 3. Se procede secuencialmente, respetando el ordenamiento previo, examinando a cada arista. La arista actual e se agregará a T siempre y cuando T ∪ {e} (el grafo que se obtiene al agregar la arista e a T) sea libre de circuitos. Se termina el proceso cuando T cuenta con exactamente n-1 aristas. 4. T es el árbol de expansión mínimo y se retorna como salida.

239

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

El peso de un árbol de expansión mínimo es único, pero el árbol de expansión mínimo no necesariamente lo es. Se pueden obtener diferentes árboles de expansión mínimos cuando dos o más aristas tienen el mismo peso. En tal caso, el ordenamiento de las aristas en el paso 2 de los dos procedimientos descritos no es único y por lo tanto puede resultar en árboles de expansión mínimos distintos.

A

B

8

7

3

7

C

D

5

4 6

4

7

E

F

Figura 7.8. Un grafo G para el cual se determinará su árbol de expansión mínimo.

• •

Consideremos el grafo G presentado en la Figura 7.8. Para este grafo se tiene que: V(G) = {A, B, C, D, E ,F} E(G) = {(B,C), (A,F), (A,C), (B,E), (C,E), (B,F), (A,E), (D,F), (B,D)} w(B,C) = 8 w(A,F) = 7 w(A,C) = 7 w(B,E) = 7 w(C,E) = 6 w(B,F) = 5 w(A,E) = 4 w(D,F) = 4 w(B,D) = 3

Se aplicará el primer método a fin de encontrar un árbol de expansión mínimo. Primero se ordenan las aristas en orden decreciente respecto al peso y entonces, de manera sucesiva, se eliminan aquellas sin desconectar a G hasta que sólo se tengan cinco aristas: Aristas (B,C) Peso 8 ¿Eliminar? Si

(A,F) 7 Si

(A,C) 7 Si

(B,E) 7 No

(C,E) 6 No

(B,F) 5 Si

(A,E) 4

(D,F) 4

(B,D) 3

Por lo tanto, el árbol de expansión mínimo de G es obtenido y se compone por las aristas (B,E), (C,E), (A,E), (D,F) y (B,D). El peso de tal árbol es igual a 24 y se muestra en la Figura 7.9.

A

B 3 7

C

D

4 4

6

E

F

Figura 7.9. Un árbol de expansión mínimo de peso 24 para el grafo de la Figura 7.8.

240

Capítulo 7. Grafos: Algoritmos Básicos

Ahora se aplicará el algoritmo de Kruskal sobre el mismo grafo G. En primer lugar se ordenan las aristas en orden creciente respecto al peso. Se consideran de manera sucesiva aristas que no formen circuitos hasta que se tengan cinco aristas agregadas. Aristas (B,D) Peso 3 ¿Agregar? Si

(A,E) 4 Si

(D,F) 4 Si

(B,F) 5 No

(C,E) 6 Si

(A,C) 7 No

(A,F) 7 Si

(B,E) 7

(B,C) 8

El peso de tal árbol es igual a 24 y se muestra en la Figura 7.10. Claramente el árbol obtenido es distinto al encontrado mediante el primer método. A

B 3

C

D

4 6

4

7

E

F

Figura 7.10. Un segundo árbol de expansión mínimo de peso 24 para el grafo de la Figura 7.8.

La implementación del primer método no presenta grandes retos en el sentido de que determinar si un grafo se desconecta al remover una de sus aristas es un problema que puede ser resuelto, en nuestro caso, mediante una Búsqueda por Profundidad o Amplitud. Recuérdese que si una vez finalizada alguna de estas búsquedas existen vértices con STATUS = 1 entonces el grafo de entrada G es de hecho desconectado. El Algoritmo 7.3 es una implementación concretizada del primer método para determinar un árbol de expansión mínimo. Dado que la Búsqueda por Profundidad y la Búsqueda por Amplitud sólo se diferencian por la estructura de datos auxiliar requerida (pila o cola), es que cualquiera de ellas puede ser usada. En el caso del Algoritmo de Kruskal, el decidir si al agregar una nueva arista en un grafo G se forman circuitos es un problema cuya solución no es inmediata. De hecho, se requiere el uso de una estructura de datos denominada Conjuntos Disjuntos (Disjoint Sets) la cual se presentará en la siguiente sección y posteriormente, en la Sección 7.3.2, se describirá la implementación del Algoritmo de Kruskal. Algoritmo 7.3. Determinación del Árbol de Expansión Mínimo en un Grafo Conectado Pesado.

Procedure MinimumSpanningTree(graph G, integer n, integer m, list EW(G))

T=G nT = m // Se ordenan las aristas de G de manera decreciente respecto a su peso. EWT(G) = Sort(EW(G))

241

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

for each edge (u, v) ∈ EWT(G) do if (nT = n – 1) then // T ya es un árbol de expansión mínimo. break end-of-if T = T \ (u, v) // Se obtiene el subgrafo de T con la arista (u, v) removida. STATUS[ ] = DepthFirstSearch(T) // Se cuentan los vértices no descubiertos por la Búsqueda por Profundidad. nonDiscovered = 0 for i = 1 until n do if (STATUS[i] = 1) then nonDiscovered = nonDiscovered + 1 end-of-if end-of-for if (nonDiscovered > 0) then // La arista (u, v) es un puente, se debe retornar a T. T = T ∪ {(u, v)} else nT = nT - 1 end-of-if end-of-for return T end-of-procedure

7.3.1 Conjuntos Disjuntos Por la Teoría presentada en el Capítulo 3 tenemos conocimiento de que una relación binaria R sobre un conjunto S es llamada Relación de Equivalencia si cumple con las siguientes tres propiedades: • Reflexividad: Para todo elemento a en S se tiene que a se relaciona con a: (∀a ∈ S )(a R a) •

Simetría: Para cualesquiera elementos a y b en S se tiene que si a se relaciona con b entonces b se relaciona con a: (∀a, b ∈ S )(a R b Ÿ b R a)



Transitividad: Para cualesquiera elementos a, b, c en S se tiene que si a se relaciona con b y b se relaciona con c entonces a se relaciona con c:

( ∀a, b, c ∈ S )( a R b ∧ b R c Ÿ a R c ) 242

Capítulo 7. Grafos: Algoritmos Básicos

Por ejemplo, sea el conjunto U = {x: x es estudiante de licenciatura}. Sea la relación: x R y ⇔ x estudia la misma licenciatura que y. Claramente la relación R es: • Reflexiva ya que ( ∀x ∈ U )( x R x ) •

Simétrica ya que ( ∀x, y ∈ U )( x R y Ÿ y R x )

• Transitiva ya que ( ∀x, y, z ∈ U )( x R y ∧ y R z Ÿ x R z ) ∴ La relación R es una relación de equivalencia sobre el conjunto U. Una relación de equivalencia R sobre un conjunto S induce una partición de S en conjuntos disjuntos (dos conjuntos son disjuntos si su intersección es vacía). En el caso del ejemplo anterior se tiene que R particionará, agrupará, o clasificará al conjunto de los estudiantes de acuerdo a la licenciatura que estudien (asumimos que no existen estudiantes cursando dos carreras al mismo tiempo). Tenemos pleno conocimiento de que cada conjunto en una partición inducida por la relación de equivalencia R es llamado una Clase de Equivalencia de R. En el ejemplo, podríamos tener cinco clases de equivalencia: • L1 = {x ∈ U: x es un estudiante de Ingeniería Genética} • L2 = {x ∈ U: x es un estudiante de Ingeniería en Sistemas Computacionales} • L3 = {x ∈ U: x es un estudiante de Ingeniería Civil} • L4 = {x ∈ U: x es un estudiante de Ingeniería en Electrónica} • L5 = {x ∈ U: x es un estudiante de Ingeniería en Mecatrónica} Evidentemente L1 ∪ L2 ∪ L3 ∪ L4 ∪ L5 = U y Li ∩ Lj = ∅ para i, j = 1, 2, 3, 4, 5, i ≠ j. Considérese la estructura de datos Conjunto Disjunto (Disjoint Set). Tal estructura soporta dos operaciones básicas: Union y Find. • Union(x, y) indica que la clase de equivalencia que contiene a x y la clase de equivalencia que contiene a y serán unidos en una sola clase. Nótese que en este caso, se asume que las clases originales surgen a partir de una relación de equivalencia, pero la unión de éstas ya no será una clase bajo tal relación. Se asume de hecho que el nuevo conjunto generado es una clase de equivalencia bajo una nueva relación. Si x y y están en el mismo conjunto desde un principio entonces no se efectúa operación alguna. • Find(x) debe retornar al representante de la clase de equivalencia que contiene a x. Considérese el conjunto de la Figura 7.11 el cual ésta inicialmente particionado en 8 clases de equivalencia con un elemento cada una.

0

1

2

3

4

5

6

7

Figura 7.11. Un conjunto de 8 elementos particionado en 8 clases de equivalencia.

243

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Después de aplicar la operación Union(4, 6) se tiene ahora una partición de 7 clases. Véase la Figura 7.12.

0

1

2

3

4

6

5

7

Figura 7.12. El conjunto de la Figura 7.11 una vez que se aplica la operación Union(4, 6).

Al aplicar Union(0, 1) y Union(2, 6) se obtiene la partición mostrada en la Figura 7.13.

0

1

3

2

4

6

5

7

Figura 7.13. El conjunto de la Figura 7.12 una vez que se aplicaron Union(0, 1) y Union(2, 6).

Una implementación simple de la estructura de datos Conjunto Disjunto tomará en cuenta las siguientes consideraciones: • Se asume que los elementos en el conjunto están enumerados de 1 a n. • Se mantiene un arreglo A: para cada elemento i se tiene que A[i] es el nombre del conjunto que contiene a i. • Find(i) retorna A[i]. • Union(i, j) requiere recorrer al arreglo A: for k = 1 until n if (A[k] = A[j]) then A[k] = A[i] end-of-if end-of-for

Ahora se considerará una implementación orientada a grafos, específicamente a árboles. Sea S una colección de árboles. Cada partición de S sólo tendrá un árbol. Inicialmente se tendrán n árboles cada uno conteniendo únicamente un vértice. Entonces: • Find(i) retorna la raíz del árbol que contiene a i. • Union(i, j) combina a los árboles que contienen a i y a j de manera que se debe obtener un nuevo árbol. • A cada vértice en un árbol se le asignará un padre. Los padres de los vértices son guardados en un arreglo parent de manera que parent[i] es el vértice padre del vértice i (si i es un vértice raíz entonces parent[i] = i). Inicialmente, dado que se tiene un bosque con n árboles y cada árbol con un solo vértice, se tendrá que parent[i] = i para i = 1, 2, …, n.

244

Capítulo 7. Grafos: Algoritmos Básicos

De acuerdo a lo anterior, Find sólo debe recorrer el árbol al que pertenece i comenzando desde tal vértice hasta alcanzar al nodo raíz. Véase el Algoritmo 7.4. En el caso de Union, en primer lugar se debe obtener la raíz del árbol al que pertenece i así como la raíz del árbol al que pertenece j. Si las raíces son distintas entonces i y j están en árboles diferentes. En consecuencia, los árboles se mezclan haciendo que la raíz de i sea ahora el padre de la raíz de j. Nótese que esta nueva asignación garantiza que el grafo obtenido siga siendo un árbol. Véase el Algoritmo 7.5. Algoritmo 7.4. Implementación de la función Find para la estructura Conjunto Disjunto.

Procedure Find(integer i) j=i while (parent[j] ≠ j) do j = parent[j] end-of-while return j end-of-procedure Algoritmo 7.5. Implementación de la función Union para la estructura Conjunto Disjunto.

Procedure Union(integer i, integer j) root1 = Find(i) root2 = Find(j) if (root1 ≠ root2) then parent[root2] = root1 end-of-if end-of-procedure

• • • • • • • • •

Considérese el siguiente ejemplo con n = 9. El arreglo parent se inicializa como: parent[1] = 1 parent[2] = 2 parent[3] = 3 parent[4] = 4 parent[5] = 5 parent[6] = 6 parent[7] = 7 parent[8] = 8 parent[9] = 9

Se tiene el bosque de la Figura 7.14. 1

2

3

4

5

6

7

8

9

Figura 7.14. Un bosque con n = 9 árboles degenerados.

Al efectuar Union(4, 6) se tiene la actualización parent[6] = 4 que corresponde al bosque de la Figura 7.15.

245

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

1

2

3

4

5

7

8

9

6 Figura 7.15. El bosque de la Figura 7.14 una vez que se aplicó Union(4, 6).

Al aplicar Union(1, 2) se tiene que parent[2] = 1. Véase la Figura 7.16. 1

3

4

2

5

7

8

9

6

Figura 7.16. El bosque de la Figura 7.15 una vez que se aplicó la operación Union(1, 2).

Ahora se aplicará Union(2, 6). De acuerdo al Algoritmo 7.5 se tiene que Find(2) = 1 y Find(6) = 4. Se hace parent[4] = 1 por lo se obtiene el bosque de la Figura 7.17. Recalcamos nuevamente que la manipulación de un conjunto de árboles mediante la estructura de datos Conjunto Disjunto garantiza que los grafos generados son libres de circuitos. 1

3

2

4

5

7

8

9

6 Figura 7.17. El bosque de la Figura 7.16 una vez que se aplicó la operación Union(2, 6).

Es claro que si se aplica sucesivamente la operación Union a un bosque se llegará a un punto en el cual se obtendrá únicamente un árbol. La estructura del árbol irá en función del orden y los argumentos de Union. Pero, es posible, en un momento dado, obtener un árbol con a lo más n niveles, que en realidad sería una lista ligada.

246

Capítulo 7. Grafos: Algoritmos Básicos

7.3.2 Conjuntos Disjuntos y el Algoritmo de Kruskal Como se habrá podido observar, el Algoritmo de Kruskal determina al árbol de expansión mínimo como la unión de los árboles de un bosque. El paso esencial consiste en seleccionar aquellas aristas tales que al integrarse al bosque actual no generen un circuito. El algoritmo inicia de hecho con un bosque en el que los árboles son únicamente vértices aislados. El bosque inicial puede verse como un conjunto mientras que cada vértice o raíz puede ser visto como el único miembro de una partición. Cada partición es de hecho un conjunto disjunto. El tipo de dato definido en la sección anterior permite, dada una arista (u, v) (de hecho la arista con el menor peso posible), que mediante la operación Find(u) y Find(v) se determine si tales vértices pertenecen o no al mismo árbol. En caso de que pertenezcan a diferentes árboles entonces será posible unirlos al aplicar la operación Union(u, v). Tal como se analizó anteriormente, estas operaciones garantizan la generación de grafos libres de circuitos. Se tiene entonces una especificación del Algoritmo de Kruskal mediante el uso de la estructura Conjunto Disjunto. Véase el Algoritmo 7.6. Algoritmo 7.6. Implementación del Algoritmo de Kruskal con uso de Conjuntos Disjuntos.

Procedure MinimumSpanningTreeKruskal(graph G, list EW(G)) T= ∅ // Se crea un bosque inicial en el que cada árbol solo tiene un vértice. for each vertex v ∈ V(G) do parent[v] = v end-of-for EWT(G) = Sort(EW(G)) for each edge (u, v) ∈ EWT(G) do if (Find(u) ≠ Find(v)) then // Si los vértices u y v están en diferentes árboles entonces // éstos son unidos y la arista (u,v) se agrega a T. T = T ∪ {(u, v)} Union(u, v) end-of-if end-of-for return T end-of-procedure

Considérese el grafo de la Figura 7.18. Sobre éste efectuaremos una corrida de escritorio del Algoritmo 7.6. 5

30

1

30

40

20

20

30

2

20

3

6 4 40 40 Figura 7.18. Un grafo pesado al que se le determinará su árbol de expansión mínimo.

247

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Para tal grafo se tendrá el bosque, arreglo parent y conjunto T iniciales presentados en la Figura 7.19.

1

2

3

4

5

6

• • • • • •

parent[1] = 1 parent[2] = 2 parent[3] = 3 T=∅ parent[4] = 4 parent[5] = 5 parent[6] = 6

a) b) c) Figura 7.19. Inicialización del algoritmo de Kruskal. a) Un bosque con 6 vértices, b) su correspondiente arreglo parent y c) el árbol de expansión mínimo T actual: el conjunto vacío.

Al ordenar de manera ascendente a las aristas respecto a su peso se tiene que los elementos de EWT(G) estarán listados de la siguiente manera: • • • • • • • • •

(1, 2), w(1, 2) = 20 (2, 4), w(2, 4) = 20 (3, 5), w(3, 5) = 20 (1, 5), w(1, 5) = 30 (1, 6), w(1, 6) = 30 (2, 6), w(2, 6) = 30 (1, 3), w(1, 3) = 40 (3, 6), w(3, 6) = 40 (4, 6), w(4, 6) = 40

Se procede secuencialmente a analizar cada arista del grafo (Véase la Tabla 7.9): •

Arista (1, 2): o Find(1) = 1 o Find(2) = 2 o Find(1) ≠ Find(2) por lo tanto se efectúa Union(1, 2), parent[2] = 1 y T = {(1, 2)}.



Arista (2, 4): o Find(2) = 1 o Find(4) = 4 o Find(2) ≠ Find(4) por lo tanto se efectúa Union(2, 4), parent[4] = 1 y T = {(1, 2), (2, 4)}.

248

Capítulo 7. Grafos: Algoritmos Básicos



Arista (3, 5): o Find(3) = 3 o Find(5) = 5 o Find(3) ≠ Find(5) por lo tanto se efectúa Union(3, 5), parent[5] = 3 y T = {(1, 2), (2, 4), (3, 5)}.



Arista (1, 5): o Find(1) = 1 o Find(5) = 3 o Find(1) ≠ Find(5) por lo tanto se efectúa Union(1, 5), parent[3] = 1 y T = {(1, 2), (2, 4), (3, 5), (1, 5)}.



Arista (1, 6): o Find(1) = 1 o Find(6) = 6 o Find(1) ≠ Find(6) por lo tanto se efectúa Union(1, 6), parent[6] = 1 y T = {(1, 2), (2, 4), (3, 5), (1, 5), (1, 6)}



Arista (2, 6): o Find(2) = 1 o Find(6) = 1 o Find(2) = Find(6), los vértices 2 y 6 están en el mismo árbol.



Arista (1, 3): o Find(1) = 1 o Find(3) = 1 o Find(1) = Find(3), los vértices 1 y 3 están en el mismo árbol.



Arista (3, 6): o Find(3) = 1 o Find(6) = 1 o Find(3) = Find(6), los vértices 3 y 6 están en el mismo árbol.



Arista (4, 6): o Find(4) = 1 o Find(6) = 1 o Find(4) = Find(6), los vértices 3 y 6 están en el mismo árbol.

249

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Tabla 7.9. Procesamiento de las aristas (1, 2), (2, 4), (3, 5), (1, 5) y (1, 6) del grafo de la Figura 7.18 por medio del Algoritmo de Kruskal. Arista Bosque Conjunto T 20 1 1

3

4

5

2

6

(1,2) 2

1

1 3

5

20

2

6

20

(2,4) 2

4

4

1

3

5

6

1

20

2

20

(3, 5) 2

5

4

1

20 3

3

4 30

5

6

1

20

2

20

(1, 5) 2

5

4

20 3

1

4 30

5

3

1

20

2

20

(1, 6)

20

30 6

2

5

4

3

6

4

El árbol de expansión mínimo con peso 120 ha sido encontrado (Véase la Figura 7.20). El conjunto T contiene las aristas de tal árbol: T = {(1, 2), (2, 4), (3, 5), (1, 5), (1, 6)}. 30

20

5

1

2

20

20 30 3

6

4

Figura 7.20. El árbol de expansión mínimo asociado al grafo de la Figura 7.18.

250

Capítulo 7. Grafos: Algoritmos Básicos

El último renglón de la Tabla 7.9 nos permite verificar que el árbol de expansión mínimo y el árbol descrito por el arreglo parent no son iguales. Por lo general así será para cualquier grafo G. Ello se debe a que la estructura de Conjunto Disjunto sólo es un auxiliar que nos permite decidir si una arista se agrega o no al conjunto T. Es decir, se tiene una equivalencia en el sentido de que un arista se agrega a T si y sólo si los dos vértices que la conforman están en árboles diferentes. Pero ello no se traduce necesariamente en que los árboles finales sean iguales. De hecho, nótese que en el árbol bajo conjuntos disjuntos se tienen aristas que no están en G, véase, por ejemplo, la arista (1, 4).

7.4 Determinación de Rutas Eulerianas Para cualquier grafo Euleriano G, el Algoritmo de Fleury siempre produce como salida un circuito Euleriano en G. El algoritmo se basa en la siguiente idea: 1. Seleccionar de manera arbitraria un vértice inicial v. 2. Iniciando en v, seleccionar arbitrariamente aristas consecutivas de G de acuerdo a las siguientes reglas: a) Después de seleccionar una arista e, la siguiente arista deber ser elegida del subgrafo conectado de G que se obtiene al eliminar e y a todas las aristas previamente seleccionadas y a todos los vértices aislados. A tal subgrafo se le llama subgrafo factible. b) En cada paso, seleccionar un puente del subgrafo factible únicamente si no existe otra arista a seleccionar. Aplicando los conceptos anteriores se buscará circuito Euleriano en el grafo de la Figura 7.21. Sea el vértice inicial v = A.

A

B

C

D

E

F

G

Figura 7.21. Un grafo Euleriano (todos sus vértices son de grado par) sobre el que se aplicará el Algoritmo de Fleury.

A continuación se mostrará, en las Tablas 7.10 a 7.13 el proceso de formación del circuito Euleriano usando el Algoritmo de Fleury. Cada tabla muestra la arista procesada, la ruta actualmente formada y el subgrafo factible. En la Tabla 7.13, último renglón, se tiene un subgrafo factible vacío, indicativo de que el circuito Euleriano ha sido finalmente encontrado.

251

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Arista Seleccionada

Tabla 7.10. Selección de las primeras 3 aristas para formar el circuito Euleriano del grafo presentado en la Figura 7.21. Ruta Actual Subgrafo factible

(A,B)

A

(A, B)

B

C

D

A

B

E

F

G

(A,B,C)

A

(B, C) Puente – Otra opción de selección no disponible

C

D

A

B

C

E

F

G

(A,B,C,D)

A

A

B

C

C

(C,D)

D

D E

252

F

G

Capítulo 7. Grafos: Algoritmos Básicos

Arista Seleccionada

Tabla 7.11. Parte 2 de la formación del circuito Euleriano del grafo presentado en la Figura 7.21. Ruta Actual Subgrafo factible

(A,B,C,D,E)

A

A

(D,E)

B

C

C

D

D

E

F

G

E

(A,B,C,D,E,A)

A

A

(E,A)

B

C

C

D

D

E

F

G

E

(A,B,C,D,E,A,C) A

C

D

(A,C)

A

B

C E

F

G

D

E

253

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Arista Seleccionada

Tabla 7.12. Parte 3 de la formación del circuito Euleriano del grafo presentado en la Figura 7.21. Ruta Actual Subgrafo factible

(A,B,C,D,E,A,C,G) A

(C,G) Puente – Otra opción de selección no disponible.

D

A

B

C

E

F

G

D

E

G

(A,B,C,D,E,A,C,G,E)

A A

B

C

D

(G,E)

D

E E

F

G

G

(A,B,C,D,E,A,C,G,E,F)

A A

(E,F) Puente – Otra opción de selección no disponible

B

C

D D

F E

254

F

G

G

Capítulo 7. Grafos: Algoritmos Básicos

Tabla 7.13. Parte 4, y final, de la formación del circuito Euleriano del grafo presentado en la Figura 7.21. Se obtiene el circuito (A,B,C,D,E,A,C,G,E,F,G,D,A) Arista Seleccionada Ruta Actual Subgrafo factible

(A,B,C,D,E,A,C,G,E,F,G)

A A

(F,G) Puente – Otra opción de selección no disponible

B

C

D D

G E

F

G

(A,B,C,D,E,A,C,G,E,F,G,D)

A

(G,D) Puente – Otra opción de selección no disponible

B

C

A D

D E

F

G

(A,B,C,D,E,A,C,G,E,F,G,D,A)

A

(D,A) Puente – Otra opción de selección no disponible

B

C

D

E

F

G

255

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

En el ejemplo anterior se encontraron diversos puentes a lo largo del proceso de generación del circuito. Sin embargo, la regla b del algoritmo era aplicable dado que en cada caso las únicas aristas disponibles para selección eran precisamente tales puentes. Ahora supóngase que contamos con el subgrafo factible de la Figura 7.22. A

E

C

D

B

F

Figura 7.22. Un subgrafo factible. Actualmente la ruta formada termina en el vértice C.

Sea el vértice C aquel en el cual la ruta actualmente construida finaliza. Entonces se tienen tres opciones de elección: las aristas (C,A), (C,B) y (C,D). Como podrá apreciarse, la arista (C,D) es un puente. Si tal arista fuese seleccionada, en primer lugar tendría que ser removida del subgrafo factible. Esto trae como consecuencia que el subgrafo es ahora desconectado teniéndose dos componentes: uno formado por los vértices A, B y C, y el otro componente formado por los vértices D, E y F (Véase la Figura 7.23). De seguir así, la siguientes aristas a seleccionar serían forzosamente aquellas en el componente con vértices D, E y F. Una vez elegidas, ya no habría manera de retornar al componente con vértices A, B y C, y por consecuencia, no se podría generar el circuito Euleriano. A

E

C

B

D

F

Figura 7.23. Remoción de la arista (C, D) del subgrafo factible de la Figura 7.22. Se separa en dos componentes.

Por lo tanto, antes de seleccionar a la arista (C,D) debe considerarse la elección de una de las aristas (C,A) o (C,B). En este caso la regla b del algoritmo de Fleury no aplica precisamente debido a que existen aristas elegibles adicionales al puente (C,D). El Algoritmo 7.7 corresponde a la implementación del Método de Fleury para determinar, dado un grafo Euleriano, su correspondiente circuito Euleriano. El algoritmo recibe como entrada el grafo G, un vértice inicial v y el número m de aristas en G. El subgrafo factible Gf es inicialmente una copia de G. Para cada vértice v actualmente procesado se calcula su vecindad. Por cada vértice x en N(v), el cual es guardado en la variable u, evidentemente se tiene la arista (v, x). Tal arista es removida del grafo y se determina si es o no un puente. Para ello se invoca a la Búsqueda por Profundidad (o bien Búsqueda por Amplitud), se obtienen los estatus de los vértices. La arista (v, x) se reintegra a Gf. Se determina cuántos vértices cuentan con STATUS = 1. Si hay cero vértices con STATUS = 1 entonces la remoción de (v, x) no desconecta al subgrafo factible Gf. En este caso el ciclo for se termina y ya no se inspeccionan los vértices restantes en N(x). Si hay al 256

Capítulo 7. Grafos: Algoritmos Básicos

menos un vértice con STATUS = 1 entonces (v, x) es un puente y se procesa al siguiente vértice disponible en N(v). Nótese que si la arista es un puente y además es la única opción entonces el ciclo for terminará debido a que ya no hay más vértices disponibles en N(v). En cualquier caso la variable u tendrá el último vértice de la vecindad de v que fue procesado. La arista (v, u) es definitivamente removida del subgrafo factible. Se debe determinar, al calcular deg(v), si esta remoción hace que v quede aislado, si es así, entonces el vértice debe ser removido de Gf. Ahora se determinará que arista se agregará al circuito Euleriano partiendo del vértice v = u. El ciclo while principal termina cuando todas las aristas del subgrafo factible han sido procesadas y por lo tanto Gf se encuentra vacío. Algoritmo 7.7. Implementación del Método de Fleury para Encontrar un Circuito Euleriano.

Procedure Fleury(graph G, integer v, integer m) C = {v} // Circuito Euleriano. Gf = G // Subgrafo factible. mf = m while (mf > 0) do N(v) = getNeighborhood(v) u = -1 for each vertex x ∈ N(v) do u=x Gf = Gf \ (v, x) // Se remueve la arista (v, x) del subgrafo factible. STATUS[ ] = DepthFirstSearch(Gf) Gf = Gf ∪{(v,x)} // (v,x) se agrega de nuevo al subgrafo factible. nonDiscovered = 0 for i = 1 until n do if (STATUS[i] = 1) then nonDiscovered = nonDiscovered + 1 end-of-if end-of-for if (nonDiscovered = 0) then // La arista (v,x) no es un puente. break end-of-if end-of-for C = C ∪ {u} // Se agrega al vértice u al circuito Euleriano. Gf = Gf \ (v, u) // Se remueve definitivamente la arista (v, u) mf = mf - 1 deg_v = getDegree(v) if (deg_v = 0) then // Si el vértice v queda aislado después de remover // la arista (v, u) entonces se remueve del subgrafo factible. Gf = Gf \ v end-of-if v=u end-of-while return C // Se retorna el circuito Euleriano de G. end-of-procedure 257

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

7.5 Algoritmo de Dijkstra Sea G un grafo pesado. Se requiere encontrar la ruta P entre dos vértices v0 y vk tal que ésta tenga la distancia mínima. El Peso o Distancia de una Ruta P = (v0, v1, …, vk) es la suma de los pesos de sus aristas constituyentes:

k

w( P) = ¦ w(vi −1 , vi ) i =1

Ahora definamos el Peso de la Ruta Más Corta entre u y v como: Si existe una ruta de u a v. ­min{w( P) : P = (u,..., v)} Si no existe una ruta de u a v. ∞ ¯

δ (u, v) = ®

La ruta más corta entre el vértice u y el vértice v es entonces definida como cualquier ruta P con peso w(P)= δ (u, v) . El siguiente Teorema nos dice que dada una ruta más corta P entre dos vértices, cualquier subruta dentro de P es también la más corta entre sus correspondientes vértices inicial y final.

Teorema 7.1: Dado un grafo pesado G, sea P = (v0, v1, …, vk) la ruta más corta del vértice v0 al vértice vk. Para cualquier i y j tales que 0 ≤ i ≤ j ≤ k, sea Pij = (vi, vi+1, …, vj) una subruta de P del vértice vi al vértice vj. Entonces Pij es la ruta más corta del vértice vi al vértice vj.

Algunos algoritmos para resolver el problema de la ruta más corta utilizan la técnica de Relajación. Sea root el vértice inicial de una ruta. Por cada vértice v ∈ V(G) se mantiene un atributo d(v) que es una cota superior del peso de la ruta más corta desde root hasta v. Al valor d(v) se le llama Estimado de la Ruta Más Corta. La técnica de relajación se fundamenta de la siguiente manera: Sean u y v, u ≠ v, dos vértices en un grafo con sus respectivos estimados d(u) y d(v). El valor del estimado de v nos dice que existe una ruta Q que va del vértice inicial root a v con peso d(v). De la misma manera, el estimado de u nos dice que existe una ruta R que va del vértice inicial root a u y tiene peso d(u). Es posible que las rutas Q y R compartan subrutas. Supongamos también que u y v son vértices adyacentes, es decir, están conectados por una arista (u, v) con peso w(u, v). La idea ahora es determinar si la ruta Q de root a v puede ser mejorada, es decir, si es posible reducir su 258

Capítulo 7. Grafos: Algoritmos Básicos

peso. Para ello, se utilizará una nueva ruta alternativa formada con la ruta R, que conecta a root con u, y agregando la arista que conecta a u con v. Es decir, tenemos la ruta candidata Q’ = (root, …, u, v). El peso de tal ruta estará dado por d(u) + w(u, v). Recordemos que la ruta original Q tiene peso d(v). Entonces, se evalúa la siguiente condición:

d(v) > d(u) + w(u, v)

Si la condición es falsa entonces la ruta actual Q seguirá siendo la mejor conexión entre root y v. Pero, si la condición es verdadera, ello implica que la nueva ruta propuesta, que también conecta a root con v pero pasando por el vértice u, es mejor, en términos del peso, a la que se tenía originalmente. Por lo tanto, procedemos a relajar al vértice v al asignarle como nuevo estimado la suma del estimado del vértice u y el peso de la arista (u, v) que los conecta. El nuevo estimado d(v) ahora hace referencia a la nueva ruta Q’.

Sea G un grafo pesado. El Algoritmo de Dijkstra buscará la ruta más corta entre dos vértices: root y target. Como comentamos previamente, cada vértice v en el grafo cuenta con el atributo d(v) que contiene el estimado de su distancia más corta desde el vértice inicial root. Los estimados de todos los vértices, excepto root, son inicializados como d(v) = ∞. Para un vértice v, su estimado se actualizará, o relajará, cada vez que una ruta más corta de root hasta v sea encontrada. El algoritmo distinguirá entre vértices procesados y no procesados. T denotará al conjunto de vértices no procesados del grafo. La idea es que un vértice u caracterizado como procesado ya no puede estar sujeto a relajación debido a que su estimado, d(u), contiene efectivamente el peso de la ruta más corta desde root a u. De hecho, usando a cada vértice procesado es que se intentará relajar a aquellos contenidos en el conjunto T.

Nótese que todo vértice no procesado v en T debe ser relajado por vértices ya procesados que también son sus vecinos. Si estamos en la situación de que todos los vecinos ya procesados de v lo han relajado, o intentado relajar, y además v tiene el estimado mínimo comparado con los restantes vértices en T, entonces, por el Teorema 7.1, ello implica que v de hecho debe ser ya caracterizado como un vértice procesado debido a que su estimado d(v) ya no puede ser mejorado. Si d(v) pudiese ser aún mejorado, considerando todas las condiciones anteriores, ello implicaría que hay al menos un vecino ya procesado de v cuyo estimado aún se puede mejorar, pero ello es una contradicción ya que asumimos que todo vértice ya procesado tiene exactamente el valor, y no una cota superior, del peso de la ruta más corta partiendo de root. De hecho, debe ser claro que el primer vértice del grafo caracterizado como procesado es root con d(root) = 0 ya que el peso de la ruta más corta de este vértice hacia sí mismo es cero y por consecuencia no puede ser relajado.

La implementación presentada en el Algoritmo 7.8 hace uso de un arreglo Parent de n elementos, n = Card(V(G)), el cuál será útil en la reconstrucción de la ruta más corta una vez finalizada la ejecución del algoritmo. Por otro lado, la implementación buscará 259

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

todas las rutas más cortas a partir del vértice inicial root hacia todos los vértices alcanzables por éste. Ello implica, primero, que el algoritmo sólo recibirá como entrada al grafo G y al vértice inicial root, y por otro lado, se tendrá que todos los vértices, excepto root, serán relajados hasta donde sea posible de manera que sus estimados contengan el peso exacto de la ruta más corta. Para ello, sólo basta con terminar la ejecución del algoritmo cuando todos los vértices de G sean caracterizados como procesados, es decir, cuando T = ∅. Algoritmo 7.8. Algoritmo de Dijkstra.

Procedure Dijkstra(graph G, vertex root) d(root) = 0 Parent[root] = -1 for each vertex v ≠ root do d(v) = ∞ Parent[v] = -1 end-of-for T = V(G) u = root while (T ≠ ∅) do T = T \ {u} // u es vértice procesado. N(u) = getNeighborhood(u) for each vertex v ∈ N(u) do if (v ∈ T and d(v) > d(u) + w(u,v)) then d(v) = d(u) + w(u,v) Parent[v] = u end-of-for end-of-for // u será el vértice en T cuyo estimado es el mínimo. u = getMinEstimate(T) end-of-while return end-of-procedure

1

C

B 1

5

3

3

2 5

4

A

4 F

4

6

E

Figura 7.24. Un grafo conectado y pesado G.

260

D

Capítulo 7. Grafos: Algoritmos Básicos

Considérese el grafo de la Figura 7.24. Formalmente, para tal grafo se tiene que: • • •

V(G) = {A, B, C, D, E, F} E(G) = {(A,B), (A,D), (A,E), (B,C), (B,E), (B,F), (C,F), (C,E), (C,D), (D,F), (D,E)} Los pesos de sus aristas: w(A, B) = 3 w(A, E) = 6 w(B, E) = 1

w(C, F) = 5 w(C, D) = 3 w(D, E) = 4

w(A, D) = 4 w(B, C) = 1 w(B, F) = 5

w(C, E) = 2 w(D, F) = 4

Se buscarán las rutas más cortas del vértice A a los restantes vértices de G, entonces root = A. En la fase de inicialización se tiene que T = V(G) = {A, B, C, D, E, F} mientras que los estimados y el arreglo Parent quedan como:

d(A) = 0 d(B) = ∞ d(C) = ∞ d(D) = ∞ d(E) = ∞ d(F) = ∞

Parent[A] = -1 Parent[B] = -1 Parent[C] = -1 Parent[D] = -1 Parent[E] = -1 Parent[F] = -1

En las Tablas 7.14 y 7.15 se muestran, para cada iteración t efectuada por el ciclo while del Algoritmo 7.8, la evolución de los estimados de los vértices, del arreglo Parent y del conjunto de vértices no procesados T. En la iteración t = 6 se tiene que T = ∅ y la búsqueda de rutas más cortas finaliza. El arreglo Parent denota una relación entre los vértices u y v de forma que Parent[u] = v se interpreta como v es padre de u o v se conecta con u. Si Parent[u] = -1 entonces se tiene que el vértice u es el inicio de una ruta. Por ejemplo, si se desea conocer la secuencia de vértices que forman la ruta más corta entre el vértice root y F, una vez finalizada la ejecución del algoritmo, se tendrá:

Parent[F] = B Parent[B] = A Parent[A] = -1

De esta manera se determina que la ruta más corta entre A y F es (A, B, F) y tiene peso d(F) = 8. Véase la Figura 7.25.

261

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Tabla 7.14. Procesamiento de los Vértices A, B, C del grafo de la Figura 7.24 por el Algoritmo de Dijkstra.

t

u

Vecinos v de u tales que v∈T

?

>

d(v)

d(u) + w(u,v)

Estimados

Arreglo Parent

Vértices No Procesados T

?

d(B) B



?

> d(A) + w(A,B)

> 0 + 3 = 3: Verdadero Ÿ d(B) = 3 ?

d(D) 1

A

D



?

> d(A) + w(A,D)

> 0 + 4 = 4: Verdadero Ÿ d(D) = 4 ?

d(E) E



?

> d(A) + w(A,E)

d(A) = 0 d(B) = 3 d(C) = ∞ d(D) = 4 d(E) = 6 d(F) = ∞

Parent[A] = -1 Parent[B] = A Parent[C] = -1 Parent[D] = A Parent[E] = A Parent[F] = -1

{B, C, D, E, F}

d(A) = 0 d(B) = 3 d(C) = 4 d(D) = 4 d(E) = 4 d(F) = 8

Parent[A] = -1 Parent[B] = A Parent[C] = B Parent[D] = A Parent[E] = B Parent[F] = B

{C, D, E, F}

d(A) = 0 d(B) = 3 d(C) = 4 d(D) = 4 d(E) = 4 d(F) = 8

Parent[A] = -1 Parent[B] = A Parent[C] = B Parent[D] = A Parent[E] = B Parent[F] = B

{D, E, F}

> 0 + 6 = 6: Verdadero Ÿ d(E) = 6 ?

d(C) C



?

> d(B) + w(B,C)

> 3 + 1 = 4: Verdadero Ÿ d(C) = 4 ?

d(E) 2

B

E

?

> d(B) + w(B,E)

> 3 + 1 = 4: Verdadero

6

Ÿ d(E) = 4 ?

d(F) F



?

> d(B) + w(B,F)

> 3 + 5 = 8: Verdadero Ÿ d(F) = 8 ?

> d(C) + w(C,D) 4 > 4 + 3 = 7: Falso

d(D) D

3

C

?

Ÿ No cambia d(D) ? d(E) > d(C) + w(C,E) E

?

4

>

4 + 2 = 6: Falso

Ÿ No cambia d(E) ? d(F) > d(C) + w(C,F) F

?

8

> 4 + 5 = 9: Falso

Ÿ No cambia d(F)

262

Capítulo 7. Grafos: Algoritmos Básicos

Tabla 7.15. Procesamiento de los Vértices D, E, F del grafo de la Figura 7.24 por el Algoritmo de Dijkstra.

t

u

Vecinos v de u tales que v∈T

?

d(v)

>

Arreglo Parent

Estimados

d(u) + w(u,v)

Vértices No Procesados T

?

> d(D) + w(D,E) 4 > 4 + 4 = 8: Falso

d(E)

?

E 4

Ÿ No cambia d(E)

D

?

> d(D) + w(D,F) 8 > 4 + 4 = 8: Falso

d(F)

?

F

d(A) = 0 d(B) = 3 d(C) = 4 d(D) = 4 d(E) = 4 d(F) = 8

Parent[A] = -1 Parent[B] = A Parent[C] = B Parent[D] = A Parent[E] = B Parent[F] = B

d(A) = 0 d(B) = 3 d(C) = 4 d(D) = 4 d(E) = 4 d(F) = 8 d(A) = 0 d(B) = 3 d(C) = 4 d(D) = 4 d(E) = 4 d(F) = 8

Parent[A] = -1 Parent[B] = A Parent[C] = B Parent[D] = A Parent[E] = B Parent[F] = B Parent[A] = -1 Parent[B] = A Parent[C] = B Parent[D] = A Parent[E] = B Parent[F] = B

{E, F}

Ÿ No cambia d(F)

5

6

E

No hay vecinos de E en T

F

No hay vecinos de F en T

1



C

B 1

{F}

5

3

3

2 5

4

A

D

4 F

4

6

E

Figura 7.25. La ruta más corta entre el vértice root = A y el vértice F.

Supongamos que G es un grafo pesado desconectado. Ello implica que dado un vértice root se encontrarán las rutas más cortas entre root y sus vértices alcanzables. ¿Qué sucede con aquellos vértices que están en un componente de G distinto al del root? En la fase de inicialización se tiene que T = V(G). Ello implica que los vértices no alcanzables desde root serán caracterizados como vértices no procesados. El algoritmo procesará en primer lugar a aquellos vértices para los cuales existe una ruta que los conecte con root. Posteriormente, T contendrá únicamente a aquellos vértices no alcanzables desde root. Los estimados de tales vértices, de acuerdo al Algoritmo 7.8, serán iguales a ∞. Ello se debe a que ninguno de esos vértices pudo haber sido relajado por los vértices ya procesados y

263

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

alcanzables desde root. Dado que en este punto todo vértice en T tiene estimado ∞ entonces cualquiera puede ser usado para relajar a los restantes vértices. Sea u el primer vértice no alcanzable desde root que ha salido del conjunto T. Sea v uno de los vecinos de u. Nótese que se evaluará como siempre si d(v) > d(u) + w(u, v). Pero d(v) = d(u) = ∞. Por lo tanto, v nunca será relajado y conservará su estimado ∞. De hecho, y por la misma razón, ninguno de los vértices restantes tampoco podrá ser relajado. Ello quiere decir que el Algoritmo de Dijkstra terminará con un conjunto de vértices para los cuales su estimado es ∞ y su valor en el arreglo Parent será -1. Es claro que esta salida es consistente con la definición del peso de la ruta más corta que se presentó al inicio de esta sección y por tanto los valores ∞ de los estimados nos indican para cuales vértices del grafo no existe una ruta que los conecte con root.

7.6 Algoritmo de Bellman-Ford En algunas instancias del problema de la ruta más corta pueden existir aristas cuyo peso es negativo. Bajo esta situación se asumirá que los grafos son dirigidos. Recuérdese que un grafo es dirigido si las aristas se asumen pares ordenados de vértices, lo que trae como consecuencia que (u,v) ≠ (v,u). Sea C = (u0, …, un-1, un) un circuito en un grafo, entonces u0 = un. Se dice que el peso del circuito C es la suma de los pesos de las aristas que lo constituyen. Si para un grafo dirigido G todos sus circuitos son de peso no negativo, y además, existen rutas que conecten a root con estos circuitos, entonces para todo v ∈ V(G), el peso de la ruta más corta, δ(root, v), se conservará bien definido aún si tuviese un valor negativo. Ello implica que por ejemplo, dado un grafo dirigido G con las características anteriores, el Algoritmo de Dijkstra nos proporcionará una salida correcta. Ahora bien, por otro lado, si existe un circuito con peso negativo alcanzable desde root entonces los pesos de la ruta más corta no estarán bien definidos. En este caso, ninguna ruta simple de root a un vértice del circuito puede ser la ruta más corta, ya que una ruta con peso menor puede ser siempre encontrada al recorrer el circuito de peso negativo. Si existe un circuito de peso negativo sobre alguna ruta de root a v, se define δ(root, v) = -∞. Por ejemplo, considérese el grafo dirigido de la Figura 7.26. Debido a que existe sólo una ruta de s a a, de hecho la ruta (s, a), entonces δ(s, a) = w(s, a) = 3. De manera similar existe sólo una ruta de s a b tal que δ(s, b) = w(s, a) + w(a, b) = 3 + (-4) = -1. Ahora bien, es claro que existe un número infinito de rutas (no necesariamente simples) de s a c: (s, c), (s, c, d, c), (s, c, d, c, d, c) y así sucesivamente. Debido a que el circuito (c, d, c) tiene peso 6 + (-3) = 3 > 0, la ruta más corta de s a c es (s, c) con un peso δ(s, c) = 5. De manera similar, la ruta más corta de s a d es (s, c, d) con peso δ(s, d) = w(s, c) + w(c, d) = 11. Nótese que también existe un número infinito de rutas de s a e: (s, e), (s, e, f, e), (s, e, f, e, f, e) y así sucesivamente. Debido a que el circuito (e, f, e) tiene un peso 3 + (-6) = -3 < 0 es que entonces no existe una ruta más corta de s a e. Ello se debe a que al recorrer el circuito de peso negativo (e, f, e) un número arbitrario de veces se pueden encontrar rutas de s a e con pesos negativos cada vez más pequeños: (s, e) tiene peso 2, (s, e, f, e) tiene peso -1, (s, e, f, e, f, e) tiene peso -4, (s, e, f, e, f, e, f, e) es de peso -7, y así sucesivamente. Por lo tanto δ(s, e) = -∞. De manera similar, δ(s, f) = -∞. Debido a que g es alcanzable desde f, se pueden encontrar rutas con pesos cada vez más pequeños de s a g, pasando por el circuito (e,f,e), por lo tanto también se tiene que 264

Capítulo 7. Grafos: Algoritmos Básicos

δ(s, g) = -∞. En esta situación, con el grafo de la Figura 7.26 como entrada, el Algoritmo de Dijkstra terminará su ejecución, sin embargo, los estimados que se proporcionarán en la salida, todos diferentes de -∞, deberán caracterizarse aún como cotas superiores de los pesos de las rutas más cortas. En tal caso, se debería contar con un mecanismo para saber si G cuenta o no con un circuito de peso negativo alcanzable desde el vértice inicial root y con ello tomar las consideraciones necesarias respecto a los estimados obtenidos.

a

-4 b 6

4

3

s

5

c

-3

d

8

g

3 2 7 e

-6

f

Figura 7.26. Un grafo dirigido, conectado y pesado G. Se tiene un circuito de peso negativo: (e, f, e).

Algunos algoritmos para la búsqueda de la ruta más corta, como el algoritmo de Dijkstra, son utilizados en la práctica cuando se sabe de antemano que todos los pesos de las aristas son no negativos. El algoritmo de Bellman-Ford resuelve el problema sobre grafos dirigidos bajo el caso en que las aristas pueden tener pesos negativos (Véase el Algoritmo 7.9). El algoritmo de Bellman-Ford retorna un valor Booleano indicando si existe o no un circuito de peso negativo alcanzable desde el origen root. Si tal circuito existe, entonces el algoritmo indicará que no existe solución y retorna False. Si no existe tal circuito, el algoritmo producirá las rutas más cortas y sus pesos, retornando finalmente True. El algoritmo utilizará la técnica de relajación de vértices (presentada en la sección anterior), decrementando de manera progresiva el estimado d(v) del peso de la ruta más corta desde el origen root a cada vértice v ∈ V(G) hasta obtener el peso de la ruta más corta δ(root, v). Los estimados de todos los vértices de G son inicializados como ∞, excepto root para el cual se tiene d(root) = 0. El principio fundamental sobre el que se sustenta el Algoritmo de Bellman-Ford parte del hecho de que para todo grafo se tiene que el número de aristas incidentes de cualquiera de sus vértices será a lo más n-1. Ello implica que el estimado de cualquier vértice puede ser relajado a lo más n-1 veces ya que precisamente la relajación se efectúa usando a cada uno de sus vértices adyacentes. De acuerdo a este razonamiento, y excluyendo el concepto de vértice procesado/no procesado presente en el Algoritmo de Dijkstra, es posible entonces proponer un método de búsqueda de rutas más

265

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

cortas intentando relajar a cada vértice de G exactamente en n-1 ocasiones. De manera más concreta (véase el Algoritmo 7.9), cada arista dirigida (u, v) de G es procesada n-1 veces. Durante cada proceso se intentará relajar al estimado del vértice v, d(v), usando el estimado del vértice u, d(u), y el peso de la arista que los conecta, w(u, v). Ahora, una vez que cada vértice de G ha sido procesado en n-1 ocasiones, el algoritmo de Bellman-Ford efectúa un intento más de relajación para cada vértice. Si existe un vértice v, alcanzable desde root, cuyo estimado puede ser todavía relajado, entonces ello implica que el vértice es de hecho alcanzable desde un circuito de peso negativo que conecta a root con v. Y de hecho, si se intentará una (n+1)-ésima relajación, ésta sería exitosa. Es claro que tal vértice puede ser relajado entonces un número infinito de veces. Si esta situación se presenta, el Algoritmo 7.9 retorna como salida False, indicando la existencia de un circuito de peso negativo alcanzable desde root. En este caso, los valores de los estimados obtenidos deberían ser considerados cotas superiores. Por otro lado, si todo vértice de G no pudo ser relajado una vez más, ello implica que sus estimados no pueden ser mejorados y por tanto representan los valores exactos de las rutas más cortas con vértice inicial root. El algoritmo de Bellman-Ford retorna entonces True. Algoritmo 7.9. El Algoritmo de Bellman-Ford.

Procedure BellmanFord(graph G, vertex root, integer n) d(root) = 0 Parent[root] = -1 for each vertex v ≠ root do d(v) = ∞ Parent[v] = -1 end-of-for for i = 1 to n - 1 for each edge (u, v) ∈ E(G) do if (d(v) > d(u) + w(u,v)) then d(v) = d(u) + w(u,v) Parent[v] = u end-of-if end-of-for end-of-for for each edge (u, v) ∈ E(G) do if (d(v) > d(u) + w(u, v)) then // Se ha detectado un circuito con peso negativo // alcanzable desde root. return False end-of-if end-of-for return True end-of-procedure

266

Capítulo 7. Grafos: Algoritmos Básicos

5

t

-2

6

x

-3 8

s

2

7 -4

7 y

9

z

Figura 7.27. Un grafo dirigido pesado con algunas aristas de peso negativo.

Efectuaremos una corrida de escritorio del algoritmo de Bellman-Ford usando el grafo dirigido pesado G de la Figura 7.27. Formalmente se tiene: • • •

V(G) = {s, t, x, y, z}, n = 5. E(G) = {(s, t), (s, y), (t, y), (t, x), (t, z), (x, t), (y, x), (y, z), (z, s), (z, x)}, m = 10. Los pesos de sus aristas: w(s, t) = 6 w(s, y) = 7 w(t, y) = 8 w(t, x) = 5 w(t, z) = -4 w(x, t) = -2 w(y, x) = -3 w(y, z) = 9 w(z, s) = 2 w(z, x) = 7

Sea root = s. Ahora se inicializan los estimados de cada vértice y el arreglo Parent que servirá para reconstruir las rutas más cortas. De tal manera que después de este proceso se tendrá:

d(s) = 0 d(t) = ∞ d(x) = ∞ d(y) = ∞ d(z) = ∞

Parent[s] = -1 Parent[t] = -1 Parent[x] = -1 Parent[y] = -1 Parent[z] = -1

Ahora se procede a relajar los vértices. El número de veces que un vértice será procesado para intentar relajarlo será n – 1 = 4. En las Tablas 7.16 a 19 se muestran las 4 iteraciones realizadas y por cada iteración i se muestra la evaluación para cada arista a fin de determinar si la relajación de su vértice final es posible o no. También se muestran los estados de los estimados y el arreglo Parent al finalizar cada una de estas 4 iteraciones.

267

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Tabla 7.16. Iteración 1 de la Aplicación del Algoritmo de Bellman-Ford para el grafo de la Figura 7.27.

i

?

d(v)

> d(u) + w(u,v) ∀(u,v) ∈ E(G) (s,t): d(t) ?



d(v)

Parent

d(s) = 0.0 d(t) = 6.0 d(x) = 4.0 d(y) = 7.0 d(z) = 2.0

Parent[s] = -1 Parent[t] = s Parent[x] = y Parent[y] = s Parent[z] = t

?

> d(s) + w(s, t)

> 0.0 + 6.0: Verdadero Ÿ d(t) = 6.0

(s,y): d(y) ?



?

> d(s) + w(s, y)

> 0.0 + 7.0: Verdadero Ÿ d(y) = 7.0

(t,x): d(x) ?



?

> d(t) + w(t, x)

> 6.0 + 5.0: Verdadero Ÿ d(x) = 11.0

(t,y): d(y) 7.0

?

?

> d(t) + w(t, y)

> 6.0 + 8.0: Falso

Ÿ No hay cambio (t,z): d(z) ∞

?

?

> d(t) + w(t, z)

> 6.0 + -4.0: Verdadero Ÿ d(z) = 2.0

1

(x,t): d(t) ?

?

> d(x) + w(x, t)

> 11.0 + -2.0: Falso

6.0

Ÿ No hay cambio (y,x): d(x) 11.0

?

?

> d(y) + w(y, x)

> 7.0 + -3.0: Verdadero Ÿ d(x) = 4.0

(y,z): d(z) 2.0

?

?

> d(y) + w(y, z)

> 7.0 + 9.0: Falso

Ÿ No hay cambio ?

(z,s): d(s) 0.0

?

> d(z) + w(z, s)

> 2.0 + 2.0: Falso

Ÿ No hay cambio (z,x): d(x) 4.0

?

?

> d(z) + w(z, x)

> 2.0 + 7.0: Falso

Ÿ No hay cambio

268

Capítulo 7. Grafos: Algoritmos Básicos

Tabla 7.17. Iteración 2 de la Aplicación del Algoritmo de Bellman-Ford para el grafo de la Figura 7.27.

i

?

d(v)

> d(u) + w(u,v) ∀(u,v) ∈ E(G) (s,t): d(t) 6.0

?

d(v)

Parent

d(s) = 0.0 d(t) = 2.0 d(x) = 4.0 d(y) = 7.0 d(z) = 2.0

Parent[s] = -1 Parent[t] = x Parent[x] = y Parent[y] = s Parent[z] = t

?

> d(s) + w(s, t)

> 0.0 + 6.0: Falso

Ÿ No hay cambio (s,y): d(y) 7.0

?

?

> d(s) + w(s, y)

> 0.0 + 7.0: Falso

Ÿ No hay cambio (t,x): d(x) 4.0

?

?

> d(t) + w(t, x)

> 6.0 + 5.0: Falso

Ÿ No hay cambio (t,y): d(y) 7.0

?

?

> d(t) + w(t, y)

> 6.0 + 8.0: Falso

Ÿ No hay cambio (t,z): d(z) 2.0

?

?

> d(t) + w(t, z)

> 6.0 + -4.0: Falso

Ÿ No hay cambio 2

(x,t): d(t) 6.0

?

?

> d(x) + w(x, t)

> 4.0 + -2.0: Verdadero Ÿ d(t) = 2.0

(y,x): d(x) 4.0

?

?

> d(y) + w(y, x)

> 7.0 + -3.0: Falso

Ÿ No hay cambio (y,z): d(z) 2.0

?

?

> d(y) + w(y, z)

> 7.0 + 9.0: Falso

Ÿ No hay cambio (z,s): d(s) 0.0

?

?

> d(z) + w(z, s)

> 2.0 + 2.0: Falso

Ÿ No hay cambio (z,x): d(x) 4.0

?

?

> d(z) + w(z, x)

> 2.0 + 7.0: Falso

Ÿ No hay cambio

269

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Tabla 7.18. Iteración 3 de la Aplicación del Algoritmo de Bellman-Ford para el grafo de la Figura 7.27.

i

?

d(v)

> d(u) + w(u,v) ∀(u,v) ∈ E(G) (s,t): d(t) 2.0

?

d(v)

Parent

?

> d(s) + w(s, t)

> 0.0 + 6.0: Falso

Ÿ No hay cambio (s,y): d(y) 7.0

?

?

> d(s) + w(s, y)

> 0.0 + 7.0: Falso

Ÿ No hay cambio (t,x): d(x) 4.0

?

?

> d(t) + w(t, x)

> 2.0 + 5.0: Falso

Ÿ No hay cambio (t,y): d(y) 7.0

?

?

> d(t) + w(t, y)

> 2.0 + 8.0: Falso

Ÿ No hay cambio (t,z): d(z) 2.0

?

?

> d(t) + w(t, z)

> 2.0 + -4.0: Verdadero Ÿ d(z) = -2.0

3

(x,t): d(t) 2.0

?

?

> d(x) + w(x, t)

> 4.0 + -2.0: Falso

Ÿ No hay cambio (y,x): d(x) 4.0

?

?

> d(y) + w(y, x)

> 7.0 + -3.0: Falso

Ÿ No hay cambio (y,z): d(z) -2.0

?

?

> d(y) + w(y, z)

> 7.0 + 9.0: Falso

Ÿ No hay cambio (z,s): d(s) 0.0

?

?

> d(z) + w(z, s)

> -2.0 + 2.0: Falso

Ÿ No hay cambio (z,x): d(x) 4.0

?

?

> d(z) + w(z, x)

> -2.0 + 7.0: Falso

Ÿ No hay cambio

270

d(s) = 0.0 d(t) = 2.0 d(x) = 4.0 d(y) = 7.0 d(z) = -2.0

Parent[s] = -1 Parent[t] = x Parent[x] = y Parent[y] = s Parent[z] = t

Capítulo 7. Grafos: Algoritmos Básicos

Tabla 7.19. Iteración 4 de la Aplicación del Algoritmo de Bellman-Ford para el grafo de la Figura 7.27.

i

?

d(v)

> d(u) + w(u,v) ∀(u,v) ∈ E(G) (s,t): d(t) 2.0

?

d(v)

Parent

d(s) = 0.0 d(t) = 2.0 d(x) = 4.0 d(y) = 7.0 d(z) = -2.0

Parent[s] = -1 Parent[t] = x Parent[x] = y Parent[y] = s Parent[z] = t

?

> d(s) + w(s, t)

> 0.0 + 6.0: Falso

Ÿ No hay cambio (s,y): d(y) 7.0

?

?

> d(s) + w(s, y)

> 0.0 + 7.0: Falso

Ÿ No hay cambio (t,x): d(x) 4.0

?

?

> d(t) + w(t, x)

> 2.0 + 5.0: Falso

Ÿ No hay cambio (t,y): d(y) 7.0

?

?

> d(t) + w(t, y)

> 2.0 + 8.0: Falso

Ÿ No hay cambio (t,z): d(z) -2.0

?

?

> d(t) + w(t, z)

> 2.0 + -4.0: Falso

Ÿ No hay cambio 4

(x,t): d(t) 2.0

?

?

> d(x) + w(x, t)

> 4.0 + -2.0: Falso

Ÿ No hay cambio (y,x): d(x) 4.0

?

?

> d(y) + w(y, x)

> 7.0 + -3.0: Falso

Ÿ No hay cambio (y,z): d(z) -2.0

?

?

> d(y) + w(y, z)

> 7.0 + 9.0: Falso

Ÿ No hay cambio (z,s): d(s) 0.0

?

?

> d(z) + w(z, s)

> -2.0 + 2.0: Falso

Ÿ No hay cambio (z,x): d(x) 4.0

?

?

> d(z) + w(z, x)

> -2.0 + 7.0: Falso

Ÿ No hay cambio

271

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Sabemos que una vez finalizadas las n – 1 = 4 iteraciones, el Algoritmo de Bellman-Ford ha encontrado las rutas más cortas desde root hasta los restantes vértices para un grafo dirigido asumido libre de circuitos de peso negativo alcanzables precisamente desde root. Por último, se procede a procesar una vez más a las aristas de G. Si se encontrase que uno de los estimados puede ser mejorado, entonces ello implica una contradicción respecto a la hipótesis establecida ya que por tanto el grafo dado contiene circuitos con pesos negativos alcanzables desde root. En el caso del grafo de la Figura 7.27 ninguno de los estimados de los vértices puede ser mejorado una vez más, en consecuencia el algoritmo retorna True como salida. Finalmente el arreglo Parent tendrá el siguiente estado: Parent[s] = -1 Parent[t] = x Parent[x] = y Parent[y] = s Parent[z] = t De donde es posible obtener las rutas más cortas partiendo del vértice s (Véase la Figura 7.28): • δ(s, t) = d(t) = 2.0 con la ruta (s, y, x, t) • δ(s, x) = d(x) = 4.0 con la ruta (s, y, x) • δ(s, y) = d(y) = 7.0 con la ruta (s, y) • δ(s, z) = d(z) = -2.0 con la ruta (s, y, x, t, z) 5

-2

t

x

6 -3 8 2

s

7

-4 7 y

9

z

Figura 7.28. Las rutas más cortas del grafo de la Figura 7.27 con el vértice inicial s.

7.7 Componentes Fuertemente Conectados Se dice que un grafo dirigido es Fuertemente Conectado si para cualesquiera dos de sus vértices existe una ruta que los conecta. El grafo dirigido presentado en la Figura 7.29 es fuertemente conectado. Una aplicación del Algoritmo de Búsqueda por Profundidad o Amplitud permite detectar de manera inmediata grafos fuertemente conectados. Considerando a cada vértice del grafo como inicial, si la salida proporcionada por el Algoritmo es efectivamente un árbol que contiene a todos los vértices de grafo, entonces el grafo dirigido de entrada es fuertemente conectado. En el caso del grafo dirigido de la Figura 7.29, se tiene que las

272

Capítulo 7. Grafos: Algoritmos Básicos

salidas proporcionadas por una Búsqueda por Profundidad podrían ser aquellas presentadas en la Figura 7.30. Vemos que los vértices de todos los árboles generados son precisamente aquellos del grafo original. 5

1

2

4

3

Figura 7.29. Un grafo dirigido fuertemente conectado.

5

5

5

1

2

1

2

1

2

4

3

4

3

4

3

Vértice inicial: 1

Vértice inicial: 2

Vértice inicial: 3

5

5

1

2

1

2

4

3

4

3

Vértice inicial: 4 Vértice inicial: 5 Figura 7.30. Los árboles de Búsqueda por Profundidad asociados al grafo dirigido de la Figura 7.29. Cada vértice del grafo es usado como vértice inicial.

273

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Consideremos al grafo de la Figura 7.31. Este grafo no es más que aquel presentado originalmente en la Figura 7.29 pero con la remoción de las aristas dirigidas (4, 1) y (3, 2). Este grafo ya no puede ser caracterizado como fuertemente conectado debido a que al utilizar al vértice 3 como inicial en una Búsqueda por Profundidad se obtiene un árbol, pero éste no contiene a todos los vértices del grafo. Véase la Figura 7.32.a. De hecho, la misma situación se presenta al utilizar al vértice 4 como vértice inicial (Figura 7.32.b). 5

1

2

4

3

Figura 7.31. El grafo dirigido de la Figura 7.29 al que le han sido removidas las aristas (4, 1) y (3, 2).

4

3

4

3

a) b) Figura 7.32. Dos árboles de Búsqueda por Profundidad asociados al grafo dirigido de la Figura 7.31. a) El árbol generado al usar al vértice 3 como vértice inicial. b) El árbol generado al usar al vértice 4 como vértice inicial.

7.8 Grafo Mínimo Equivalente El problema de encontrar un grafo mínimo equivalente consiste en construir un subgrafo dirigido H de un grafo fuertemente conectado G al remover el máximo número de aristas de G sin afectar sus propiedades de conectividad. Es decir, para cualesquiera dos vértices u y v de G existe una ruta que conecta a u con v en el grafo H. Sea E(G) el conjunto de aristas del grafo fuertemente conectado G el cual se forma por n vértices y m aristas. Las aristas se asume están arbitrariamente etiquetadas de 1 a m. El siguiente procedimiento permite encontrar su grafo mínimo equivalente. La idea es generar de manera directa un grafo candidato. Si se presenta la situación en que tal candidato tiene exactamente n aristas entonces el algoritmo termina debido a que el grafo G de hecho tenía un circuito Hamiltoniano. En caso contrario se procede a generar nuevos grafos candidatos, si alguno de éstos representa una mejora respecto a la solución candidata actual entonces ésta es reemplazada con la nueva solución encontrada:

274

Capítulo 7. Grafos: Algoritmos Básicos



• •

Paso 1: Sea S el conjunto de aristas que forman a la solución actual. Inicialmente S = E(G). Se procede a examinar a todas las aristas de manera secuencial. Una arista (i, j) es removida de S siempre y cuando exista una ruta alternativa que conecte al vértice i con el vértice j. Tal ruta no debe incluir aristas previamente eliminadas. Ello implica que S se actualiza al conservar únicamente aquellas aristas que no han sido removidas. Sea F el conjunto de aristas que han sido removidas del grafo G. Si Card(S) = n entonces el procedimiento finaliza y S contiene las aristas del grafo mínimo equivalente. En caso contrario se procede a ejecutar el paso 2. Paso 2: Sea S’ = S. Paso 3: Mientras F ≠ ∅ o bien Card(S) = n se efectúan los pasos 4 y 5: o Paso 4: Se tienen dos movimientos a aplicar: ƒ Movimiento 1: Se remueve de F a la arista con la etiqueta de mayor valor k y se agrega en S’. ƒ Movimiento 2: Una vez que se ha efectuado el movimiento 1 se tiene que se considera secuencialmente a todas las aristas en S’ con etiquetas mayores que k removiendo de S’ cada arista (i, j) para cual existe una ruta alternativa que conecta a i con j y agregando a la arista (i, j) en F. o Paso 5: Si Card(S’) < Card(S) entonces se actualiza la solución actual haciendo S = S’. En cualquier caso se retorna al paso 3.

El procedimiento claramente termina cuando no es posible efectuar el movimiento 1 del paso 4 debido a que F está vacío. La otra instancia de terminación se presenta cuando Card(S) = n. En cualquier caso el conjunto S contiene las aristas del grafo mínimo equivalente. Considérese el grafo dirigido de la Figura 7.33. Los números en cada arista denotan la etiqueta que se les ha asignado. 1

4

3

2

3

2 6

4 8 10 9

1

7 5

5

Figura 7.33. Un grafo dirigido fuertemente conectado. Sus aristas se encuentran etiquetadas.

Se procede a examinar a cada arista (i, j) del grafo de la Figura 7.33. Tal arista es eliminada del grafo si existe una ruta alternativa que conecte al vértice i con el vértice j. Si es el caso, entonces (i, j) es agregada al conjunto F. Inicialmente tenemos que F = ∅ y S = E(G).

275

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



Arista 1: (4, 3) o Existe una ruta alternativa: (4, 2, 1, 3). F = {(4, 3)}. S es actualizado. Véase la Figura 7.34.a.



Arista 2: (4, 2) o No existe una ruta alternativa que conecte al vértice 4 con el vértice 2 ya que precisamente el vértice 4 tiene como arista de salida únicamente a (4, 2). Véase la Figura 7.34.a.



Arista 3: (3, 2) o Existe una ruta alternativa: (3, 5, 4, 2). F = {(4, 3), (3, 2)}. S es actualizado. Véase la Figura 7.34.b.



Arista 4: (3, 5) o No existe una ruta alternativa ya que el vértice 3 tiene como arista de salida únicamente a (3, 5) (Figura 7.34.b).



Arista 5: (5, 1) o Existe una ruta alternativa que conecta al vértice 5 con el vértice 1: (5, 4, 2, 1). F = {(4, 3), (3, 2), (5, 1)}. S es actualizado, Figura 7.34.c.



Arista 6: (1, 4) o Existe una ruta alternativa: (1, 3, 5, 4). F = {(4, 3), (3, 2), (5, 1), (1, 4)}. S es actualizado tal y como se presenta en la Figura 7.34.d.



Arista 7: (5, 4) o No existe una ruta alternativa ya que el vértice 4 tiene como arista incidente únicamente a (5, 4) (Figura 7.34.d).



Arista 8: (2, 1) o No existe una ruta alternativa debido a que el vértice 2 tiene como arista de salida únicamente a (2, 1). Véase la Figura 7.34.d.



Arista 9: (1, 3) o No existe una ruta alternativa que conecte al vértice 1 con el vértice 3 debido a que el vértice 1 tiene como arista de salida únicamente a (1, 3). Véase la Figura 7.34.d.



Arista 10: (5, 2) o Existe una ruta alternativa que conecta al vértice 5 con el vértice 2: (5, 4, 2). Entonces F = {(4, 3), (3, 2), (5, 1), (1, 4), (5, 2)}. S es actualizado tal y como se presenta en la Figura 7.34.e.

276

Capítulo 7. Grafos: Algoritmos Básicos

4

3 2

4

3

3 2

2

2

6

4

6

4

8

8 10 9

10 9

7

1

5

5

7

1

5

5

a)

b)

4

3

4

2

3 2

2

2

6

4

4

8

8 10 9

10 9

7

5

1 c)

7

5

1 d)

4

3 2

2 4 8 9

1

7

5 e) Figura 7.34. Proceso de construcción del grafo mínimo equivalente asociado al grafo dirigido de la Figura 7.33 (Véase el texto para detalles).

En este punto se tiene que han sido inspeccionadas las 10 aristas del grafo dirigido original (Figura 7.33). Se tiene entonces: • F = {(4, 3), (3, 2), (5, 1), (1, 4), (5, 2)} • S = {(4, 2), (3, 5), (5, 4), (2, 1), (1, 3)} Se tiene que la cardinalidad de S es Card(S) = 5 = n. Por lo tanto, el grafo mínimo equivalente ha sido encontrado y el procedimiento finaliza.

277

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

6

1

1

4

2

4 7

5

2

3

3

Figura 7.35. Un grafo dirigido fuertemente conectado. Sus aristas se encuentran etiquetadas.

Ahora considérese el grafo dirigido G de la Figura 7.35. Se procede a examinar cada una de sus aristas. Inicialmente se tiene que F = ∅ y S = E(G). • Arista 1: (1, 2) o Existe una ruta alternativa: (1, 4, 2). F = {(1, 2)}. S es actualizado tal como se presenta en la Figura 7.36. • Arista 2: (1, 4) o No existe una ruta alternativa ya que el vértice 1 tiene como arista de salida únicamente a (1, 4). • Arista 3: (2, 3) o No existe una ruta alternativa ya que el vértice 3 tiene únicamente a (2, 3) como arista incidente. • Arista 4: (2, 4) o No existe una ruta alternativa que conecte al vértice 2 con el vértice 4. • Arista 5: (3, 2) o No existe una ruta alternativa ya que el vértice 3 tiene como arista de salida únicamente a (3, 2). • Arista 6: (4, 1) o No existe una ruta alternativa. • Arista 7: (4, 2) o No existe una ruta alternativa. 6

1

4

2

4 7

5

2

3

3

Figura 7.36. Resultado de la primera fase de la construcción del grafo mínimo equivalente asociado al grafo dirigido de la Figura 7.35 (Véase el texto para detalles).

278

Capítulo 7. Grafos: Algoritmos Básicos

En este punto se tiene que • F = {(1, 2)} • S = {(1, 4), (2, 3), (2, 4), (3, 2), (4, 1), (4, 2)}. Debido a que Card(S) = 6 ≠ n = 4 entonces se hace S’ = S y se efectuará el paso 3 mientras sea posible. El procedimiento busca si es posible mejorar la solución actual S al reducir el número de aristas. Ahora se buscará la arista con la mayor etiqueta k que esté contenida en F y se agregará a S’ (Véase la Figura 7.37.a). Se examinarán todas las aristas en S’ con etiquetas mayores a k. Es claro que la etiqueta con mayor valor en F es k = 1. Ahora tenemos: • F= ∅ • S’ = {(1, 2), (1, 4), (2, 3), (2, 4), (3, 2), (4, 1), (4, 2)} Todas las aristas en S’, excepto la que acabamos de agregar, tienen el valor de su etiqueta mayor a k = 1. Por lo tanto todas estas aristas se examinarán: • Arista 2: (1, 4) o Existe una ruta alternativa: (1, 2, 4). La arista es removida de S’ y agregada en F: S’ = {(1, 2), (2, 3), (2, 4), (3, 2), (4, 1), (4, 2)}, F = {(1, 4)}. Véase la Figura 7.37.b. • Arista 3: (2, 3) o No existe una ruta alternativa ya que la arista (2, 3) es la única arista incidente al vértice 3 (véase la Figura 7.37.b). • Arista 4: (2, 4) o No existe una ruta alternativa debido a que la arista (2, 4) es la única arista incidente al vértice 4. • Arista 5: (3, 2) o No existe una ruta alternativa conecte al vértice 3 con el vértice 2 ya que la arista (3, 2) es precisamente la única arista de salida en el vértice 3. • Arista 6: (4, 1) o No existe una ruta alternativa: la arista (4, 1) es la única arista incidente al vértice 1 (véase la Figura 7.37.b). • Arista 7: (4, 2) o Existe una ruta alternativa: (4, 1, 2). La arista es removida de S’ y agregada en F: S’ = {(1, 2), (2, 3), (2, 4), (3, 2), (4, 1)}, F = {(1, 4), (4, 2)}. El grafo S’ se actualiza (Véase la Figura 7.37.c). En este punto se ha aplicado por completo el paso 4 de nuestro proceso de construcción. En esta fase se tiene que Card(S’) = 5 < Card(S) = 6. Ello implica que se ha encontrado una mejor solución. Se hace S = S’. Dado que Card(S) ≠ n y F ≠ ∅ se prosigue la ejecución del procedimiento en el paso 3 nuevamente. Se tiene: • F = {(1, 4), (4, 2)} • S’ = {(1, 2), (2, 3), (2, 4), (3, 2), (4, 1)} La etiqueta con mayor valor en F es k = 7. Ésta corresponde a la arista (4, 2). Se actualizan tanto F como S’: • F = {(1, 4)} • S’ = {(1, 2), (2, 3), (2, 4), (3, 2), (4, 1), (4, 2)} No se examina ninguna arista debido a que 7 es la etiqueta de mayor valor en S’. El grafo S’ queda tal como se presenta en la Figura 7.37.d. 279

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

La etiqueta con mayor valor en F es k = 2. Ahora se tendrá: • •

F= ∅ S’ = {(1, 2), (2, 3), (2, 4), (3, 2), (4, 1), (4, 2)}.

Véase la Figura 7.37.e. Se procede a examinar a aquellas aristas con etiquetas mayores a k = 2. •

Arista 3: (2, 3) o No existe una ruta alternativa: la arista (2, 3) es la única arista incidente al vértice 3.



Arista 4: (2, 4) o No existe una ruta alternativa.



Arista 5: (3, 2) o No existe una ruta alternativa: la arista (3, 2) es la única arista de salida en el vértice 3.



Arista 6: (4, 1) o No existe una ruta alternativa.



Arista 7: (4, 2) o Existe una ruta alternativa: (4, 1, 2). La arista es removida de S’ y agregada en F. Se tiene entonces S’ = {(1, 2), (2, 3), (2, 4), (3, 2), (4, 1)} y F = {(4, 2)}. Véase la Figura 7.37.f.

La etiqueta con mayor valor en F es k = 7. Ahora: • F= ∅ • S’ = {(1, 2), (2, 3), (2, 4), (3, 2), (4, 1), (4, 2)}. Véase la Figura 7.37.g. No se examinan aristas debido a que 7 es la etiqueta de mayor valor en S’. Ahora se tiene que F = ∅ por lo tanto se cumple una condición para terminar el procedimiento. El conjunto S queda de la siguiente forma (la cual corresponde a la última actualización S = S’ efectuada previamente):

S = {(1, 2), (2, 3), (2, 4), (3, 2), (4, 1)} Esta es de hecho la mejor solución encontrada. Por lo tanto el grafo mínimo equivalente asociado al grafo dirigido de la Figura 7.35 es el presentado en la Figura 7.38.

280

Capítulo 7. Grafos: Algoritmos Básicos

6

1

1

6

4

2

4

1

1

4

5

3

5

2

a)

5

2

4

1

1

c) 6

4

2

4

1

1

7

3

3

6

4

5

4

b)

6

2

3

3

1

4

7

3

1

1

1

7

2

6

4

4

2

4

7

3

5

2

3

3

3

3

3

d)

5

2

e)

f)

6

1

1

4

2

4 7

5

2

3

3

g) Figura 7.37. Proceso de construcción del grafo mínimo equivalente asociado al grafo dirigido de la Figura 7.35 (Véase el texto para detalles).

281

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

6

1

4

1

4

5

2

3

3

Figura 7.38. El grafo mínimo equivalente asociado al grafo dirigido de la Figura 7.35.

7.9 Puntos de Corte y Puentes Un grafo simple no dirigido que no está conectado puede ser dividido en componentes conectados. Un grafo simple conectado es un grafo formado por un único componente. Un punto de corte (cut node, cut point) en un componente es un vértice que al ser removido desconecta al componente. En el grafo de la Figura 7.39, claramente el vértice D es un punto de corte (al remover a tal vértice se pierden rutas que permitan conectar a los vértices A, B y C con los vértices E, F y H). B

A

E

D

C

H

F

Figura 7.39. Un grafo simple con un punto de corte: el vértice D.

Si un grafo conectado cuenta con una arista (i, j) que al ser removida trae como consecuencia que el grafo obtenido será desconectado, entonces se dice que a tal arista se le llama puente (bridge). En el grafo de la Figura 7.40 la arista (D, F) es un puente.

E

B

A

D

C

F

H

Figura 7.40. Un grafo simple con un puente: la arista (D, F).

Intuitivamente se podría pensar que los vértices que conforman a un puente son puntos de corte. De hecho, considerando el puente (D, F) en el grafo de la Figura 7.40 tenemos que efectivamente los vértices D y F son puntos de corte. Sin embargo, en general

282

Capítulo 7. Grafos: Algoritmos Básicos

esta propiedad no es necesariamente cierta. Obsérvese el grafo de la Figura 7.41.a. El grafo claramente cuenta con un puente: la arista (x, y). El vértice x es un punto de corte ya que separa al grafo en dos componentes, uno de los cuales contiene únicamente al vértice y. Sin embargo, el vértice y no es un punto de corte: al remover al vértice y se obtiene un subgrafo formado por un único componente. Es decir, el grafo resultante sigue siendo conectado. Por otro lado, consideremos ahora al grafo de la Figura 7.41.b. Es claro que la arista (U, V) es un puente: su remoción produce dos componentes con exactamente un vértice cada uno. Pero ninguno de los dos vértices U y V pueden ser caracterizados como puntos de corte: su respectiva remoción del grafo original produce un componente con un único vértice, es decir, el subgrafo que se obtiene sigue siendo conectado.

v

u

x

y

U

V

w a)

b)

Figura 7.41. Dos grafos que presentan puentes cuyos vértices no son necesariamente puntos de corte (véase el texto para detalles).

De estas observaciones se desprenden propiedades a tomar en cuenta: • • •

Los vértices de un puente son puntos de corte si sus grados son mayores o iguales a 2. Un puente se puede formar por dos vértices de grado 1 (que no son puntos de corte). Un puente se puede formar por un vértice de grado 1 (que no es punto de corte) y por un punto de corte.

El siguiente procedimiento permite identificar puntos de corte y puentes en un grafo no dirigido conectado G. A cada arista (i, j) se le asignará una etiqueta con tres posibles estados: • • •

b(i, j) = 0: La arista no tiene un punto de corte en i o j. b(i, j) = 1: La arista tiene exactamente un punto de corte en i o j. b(i, j) = 2: Los vértices i y j son ambos puntos de corte.

Entonces el procedimiento está dado como sigue: •

Sea C el conjunto de puntos de corte identificados. Sea B el conjunto de puentes identificados. Inicializar a tales conjuntos como C = ∅ y B = ∅ . Toda arista (i, j) en el grafo G será inicializada con b(i, j) = 0.

283

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



Procesar secuencialmente cada vértice i de G: o Obtener el subgrafo G \ i, es decir, el grafo G con el vértice i removido (también deben removerse todas aquellas aristas de las cuales i forma parte). o Efectuar una Búsqueda por Profundidad o Amplitud sobre G \ i. Se revisa la salida producida por la búsqueda: ƒ Si la salida proporcionada por la búsqueda es un bosque entonces vértice i es un punto de corte ya que G \ i es de hecho un grafo no conectado. Entonces:

• Se agrega el vértice i al conjunto C. • Se identifican todas las aristas de G incidentes al punto de corte i. Para cada arista (i, j) efectuar b(i, j) = b(i, j) + 1. Si b(i, j) = 2 entonces se introduce a la arista (i, j) en el conjunto B. Nótese que en este caso el vértice j ya estaba previamente en el conjunto C. ƒ Si la salida proporcionada por la búsqueda es un árbol y el grado del vértice i en G es exactamente 1 entonces se tiene que si bien i no es punto de corte, la arista que le es incidente si es un puente:

• Se identifica a la única arista (i, j) incidente al vértice i. La arista es introducida en el conjunto B.

Nuestro procedimiento evidentemente termina cuando todos los vértices de G han sido inspeccionados.

Considérese el grafo G presentado en la Figura 7.42. Se determinarán sus puntos de corte y sus puentes. Inicialmente se tiene C = ∅ y B = ∅ . Además para cada una de sus aristas (i, j) tendremos b(i, j) = 0.

c b

h

d

a

f e

g

i

Figura 7.42. Un grafo simple conectado para el que se determinarán todos sus puentes y puntos de corte.

284

Capítulo 7. Grafos: Algoritmos Básicos



Se procede a analizar secuencialmente a cada uno de sus vértices: Vértice a: o Se obtiene G \ a. Véase la Figura 7.43.a. Una búsqueda por profundidad sobre G \ a retorna el árbol de la Figura 7.43.b indicando que G \ a no es un grafo desconectado, por lo tanto el vértice a no es un punto de corte. Debido a que deg(a) ≠ 1 entonces no se efectúa ninguna actualización.



Vértice b: o Se obtiene G \ b. Véase la Figura 7.43.c. Una búsqueda por profundidad sobre G \ b retorna el árbol de la Figura 7.43.d indicando que G \ b no es un grafo desconectado, por lo tanto el vértice b no es un punto de corte. Debido a que deg(b) ≠ 1 entonces no se efectúa ninguna actualización.



Vértice c: o Se obtiene G \ c. Véase la Figura 7.43.e. Una búsqueda por profundidad sobre G \ c retorna al mismo G \ c pero indicando que es de hecho un bosque. Por lo tanto el vértice c es un punto de corte. Se efectúan las siguientes actualizaciones: • C = {c} • (a, c): b(a, c) = 1 • (b, c): b(b, c) = 1 • (d, c): b(d, c) = 1 • (e, c): b(e, c) = 1



Vértice d: o Se obtiene G \ d. Véase la Figura 7.43.f. Una búsqueda por profundidad sobre G \ d retorna el árbol de la Figura 7.43.g indicando que G \ d no es un grafo desconectado, por lo tanto el vértice d no es un punto de corte. Debido a que deg(d) ≠ 1 entonces no se efectúa ninguna actualización.



Vértice e: o Se obtiene G \ e. Véase la Figura 7.43.h. Una búsqueda por profundidad sobre G \ e retorna el árbol de la Figura 7.43.i indicando que G \ e no es un grafo desconectado, por lo tanto el vértice e no es un punto de corte. Debido a que deg(e) ≠ 1 entonces no se efectúa ninguna actualización.



Vértice f: o Se obtiene G \ f. Véase la Figura 7.43.j. Una búsqueda por profundidad sobre G \ f retorna el bosque de la Figura 7.44.a. Por lo tanto el vértice f es un punto de corte. Se efectúan las siguientes actualizaciones: • C = {c, f} • (d, f): b(d, f) = 1 • (e, f): b(e, f) = 1 • (g, f): b(g, f) = 1

285

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



Vértice g: o Se obtiene G \ g Véase la Figura 7.44.b. Una búsqueda por profundidad sobre G \ g retorna el bosque de la Figura 7.44.c. Por lo tanto el vértice g es un punto de corte. Se efectúan las siguientes actualizaciones: • C = {c, f, g} • (f, g): b(f, g) = 2 • (h, g): b(h, g) = 1 • (i, g): b(i, g) = 1 • Dado que b(f, g) = 2 se ha encontrado el primer puente: B = {(f, g)}.



Vértice h: o Se obtiene G \ h. Véase la Figura 7.44.d. Una búsqueda por profundidad sobre G \ h retorna el árbol de la Figura 7.44.e indicando que G \ h no es un grafo desconectado, por lo tanto el vértice h no es un punto de corte. Debido a que deg(h) = 1 entonces la única arista que le es incidente, (g, h), es un puente: • Se ha encontrado un segundo puente: B = {(f, g), (g, h)}.



Vértice i: o Se obtiene G \ i. Véase la Figura 7.44.f. Una búsqueda por profundidad sobre G \ i retorna el árbol de la Figura 7.44.g indicando que G \ i no es un grafo desconectado, por lo tanto el vértice i no es un punto de corte. Debido a que deg(i) = 1 entonces la única arista que le es incidente, (g, i), es un puente: • Se ha encontrado un tercer puente: B = {(f, g), (g, h), (g, i)}.

Tenemos entonces que el procedimiento ha finalizado con el siguiente estado: • • •

Se identificaron tres puntos de corte: C = {c, f, g}. Se identificaron tres puentes: B = {(f, g), (g, h), (g, i)}. Los valores b(i, j) nos describen la incidencia de las aristas sobre los puntos de corte del grafo: o o o o o o o o o o

286

b(f, g) = 2 b(h, g) = 1 b(i, g) = 1 b(d, f) = 1 b(e, f) = 1 b(a, c) = 1 b(b, c) = 1 b(d, c) = 1 b(e, c) = 1 b(a, b) = 0

Capítulo 7. Grafos: Algoritmos Básicos

h

d c b

f

c

g b

e

h

f

h

h

c b

c

h

f

g

b i

i

g) Árbol de Búsqueda asociado a G \ d

h) G \ e h

d c

i

d

a

g

e

a

g

f) G \ d h

a

f e

i

e) G \ c (es su propio bosque de búsqueda)

b

i

a

g

e

f

g

d) Árbol de Búsqueda asociado a G \ b

d

c

f e

c) G \ b

b

h

c

i

f

i

d

a

g

e

a

g

b) Árbol de Búsqueda asociado a G \ a

d c

f e

i

a) G \ a a

h

d

f

c

g

b

b i

i) Árbol de Búsqueda asociado a G \ e

h

d

a

g e

i

j) G \ f

Figura 7.43. Primera parte del procesamiento de los subgrafos y árboles de búsqueda por profundidad asociados al grafo G de la Figura 7.42 a fin de determinar sus puentes y puntos de corte (véase el texto para detalles).

287

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

h

d

a c b

c

g

f

b

e

e

i

a) Bosque de Búsqueda asociado a G \ f

c b

h

d

a c

f

f

b

e

b

g

e

c

e) Árbol de Búsqueda asociado a G \ h

c b

g

e

f)

G\i

h

d

a

f

b

i

h

d

a f

i

d) G \ h

d c

g

e

i

c) Búsqueda de Búsqueda asociado a G \ g a

i

b) G \ g

d

a

h

d

a

f

g

e

g) Arból de Búsqueda asociado a G \ i Figura 7.44. Segunda parte del procesamiento de los subgrafos y árboles de búsqueda por profundidad asociados al grafo G de la Figura 7.42 a fin de determinar sus puentes y puntos de corte (véase el texto para detalles).

7.10 Conjunto Fundamental de Circuitos Sea T un árbol de expansión asociado a un grafo conectado no dirigido G con n vértices. El Conjunto Fundamental de Circuitos de G correspondiente a T es el conjunto de circuitos de G que se forman con una arista (i, j) de G \ T junto con la única ruta entre el vértice i y el vértice j en el árbol T.

288

Capítulo 7. Grafos: Algoritmos Básicos

9

4

9

G

6

4

T

8

2

8

6

2

Figura 7.45. Un grafo G y uno de sus árboles de expansión T.

9

4

G-T

8

6

2

Figura 7.46. El grafo G \ T. G y T fueron presentados en la Figura 7.45.

9

4

4

8

8

6

2

2

Figura 7.47. El conjunto fundamental de circuitos del grafo G correspondiente al árbol T. G y T fueron presentados en la Figura 7.45.

Considérese el grafo G y su árbol de expansión asociado T, ambos presentados en la Figura 7.45. El grafo G \ T se obtiene al eliminar las aristas de G que están presentes en T. Véase la Figura 7.46. La presencia, en G \ T, de las aristas (9, 6) y (4, 2) indica que se

289

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

tienen dos circuitos en el conjunto fundamental de circuitos del grafo G correspondiente al árbol T. El primer circuito se forma por la arista (9, 6) ∈ G \ T y por las aristas que forman la única ruta que conecta al vértice 9 con el vértice 6 en el árbol T: (6, 2), (2, 8), (8, 4) y (4, 9). Es decir, el circuito está dado por (9, 6, 2, 8, 4, 9). El segundo circuito se forma por la arista (4, 2) ∈ G \ T y por las aristas (2, 8), (4, 8) ∈ T. Véase la Figura 7.47.

Nótese que el conjunto fundamental de circuitos varía de acuerdo al árbol de expansión que se considere. Por ejemplo, el árbol T* de la Figura 7.48 es también un árbol de expansión para el grafo original G de la Figura 7.45. En la Figura 7.49 se presenta al grafo G \ T*. En base al árbol T* se tiene que el grafo G solo cuenta con el circuito (4, 8, 2, 4) en su conjunto fundamental.

9

4

T*

6

8

2

Figura 7.48. Un árbol de expansión T* para el grafo G presentado en la Figura 7.45.

9

4

G \ T*

6

8

2

Figura 7.49. El grafo G \ T*. G y T* fueron presentados en las Figuras 7.45 y 7.48 respectivamente.

290

Capítulo 7. Grafos: Algoritmos Básicos

El siguiente procedimiento construye un árbol de expansión mientras que, al mismo tiempo, encuentra el conjunto fundamental de circuitos de un grafo conectado G: •

• •

Paso 1: o Seleccionar un vértice u en V(G) como la raíz del árbol a generar. Sea T = {u}. El conjunto T contendrá a los vértices del grafo que ya forman parte del árbol de expansión. Paso 2: o Sea x cualquier vértice en T ∩ V(G). Si V(G) = ∅ entonces el procedimiento finaliza. Paso 3: o Considerar de manera secuencial a cada arista (x, j) tal que j ∈ N(x). ƒ Si j está en T entonces: • Obtener un circuito al incluir a la arista (x, j) junto con la única ruta que conecta al vértice x con el vértice j en el árbol. ƒ Si j no está en T entonces: • Agregar la arista (x, j) al árbol e incluir el vértice j en el conjunto T. ƒ Eliminar la arista (x, j) del conjunto E(G). Remover de V(G) aquellos vértices que se aíslen al remover la arista (x, j). ƒ Una vez que todas las aristas han sido procesadas se retorna al paso 2.

Nótese, en el Paso 2 del procedimiento antes presentado, que todo vértice v que no esté en T ∩ V(G) puede ser caracterizado de dos maneras: •

v está en T pero no en V(G). Ello quiere decir que el vértice ya forma parte del árbol de expansión y todas sus aristas incidentes ya fueron previamente evaluadas y por lo tanto removidas de E(G), tal como lo indica el Paso 3. Tales remociones provocan que en un momento dado el vértice v quede aislado, lo cual implica que fue removido en su momento de V(G).



v está en V(G) pero no en T. Evidentemente el vértice aún no forma parte del árbol de expansión. Pero además, se tiene que el vértice v aún no ha sido descubierto al revisar las vecindades de los vértices previamente procesados. Dado que el grafo es conectado, eventualmente el vértice v será descubierto y agregado al conjunto T tal como lo especifica el paso 3.

La idea detrás de considerar, en el paso 2, únicamente a aquellos vértices en T ∩ V(G) tiene que ver con el hecho de que deseamos extender al árbol al agregarle nuevas aristas. Si un vértice x está en T ∩ V(G) ello quiere decir que ya forma parte del árbol y que además aún no está aislado, es decir, aún cuenta con aristas incidentes. Precisamente estas aristas son las que utilizaremos para extender al árbol de expansión.

291

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

2

3

1

6

4

5

Figura 7.50. Un grafo conectado de 6 vértices al que se le determinará su conjunto fundamental de circuitos.

Considérese al grafo de la Figura 7.50. Se buscará su conjunto fundamental de circuitos de acuerdo al procedimiento descrito. •

• •

292

Paso 1: o V(G) = {1, 2, 3, 4, 5, 6} o u=1 o T = {u} = {1} Paso 2: o T ∩ V(G) = {1} ∩ {1, 2, 3, 4, 5, 6} = {1} o x=1 Paso 3: o Aristas (x, j) a considerar con x = 1: (1, 2), (1, 3), (1, 4), (1, 5), (1, 6) o Arista (1, 2), j = 2 ƒ 2 ∈ T ≡ F. Entonces: • T = T ∪ {2} = {1, 2} • Se agrega la arista (1, 2) al árbol. • Se remueve la arista (1, 2) del grafo G. • Véase la Figura 7.50.a. o Arista (1, 3), j = 3 ƒ 3 ∈ T ≡ F. Entonces: • T = T ∪ {3} = {1, 2, 3} • Se agrega la arista (1, 3) al árbol. • Se remueve la arista (1, 3) del grafo G. • Véase la Figura 7.50.b. o Arista (1, 4), j = 4 ƒ 4 ∈ T ≡ F. Entonces: • T = T ∪ {4} = {1, 2, 3, 4} • Se agrega la arista (1, 4) al árbol. • Se remueve la arista (1, 4) del grafo G. • Véase la Figura 7.51.c.

Capítulo 7. Grafos: Algoritmos Básicos

o Arista (1, 5), j = 5 ƒ 5 ∈ T ≡ F. Entonces: • T = T ∪ {5} = {1, 2, 3, 4, 5} • Se agrega la arista (1, 5) al árbol. • Se remueve la arista (1, 5) del grafo G. • Véase la Figura 7.52.a. o Arista (1, 6), j = 6 ƒ 6 ∈ T ≡ F. Entonces: • T = T ∪ {6} = {1, 2, 3, 4, 5, 6} • Se agrega la arista (1, 6) al árbol. • Se remueve la arista (1, 6) del grafo G. • El vértice 1 ha quedado aislado, por lo tanto o V(G) = V(G) \ {1} = {2, 3, 4, 5, 6} • Véase la Figura 7.52.b.

Todas las aristas incidentes al vértice x = 1 han sido procesadas. Por lo tanto se retorna al paso 2. • •

Paso 2: o T ∩ V(G) = {1, 2, 3, 4, 5, 6} ∩ {2, 3, 4, 5, 6} = {2, 3, 4, 5, 6} o x=2 Paso 3: o Aristas (x, j) a considerar con x = 2: (2, 3), (2, 6) o Arista (2, 3), j = 3 ƒ 3 ∈ T ≡ V. Entonces: • Se forma un circuito con la arista (2, 3) y la única ruta en T que conecta al vértice 2 con el vértice 3: (2, 3, 1, 2). • Se remueve la arista (2, 3) del grafo G. • Véase la Figura 7.52.c. o Arista (2, 6), j = 6 ƒ 6 ∈ T ≡ V. Entonces: • Se forma un circuito con la arista (2, 6) y la única ruta en T que conecta al vértice 2 con el vértice 6: (2, 6, 1, 2). • Se remueve la arista (2, 6) del grafo G. • El vértice 2 queda aislado, por lo tanto: o V(G) = V(G) \ {2} = {3, 4, 5, 6} • Véase la Figura 7.52.d.

Todas las aristas incidentes al vértice x = 2 han sido procesadas. Por lo tanto se retorna al paso 2. •

Paso 2: o T ∩ V(G) = {1, 2, 3, 4, 5, 6} ∩ {3, 4, 5, 6} = {3, 4, 5, 6} o x=3

293

Una Introducción a las Matemáticas Discretas y Teoría de Grafos



Paso 3: o Aristas (x, j) a considerar con x = 3: (3, 4), (3, 5) o Arista (3, 4), j = 4 ƒ 4 ∈ T ≡ V. Entonces: • Se forma un circuito con la arista (3, 4) y la única ruta en T que conecta al vértice 3 con el vértice 4: (3, 4, 1, 3). • Se remueve la arista (3, 4) del grafo G. • Véase la Figura 7.53.a. o Arista (3, 5), j = 5 ƒ 5 ∈ T ≡ V. Entonces: • Se forma un circuito con la arista (3, 5) y la única ruta en T que conecta al vértice 3 con el vértice 5: (3, 5, 1, 3). • Se remueve la arista (3, 5) del grafo G. • El vértice 3 queda aislado, por lo tanto: o V(G) = V(G) \ {3} = {4, 5, 6} • Véase la Figura 7.53.b. Todas las aristas incidentes al vértice x = 3 han sido procesadas. Por lo tanto se retorna al paso 2. • Paso 2: o T ∩ V(G) = {1, 2, 3, 4, 5, 6} ∩ {4, 5, 6} = {4, 5, 6} o x=4 • Paso 3: o Aristas (x, j) a considerar con x = 4: (4, 5) o Arista (4, 5), j = 5 ƒ 5 ∈ T ≡ V. Entonces: • Se forma un circuito con la arista (4, 5) y la única ruta en T que conecta al vértice 4 con el vértice 5: (4, 5, 1, 4). • Se remueve la arista (4, 5) del grafo G. • El vértice 4 queda aislado, por lo tanto: o V(G) = V(G) \ {4} = {5, 6} • Véase la Figura 7.53.c. Todas las aristas incidentes al vértice x = 4 han sido procesadas. Por lo tanto se retorna al paso 2. • Paso 2: o T ∩ V(G) = {1, 2, 3, 4, 5, 6} ∩ {5, 6} = {5, 6}, x=5 • Paso 3: o Aristas (x, j) a considerar con x = 5: (5, 6) o Arista (5, 6), j = 6 ƒ 6 ∈ T ≡ V. Entonces: • Se forma un circuito con la arista (5, 6) y la única ruta en T que conecta al vértice 5 con el vértice 6: (5, 6, 1, 5). • Se remueve la arista (5, 6) del grafo G. • Los vértices 5 y 6 quedan aislados, por lo tanto: o V(G) = V(G) \ {5, 6} = ∅ • Véase la Figura 7.53.d.

294

Capítulo 7. Grafos: Algoritmos Básicos

Todas las aristas incidentes al vértice x = 5 han sido procesadas. Por lo tanto se retorna al paso 2. • Paso 2: o V(G) = ∅ . El procedimiento finaliza. Se tiene entonces que bajo el árbol de expansión construido a lo largo de nuestro proceso, el grafo dado G, de la Figura 7.50, tiene el siguiente conjunto fundamental de circuitos: • (2, 3, 1, 2) • (2, 6, 1, 2) • (3, 4, 1, 3) • (3, 5, 1, 3) • (4, 5, 1, 4) • (5, 6, 1, 5) 2

3

1

6

4

5

2

6

4

1

2

6

5

2

6

4

1

2

6

5

G

5

T 3

4

3

1

G

b)

5

T 3

4

3

1

G

a)

c)

2

3

1

6

4

5

T

Figura 7.51. Proceso de identificación del conjunto fundamental de circuitos del grafo de la Figura 7.50 (Primera parte, véase el texto para detalles).

295

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

2

3

1

2

6

4

1

5

6

4

G

a)

2

2

6

5

2

6

4

2

6

5

6

4

2

6

5

G

d)

5

T 3

4

3

1

G

c)

5

T 3

4

3

1

G

b)

5

T 3

4

3

3

1

6

4

5

T

Figura 7.52. Proceso de identificación del conjunto fundamental de circuitos del grafo de la Figura 7.50 (Segunda parte, véase el texto para detalles).

296

Capítulo 7. Grafos: Algoritmos Básicos

3

2

6

4

1

5

6

4

G

a)

3

5

T 2

6

4

b)

3

1

5

6

4

G

5

T 2

6

1

5

c)

3

6

4

G

5

T 2

3

1

6

4

d)

G

5

T

Figura 7.53. Proceso de identificación del conjunto fundamental de circuitos del grafo de la Figura 7.50 (Tercera parte, véase el texto para detalles).

297

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

298

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

Bibliografía •

Discrete Mathematics with Combinatorics James A. Anderson Prentice Hall, Segunda Edición, 2003.



A Short Course in Discrete Mathematics Edward A. Bender, S. Gill Williamson Dover Publications, 2004.



Mathematics for Algorithm and System Analysis Edward A. Bender, S. Gill Williamson Dover Publications, 2004.



Introductory Graph Theory Gary Chartrand Dover Publications, 1984.



Introduction to Algorithms Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest y Clifford Stein. MIT Press, Segunda Edición, 2001.



Mathematical Structures for Computer Science Judith L. Gersting Editorial W. H. Freeman, Quinta Edición, 2002.



Discrete and Combinatorial Mathematics Ralph P. Grimaldi Addison-Wesley, Quinta Edición, 2003.



Graph Theory and Its Applications Jonathan L. Gross, Jay Yellen Chapman & Hall/CRC, Segunda Edición, 2005.

Una Introducción a las Matemáticas Discretas y Teoría de Grafos

300



Discrete Mathematics Richard Johnsonbaugh Prentice Hall, Segunda Edición, 2000.



A Java Library of Graph Algorithms and Optimization Hang T. Lau Chapman & Hall/CRC, Primera Edición, 2006.



Discrete Mathematics Seymour Lipschutz, Marc Lipson Schaum’s Outline Series (McGraw Hill), Segunda Edición, 1997.



Una Introducción a las Matemáticas para el Análisis y Diseño de Algoritmos Ricardo Pérez Aguila El Cid Editor (Argentina), Primera Edición, 2012.



Scale-Isometric Polytopal Graphs in Hypercubes and Cubic Lattices Mikhail Shtogrin, Michel Deza, Viatcheslav Grishukhin Imperial College Press, Primera Edición, 2004.



Modern Computer Algebra Joachim von zur Gathen, Jürgen Gerhard Cambridge University Press, Segunda Edición, 2003.



Introduction to Graph Theory Douglas B. West Prentice Hall, Segunda Edición, 2000.

Related Documents


More Documents from "Gonzalo Rivero"