A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Grafos Definições Preliminares

Apresentações semelhantes


Apresentação em tema: "Grafos Definições Preliminares"— Transcrição da apresentação:

1 Grafos Definições Preliminares
Estrutura de Dados Marco Antonio Montebello Júnior

2 Definições Preliminares
Grafos são estruturas de dados largamente utilizadas na Ciência da Computação, sendo fundamental seu estudo e dos algoritmos para sua manipulação. Exemplos de aplicações: Modelagem de circuitos digitais; Representação de processos em um sistema paralelo ou distribuído; Uma representação de lista encadeada Árvores de decisão Um diagrama E-R Um diagrama PERT Um Diagrama de Fluxo de Dados (DFD) Máquinas de estado finito Derivação de palavras em linguagens formais

3 Execução de instruções de um processador
Representação do fluxo de dados causado pela execução das instruções de um processador R3 R4 OUT IN R2 R1 1 I6 I5 I8 3 I2 2 I1 I7 I9 4 I4

4 Representação de um processador
FPU (32/64 bits) CPU (32 bits) e Escalonador RAM 4K bytes Temporizadores Canais IME Eventos CPU RAM Canais FPU IME

5 Processamento Paralelo
Representação de processos em um sistema paralelo Mestre Escravo 1 Escravo 2 Escravo n Idle 1 Idle 2 Idle n TestaCPU TestaFPU TestaCanal TestaRAM

6 Estados de um SO Os três estados que um processo pode assumir num sistema operacional [Tanenbaum, Andrew S.] Running I/O Ready 1 2 3 4

7 Um diagrama E-R nome endereço cidade estado pessoa possui animal
Tipo_animal raça nome_animal 1 n

8 PERT Exemplo de um diagrama PERT 1(3,0) 2(4,0) 10(3,0) 3(6,0) 6(1,0)
7(2,0) 11(5,0) 12(0,5) 9(2,0) 8(2,0) 4(7,0) 5(3,0)

9 Notificação de crédito
Um DFD do fluxo de informação de alto nível num escritório de licenciamento de automóveis para uma possível automação Aplicação do processo Requisição de pagto cliente DETRAN Depto veículos autom. Requisição do cliente validação fatura recebimento placa Notificação de crédito Cópia do registro

10 Análise do DFD Após a análise do DFD anterior, foi identificada a tarefa “Pagamento do Processo”a ser realizada pelo software e decomposta em subtarefas como um Diagrama de Estrutura que é uma árvore Pgto do processo Comparar pgto com a fatura Atualizar o arquivo de redimentos do estado Imprimir recebimento do cliente formulário requisição de placa

11 Exemplo Um exemplo de árvore de decisão: if(a > b) v[i] = f(i);
else if(b > c) v[i] = g(i); Assuma que os valores das expressões booleanas “(a > b)” e “(b > c)” são independentes e que, na média, ”(a > b)” é executado 25% do tempo e “(b > c)” 25% do tempo. Se o trecho de programa acima é executado vezes, quantas vezes se espera que as funções f e g sejam executadas? a > b v [ i ] = f [ i ] b > c v [ i ] = g [ i ] x 0,25= 2500 vezes 7.500 vezes 7.500 x 0,25 = 1875 vezes

12 Um exemplo de máquina de estado finito
1 0,1

13 Definição de um Grafo Um grafo dirigido G é um par (N, A), onde N é um conjunto finito e A é uma relação binária entre os componentes de N. Assim: G = (N, A) N = conjunto de nós (ou vértices) de G A = conjunto de arcos (ou arestas) de G Em um grafo não-dirigido G = (N, A), o conjunto de arcos A consiste de um conjunto desordenado de pares de nós N.

14 Exemplos de Grafos Dirigidos e Não-dirigidos
1 2 6 3 5 4 1 - Grafo dirigido G1(N, A): N = {1,2,3,4,5,6} A = {(1,2),(2,2),(2,4),(2,5),(4,1), (4,5),(5,4),(6,3)} 2 - Grafo não-dirigido G2(N,A): A = {(1,2),(1,5),(2,5),(3,6)} Obs: Arcos não ordenados? (2,5) == (5,2) G1 1 2 6 3 5 4 G2

15 Relação de Incidência: É definida entre nós e arcos
Um arco é incidente do nó x quando ele sai de x Um arco é incidente para o nó x quando ele chega em x 1 2 6 3 5 4 1 - Grafo dirigido G1(N, A): Os arcos (2,2); (2,4) e (2,5) são incidentes do nó 2 (saem de 2). Os arcos (1,2)e(2,2) são incidentes para o nó 2 (chegam em 2). 2 - Grafo não-dirigido G2(N,A): Os arcos incidentes no nó 2 são (1,2) e (2,5). O arco (3,6) é incidente nos nós 3 e 6. G1 1 2 6 3 5 4 G2

16 Relação de Adjacência: Dois nós são adjacentes se existe um arco interligando-os
1 2 6 3 5 4 1 - Grafo dirigido G1(N, A): O nó 2 é adjacente ao nó 1. O nó 1 não é adjacente ao 2, pois o arco (2,1) ? ao grafo G1. O nó 5 é adjacente ao nó 2. 2 - Grafo não-dirigido G2(N,A): Relação de adjacência é simétrica. O nó 1 é adjacente ao nó 2. G1 1 2 6 3 5 4 G2

17 Grau de um nó: É medido pelo número de arcos incidentes
Grau = Grau Saída + Grau Entrada 1 2 6 3 5 4 1 - Grafo dirigido G1(N, A): O nó 1 possui grau 2 (1 + 1). O nó 2 possui grau 5 (3 + 2). 2 - Grafo não-dirigido G2(N,A): O nó 2 possui grau 4. O nó 6 possui grau 2. O nó 4 possui grau 0. G1 1 2 6 3 5 4 G2

18 Caminho Um caminho c de um nó u para um nó u’ em um grafo G = (N, A) é a seqüência de nós <n0, n1, n2, ... nk >, onde u = n0 e u’ = nk, e (ni-1, ni)  A para i = 1, 2, ..., k. O tamanho de c é o número de arcos existente em c. Um caminho c é composto pelos nós n0, n1, n2,... nk e pelos arcos (n0, n1), (n1, n2), ..., (nk-1, nk). Obs.: O 2o. nó de cada arco deve coincidir com o 1o. nó do arco seguinte. Quais os caminhos de 1 para 4? c1 = <1, 2, 5, 4> e c2 = <1, 2, 4> Quais os tamanhos de c1 e c2? c1 = 3 e c2 = 2 Quais são os arcos de c1 e c2? <(1,2), (2,5), (5,4)>, <(1,2), (2,4)> 1 2 6 3 5 4 G1

19 Ciclo 1 - Grafo dirigido G1(N,A): 2 - Grafo não-dirigido G2(N,A): G1
Um grafo G = (N, A) possui um ciclo se existir um caminho c = <n0, n1, ... nk >, onde n0 = nk. Se não existir, o grafo é dito acíclico. O caminho é simples se <n0, n1, ... nk > são diferentes 1 2 6 3 5 4 1 - Grafo dirigido G1(N,A): Ciclos de G1: <1,2,4,1>; <2,4,1,2>; <4,1,2,4>; <1,2,4,5,4,1> (não simples) e <2,2> (laço). 2 - Grafo não-dirigido G2(N,A): Ciclos de G2: <1,2,5,1>; <2,5,1,2>; <5,1,2,5> G1 1 2 6 3 5 4 G2

20 Grafos conectados Grafos conectados: Um grafo não-dirigido G = (N, A) é conectado se cada par de nós é conectado por um caminho. Um grafo não-dirigido é conectado se possuir exatamente um componente conectado, ou seja, se cada nó é alcançável a partir de cada um dos outros nós. Logo, o grafo G2 não é conectado. 1 - Grafo não-dirigido G2(N,A) Possui três componentes conectados: {1, 2, 5}, {3, 6} e {4} 1 2 6 3 5 4 G2

21 Grafos fortemente conectados
Um grafo dirigido G = (N, A) é fortemente conectado se cada dois nós são alcançáveis (um a partir do outro). Todos os pares em {1, 2, 4, 5} são mutuamente alcançáveis. Os nós {3, 6} não formam um componente fortemente conectado, pois não é possível chegar em 6 a partir de 3. Um grafo dirigido é fortemente conectado se possuir exatamente um componente fortemente conectado. Logo, o grafo G1 não é fortemente conectado. 1 2 6 3 5 4 1 - Grafo dirigido G1(N,A) Componentes fortemente conectados: {1, 2, 4, 5} G1

22 Subgrafo Um grafo G’=(N’, A’) é um subgrafo de G=(N,A) se N’  em N e A’  em A. Dado um conjunto N’  em N, o subgrafo de G induzido por N’ é o grafo G’ = (N’, A’). Exemplo: O subgrafo G3 é induzido pelo conjunto de nós {1, 2, 3, 6} do grafo G1, possuindo o conjunto de arcos {(1,2), (2,2), (6,3)}. G G3 1 2 6 3 5 4

23 Grafo parcial Um grafo parcial G’ de G, é um grafo no qual N(G’)=N(G) e A(G’)A(G), ou seja, G’ possui os mesmos nós de G, porém com um conjunto reduzido de arcos. O grafo G4 é um grafo parcial de G1: G4(N, A’)  G1(N, A) N(G1) = N(G4) = {1,2,3,4,5,6} A(G1)  A’(G4) = {(1,2),(2,4),(4,1),(4,5),(6,3)} G G4 1 2 6 3 5 4

24 Conexo Um grafo é dito conexo se houver um caminho entre quaisquer dois vértices a a a2 a a3 Não é conexo a a4 a 2 a a2 a a3 Conexo Conexo

25 Grafos isomorfos São aqueles cujas estruturas são iguais a menos de um novo rotulamento. Nesse caso os grafos têm os mesmos vértices, as mesmas arestas e a mesma função de associação de arestas e seus extremos Será que Grafo a, b e c são isomorfos? c d a e2 b e1 a2 a1 a a2 Grafo a Grafo b Grafo c f1: > a 2 --> c 3 --> b 4 --> d f2: a1 --> e2 a2 --> e1

26 Grafo Planar Um grafo é planar quando este pode ser desenhado (em uma folha de papel, isto é, em um plano) de forma que suas arestas se interceptem apenas em vértices No século XVIII Leonhard Euler - Matemático suíço (pronuncia-se “óiler”) - observou que um grafo simples, conexo e planar (sem interseção de arestas) divide o plano em um número de regiões totalmente fechadas e uma região infinita exterior. Daí observou uma relação entre o número de n de vértices, o número a de arestas e o número r de regiões. É a fórmula de Euler: n - a + r = 2 = 2

27 Tipos especiais de grafos
Redes Possuem 2 nós especiais: Fonte (source) - origem de arcos Destino (sink) - destino de arcos Florestas São grafos não-cíclicos e Não-direcionados. Árvores São grafos não-cíclicos, Não-direcionados e conectados. 1 2 6 3 5 4 6 3 1 2 5 4 1 2 5 4

28 Tipos especiais de grafos
Grafos com valores Quando os nós e/ou os arcos possuem valores. Rio Vit Spa Sal Rec Nat 1301 1325 1210 890 580 1710 2680 450 Distâncias entre localidades. R3 R4 OUT IN R2 R1 1 I6 I5 I8 3 I2 2 I1 I7 I9 4 I4 Fluxo de instruções em um microprocessador.

29 Grafos Formas de Representação
Estrutura de Dados Marco Antonio Montebello Júnior

30 Formas de representação
Existem basicamente duas formas para representar um grafo G = (N, A): Por intermédio de uma Lista de Adjacências É a mais utilizada, pois fornece uma representação mais compacta de grafos esparsos ( |A| << |N|2 ) Por intermédio de uma Matriz de Adjacências Utilizada quando o grafo é denso ( |A|  |N|2 ), ou quando é necessário descobrir rapidamente se existe um arco conectando dois nós pré-definidos.

31 Formas de representação Lista de adjacência
Lista de adjacências para um grafo G = (N, A) Consiste em um vetor de |N| listas encadeadas, uma para cada elemento de N. Para cada u  V , a lista de adjacências Adj[u] contém todos os nós v para os quais existe um arco (u, v)  A. Primeiro caso: Grafo Não-Direcionado 1 2 5 3 4 / 1 2 5 3 4 Implementação mista (vetor e lista ligada)

32 Formas de representação Lista de adjacência
Segundo caso: Grafo Direcionado 1 2 5 3 4 6 / 1 2 4 5 3 6 Implementação mista (vetor e lista ligada)

33 Formas de representação
Variável externa List V0 V1 V2 V3 A(0,1) A(0,2) 1 A(1,2) A(1,3) 3 2 A(3,0) A(3,1) A(3,2) Implementação somente com Listas Ligadas

34 Formas de representação
Vejamos uma representação muito interessante presente no livro texto. É utilizado nós de cabeçalho (nós de grafo) e nós de lista (lista de adjacência). Ver páginas 699, 700, 701 e 702. arcptr info nextnode Nó de cabecalho B D ndptr nextarc Nó de lista A E B C D A Grafo <A,B> <A,C> <A,D> <A,E> <D,B> <C,E> C E

35 Formas de representação
De forma geral os nós de cabeçalho e os de lista têm diferentes formatos, necessitando serem representados por duas estruturas distintas, ou seja, são tipos de nós diferentes Para facilitar o entendimento de uma possível implementação dinâmica, vamos supor que os nós de cabeçalho e de lista têm o mesmo formato struct nodetype { int info; struct nodetype *point; struct nodetype *next; }; struct nodetype *nodeptr;

36 Formas de representação Matriz de adjacência
Matriz de adjacências para um grafo G = (N, A) Assume-se que os nós são numerados da seguinte forma: 1, 2, 3, ..., |N|; A matriz de adjacências Adj para um grafo G = (N, A) possui dimensões |N| x |N| e elementos aij , de forma que: 1 se (i, j)  A ai,j = 0 caso contrário {

37 Formas de representação Matriz de adjacência
Primeiro caso: Grafo Não-Direcionado Para os grafos não-direcionados, os elementos da matriz são simétricos: Adj[i][j] = Adj[j][i]. Assim, com fins de economia de memória, pode-se armazenar apenas a matriz triangular superior ou inferior. 1 2 5 3 4 Tipos Adj = vetor[5] [5] de inteiros

38 Formas de representação Matriz de adjacência
Segundo caso: Grafo Direcionado Na matriz de adjacências para grafos direcionados, as linhas representam os nós origem e as colunas, os nós destino. 1 2 3 4 5 6 1 2 4 5 3 6 1 1 1 2 1 3 1 1 4 1 5 1 6 1 Tipos Adj = vetor[6] [6] de inteiros

39 Formas de representação Matriz de incidência
Outra abordagem: Matriz de Incidência Primeiro caso: Grafo Não-Direcionado G = (N, A) A matriz de incidência Inc para um grafo G = (N, A) possui dimensões |N| x |A| e elementos bij , de forma que: 1, se o arco j é incidente em i (j incide no nó i) bij = 0, caso contrário { 1 2 3 4 5 6 7 1 1 1 1 1 2 5 3 4 5 2 1 1 1 1 3 3 1 1 2 4 4 1 1 1 7 6 5 1 1 1

40 Formas de representação Matriz de incidência
Segundo caso: Grafo Direcionado G = (N, A) A matriz de incidência Inc para um grafo G = (N, A) possui dimensões |N| x |A| e elementos bij , de forma que: -1, se o arco j é incidente de i (j sai do nó i) bij = 1, se o arco j é incidente para i (j chega no nó i) 0, se o nó i não participa do arco { 1 2 5 3 4 -1 6 7 8 1 2 4 5 3 6 Tipos Inc = vetor[6][8] de inteiros

41 Formas de representação
A matriz de adjacência é freqüentemente inadequada porque requer o conhecimento prévio do número de nós Mesmo que a matriz de adjacência seja esparsa, deve-se reservar espaço para todo possível arco entre dois nós. Se existir n nós, precisará de n2 alocações Lista ligada é interessante porque só aloca o espaço necessário, porém, a implementação é mais complexa porque não dá para prever o número de nós adjacentes a determinado nó, ou seja, o número de ponteiros é bastante variável Na representação de matriz está implícito a possibilidade de percorrer uma linha ou coluna Percorrer em linha é identificar todos os arcos emanando de determinado nó. Neste caso, a implementação ligada é mais eficiente Em coluna é identificar todos os arcos que terminam em determinado nó: vantagem para a matriz, já que não existe um método simples correspondente na implementação ligada

42 Grafos Métodos de Passeio
Estrutura de Dados Marco Antonio Montebello Júnior

43 Métodos de passeio O objetivo dos métodos de passeio é explorar um grafo, de forma sistemática, obtendo informações sobre sua estrutura. Uma questão interessante diz respeito ao ponto de início do passeio, pois não existe um referencial a ser considerado, como por exemplo, a raiz nas árvores. Outra questão é relacionada às repetições nas visitas. Como garantir que um nó já foi visitado? Solução: colocar marcas nos nós já visitados. A seqüência de nós visitados depende da escolha dos nós adjacentes. Para um determinado grafo podem existir diversas seqüências de passeio.

44 Métodos de passeio Existem dois algoritmos principais para passeio em um grafo G = (N, A): Largura (Breadth-first search) Todos os nós localizados a uma distância k de um nó s, escolhido arbitrariamente, são percorridos antes dos nós localizados a uma distância k+1 de s. Profundidade (Depth-first search) Para um nó s, escolhido arbitrariamente, um de seus nós adjacentes é visitado, e para cada nó visitado, um dos nós adjacente a ele é visitado, até que se encontre um nó sem adjacentes. Nesse instante ocorre um “retorno” com o objetivo de visitar os nós restantes adjacentes à s.

45 Métodos de passeio Largura (Breadth-first search)
Um nó, escolhido arbitrariamente, é visitado, marcado e colocado em uma fila Q; Enquanto a fila Q não estiver vazia: Retira-se um nó N da fila Q; Para cada nó M (não marcado) adjacente à N: Visita-se o nó M; Coloca-se o nó M na fila Q; Marca-se o nó M.

46 Métodos de passeio Rotina Largura (O: nó) Variáveis N, M : nó Q : Fila
Início Visita (O) Marcanó (O) InsereFila (Q, O) Enquanto Não FilaVazia (Q) Faça N = RetiraFila (Q) Para Cada M adjacente a N Faça Se Não nóMarcado (M) Então Visita (M) InsereFila (Q, M) Marcanó (M) Fim-Se Fim-Para Fim-Enquanto Fim

47 Métodos de passeio Profundidade (Depth-first search)
Um nó, escolhido arbitrariamente, é visitado, marcado e colocado em uma pilha S; Enquanto a pilha S não estiver vazia: Retira-se um nó N da pilha S; Para cada nó M (não marcado) adjacente à N: Visita-se o nó M; Coloca-se o nó N na pilha S; Marca-se o nó M; Faz-se N  M

48 Métodos de passeio Rotina Profundidade (O: nó) Variáveis N, M : nó;
S : Pilha Início Visita (O) Marcanó (O) Push (S, O) Enquanto Não PilhaVazia (S) Faça N = Pop (S) Para Cada M adjacente a N Faça Se Não nóMarcado (M) Então Visita (M) Push (S, N) Marcanó (M) N  M Fim-Se Fim-Para Fim-Enquanto Fim.

49 Métodos de passeio Versão recursiva
Rotina ProfundidadeRec (N: nó) /*VERSÃO RECURSIVA*/ Variáveis M : nó Início Visita (N) Marcanó (N) Para Cada M adjacente a N Faça Se Não nóMarcado (M) Então ProfundidadeRec (M) Fim-Se Fim-Para Fim.

50 Marco Antonio Montebello Júnior marco.antonio@aes.edu.br
Grafos Aplicações Estrutura de Dados Marco Antonio Montebello Júnior

51 Aplicações Grafos com valores: Matriz de Adjacências
Atribuir à posição Adj[i][j], o valor do arco que sai do nó i e chega no nó j. Exemplo: 1 2 3 10 7 6 4 Matriz Adj 1 2 3 4 10 6 7

52 Aplicações Grafos com valores: Matriz de Incidência
Para um arco k, do nó i para o nó j, com valor V: Inc[i][k] = -V e Inc[j][k] = V Exemplo: 1 2 3 10 7 6 4 Matriz Inc 1 2 3 -4 -10 6 4 -6 10 -7 7 5 -2

53 Aplicações Grafos com valores: Lista de Adjacência
Adicionar um terceiro campo, do tipo adequado, a cada nó da lista Exemplo: 1 2 3 10 7 6 4 1 2 3 4 6 / 10 7

54 Aplicações Caminhos Máximo / Mínimo:
Utilizando um grafo para representar estradas que unem cidades, sendo os nós as cidades e os arcos as distâncias entre as cidades, pergunta-se: Quais os caminhos (se existir algum) que ligam Spa à Rec? Existindo mais de um caminho, qual o mais curto? Rio Vit Spa Sal Rec Nat 40 7 5 10 30 15 <(Spa, Sal), (Sal, Nat), (Nat, Rec)> = 30 <(Spa, Rio), (Rio, Vit), (Vit, Rec)> = 45 <(Spa, Rio), (Rio, Nat), (Nat, Rec)> = 52 <(Spa, Rec)> = 40

55 Aplicações Caminhos Máximo / Mínimo:
No grafo abaixo, qual o caminho mais curto do nó 1 para os demais nós do grafo ? Quantos caminhos existem do nó 1 para o nó 2 ? Resposta: 3 caminhos 1 2 3 4 15 50 5 6 10 45 35 30 20 p/ o nó 2: <(1,3),(3,4),(4,2)> = 45 p/ o nó 3: <(1,3)> = 10 p/ o nó 4: <(1,3),(3,4)> = 25 p/ o nó 5: <(1,5)> = 45 p/ o nó 6: não há caminho


Carregar ppt "Grafos Definições Preliminares"

Apresentações semelhantes


Anúncios Google