MATEMÁTICA DISCRETA PARA ENGENHARIA DE COMPUTAÇÃO Profa. Kathya Collazos Linares *As aulas baseiam-se no material do Professor Antonio Alfredo Ferreira Loureiro; Jorge Figueiredo e Judith Gersting
Árvore Definição: Uma árvore (também chamada de árvore livre) é um grafo não dirigido acíclico e conexo.
Árvore Dado um grafo G as seguintes proposições são equivalentes: 1. G é uma árvore. 2. G é conexo e não tem ciclos. 3. Entre cada par de vértices de G existe um único caminho. 4. G é conexo com ordem n e tamanho n-1. 5. G é conexo, mas G-e não é conexo para toda aresta e que pertence a E(G). 6. G é acíclico, mas G + uv contém um ciclo para todo par u, v de vértices independentes.
Árvore geradora Definição: Uma árvore geradora de um grafo G é um grafo que contém cada vértice de G e é uma árvore. Proposição: Cada grafo conexo tem uma árvore geradora. Duas árvores geradores quaisquer de um grafo têm a mesma quantidade de arestas.
Árvore geradora Seja o grafo G abaixo V5 V4 V3 Este grafo possui o circuito v 2 v 1 v 4 v 2. V0 V1 V2 A remoção de qualquer uma das três arestas do circuito leva a uma árvore. Assim, todas as três árvores geradoras são: V5 V4 V3 V5 V4 V3 V5 V4 V3 V0 V1 V2 V0 V1 V2 V0 V1 V2
Árvore Geradora Seja o grafo G: Uma árvore geradora é: A M M D A M D C C I I S L S L N N
Árvore geradora Como encontrar uma árvore geradora? Para encontrar uma árvore geradora: Se o grafo G não tem ciclos, G é uma árvore geradora Se G tem ciclo, é necessário remover recursivamente arestas (até achar uma árvore), mantendo o grafo conectado.
Árvore geradora Como encontrar uma árvore geradora?
Árvore geradora mínima Minimal Spanning Tree (MST) Em muitas das aplicações de relações com conexões simétricas. O grafo da relação modela uma situação na qual as arestas assim como os vértices carregam informação. O grafo ponderado é um grafo no qual cada aresta é etiquetada com um valor numérico denominado peso.
Árvore geradora mínima Minimal Spanning Tree (MST) A 3 B 2 3 C 6 5 5 2 D E 4 H 3 6 4 G Cidade de Oz onde as trilhas do circuito de trens entre os pontos turísticos formam um grafo ponderado, os pesos indicam a distância em quilômetros. F
Árvore geradora mínima Minimal Spanning Tree (MST) Os pesos de uma aresta (v i, v j ) é algumas vezes referenciada como a distância entre vértices v i e v j. Um vértice u é um vizinho próximo do vértice v se u e v são adjacentes e não há nenhum outro vértice unido a v por uma aresta de peso menor do que (u,v). Note que v pode ter mais do que um vizinho próximo.
Árvore geradora mínima Minimal Spanning Tree (MST) Definição: Um grafo com peso é um grafo onde cada aresta possui um peso representado por um número real. A soma de todos os pesos de todas as arestas é o peso total do grafo. Umaárvoregeradoramínima para um grafo com peso é uma árvore geradora que tem o menor peso total possível dentre todas as possíveis árvores geradoras do grafo. Se G é um grafo com peso e e uma aresta de G então: w (e) indica o peso da aresta e, w (G) indica o peso total do grafo G.
Árvore geradora mínima Minimal Spanning Tree (MST) Uma companhia aérea recebeu permissão para voar nas seguintes rotas: D A S C M N L D I O grafo de rotas da companhia aérea que recebeu permissão para voar pode ser rotulado com as distâncias entre as cidades: D A 695 S 355 74 C 262 242 M 348 269 N 306 151 L 83 D 230 I
Árvore geradora mínima Minimal Spanning Tree (MST) A companhia deseja voar para todas as cidades mas usando um conjunto de rotas que minimiza o total de distâncias percorridas: Precisa-se determinar a árvore geradora A árvore geradora deve ser mínima A A A S 355 74 C 262 242 M N L 151 83 D 230 I 695 S 74 C 242 M 269 N 306 151 L 83 D I
Algoritmos para obter a árvore geradora mínima Algoritmo de Prim. Algoritmo de Kruskal. Grafo inicial: A A 355 695 S 74 C M 262 242 348 306 269 N L 151 83 D 230 I Árvore geradora mínima: A A S 355 74 C M 262 242 N L 151 83 D 230 I
Algoritmo de Prim Idéia básica: Passo 1: Escolher o vértice v 1 de G. Seja V = {v 1 } e E = { } Passo 2: Escolher o vizinho próximo de v 1 de V que seja adjacente a v 1, (p.e. v j V) e para o qual a aresta (v 1, v j ) não forma ciclo com os membros de E. Adicionar v j para V e adicionar (v 1, v j ) para E Passo 3: Repetir 2 até todos os vértices sejam visitados. Logo V contém todos os vértices de G e E contém todas as arestas da MST de G
Algoritmo de Prim a b c d e f g h i a 0 4 x x x x x 8 x b 4 0 8 x x x x 11 x c x 8 0 7 x 4 x x 2 d x x 7 0 9 14 x x x e x x x 9 0 10 x x x f x x 4 14 10 0 2 x x g x x x x x 2 0 1 6 h 8 11 x x x x 1 0 7 i x x 2 x x x 6 7 0
Algoritmo de Prim a b c d e f g h i a 0 b 4 0 c x 8 0 d x x 7 0 e x x x 9 0 f x x 4 14 10 0 g x x x x x 2 0 h 8 11 x x x x 1 0 i x x 2 x x x 6 7 0
Algoritmo de Prim a b c d e f g h i a 0 b 4 0 c x 8 0 d x x 7 0 V=[a] E=[ ] e x x x 9 0 f x x 4 14 10 0 g x x x x x 2 0 h 8 11 x x x x 1 0 V =9-1=8 i x x 2 x x x 6 7 0
Algoritmo de Prim a b c d e f g h i a 0 b 4 0 c x 8 0 d x x 7 0 e x x x 9 0 f x x 4 14 10 0 V=[a] E=[ ] V=[a, b] E=[ ab,] g x x x x x 2 0 h 8 11 x x x x 1 0 V =8-1=7 i x x 2 x x x 6 7 0
Algoritmo de Prim a b c d e f g h i a 0 b 4 0 c x 8 0 d x x 7 0 e x x x 9 0 V=[ a,b] E=[ab, ] V=[ a,b,c] E=[ab,bc] f x x 4 14 10 0 g x x x x x 2 0 h 8 11 x x x x 1 0 V =7-1=6 i x x 2 x x x 6 7 0
Algoritmo de Prim a b c d e f g h i a 0 b 4 0 c x 8 0 d x x 7 0 e x x x 9 0 f x x 4 14 10 0 V=[ a,b,c] E=[ab, bc ] V=[ a,b,c,i] E=[ab,bc,ci] g x x x x x 2 0 h 8 11 x x x x 1 0 V =6-1=5 i x x 2 x x x 6 7 0
Algoritmo de Prim a b c d e f g h i a 0 b 4 0 c x 8 0 d x x 7 0 e x x x 9 0 f x x 4 14 10 0 V=[ a,b,c,i] E=[ab, bc,ci ] V=[ a,b,c,i,f] E=[ab,bc,ci, cf] g x x x x x 2 0 h 8 11 x x x x 1 0 V =5-1=4 i x x 2 x x x 6 7 0
Algoritmo de Prim a b c d e f g h i a 0 b 4 0 c x 8 0 d x x 7 0 e x x x 9 0 V=[ a,b,c,i,f] E=[ab, bc,ci,cf ] V=[ a,b,c,i,f,g] E=[ab,bc,ci, cf,fg] f x x 4 14 10 0 g x x x x x 2 0 h 8 11 x x x x 1 0 V =4-1=3 i x x 2 x x x 6 7 0
Algoritmo de Prim a b c d e f g h i a 0 b 4 0 c x 8 0 d x x 7 0 e x x x 9 0 f x x 4 14 10 0 V=[ a,b,c,i,f,g] E=[ab, bc,ci,cf,fg ] V=[ a,b,c,i,f,g,h] E=[ab,bc,ci, cf,fg,gh] g x x x x x 2 0 h 8 11 x x x x 1 0 V =3-1=2 i x x 2 x x x 6 7 0
Algoritmo de Prim a b c d e f g h i a 0 b 4 0 c x 8 0 d x x 7 0 e x x x 9 0 f x x 4 14 10 0 V=[ a,b,c,i,f,g,h] E=[ab, bc,ci,cf,fg,gh ] V=[ a,b,c,i,f,g,h,d] E=[ab,bc,ci, cf,fg,gh, cd] g x x x x x 2 0 h 8 11 x x x x 1 0 V =2-1=1 i x x 2 x x x 6 7 0
Algoritmo de Prim a b c d e f g h i a 0 b 4 0 c x 8 0 d x x 7 0 e x x x 9 0 f x x 4 14 10 0 V=[ a,b,c,i,f,g,h,d] E=[ab, bc,ci,cf,fg,gh, cd ] V=[ a,b,c,i,f,g,h,d,e] E=[ab,bc,ci, cf,fg,gh, cd, de] g x x x x x 2 0 h 8 11 x x x x 1 0 V =1-1=0 i x x 2 x x x 6 7 0
Algoritmo de Kruskal Idéia básica: Passo 1: Ordenar as arestas por ordem crescente do comprimento (ou custo), sendo os desempates feitos arbitrariamente, formando uma lista. Passo 2: Selecionar a primeira aresta da lista. Se originar um ciclo, retirá-la da lista e voltar ao início do Passo 2. Caso contrário, adicioná-la à árvore e retirá-la da lista Passo 3: Repetir o passo 2 até que a árvore esteja formada (todos os vértices conectados).
Algoritmo de Kruskal
Algoritmo de Kruskal
Algoritmo de Kruskal
Algoritmo de Kruskal