Melhores momentos AULA 1

Documentos relacionados
Melhores momentos AULA 5

Representações de Grafos

AED Algoritmos e Estruturas de Dados LEEC /2007. Teoria de Grafos e Algoritmos em Grafos

GRAFOS Aula 03 Representações de Grafos Max Pereira

Melhores momentos AULA 14

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados LEE 2013/14. Objecto abstracto Dois tipos de entidades. Vértices representam

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados MEEC 2012/13. Objecto abstracto Dois tipos de entidades. Vértices representam

CAL ( ) MIEIC/FEUP Grafos: Introdução (Março, 2011)

Grafos - Representação

GRAFOS. Prof. André Backes. Como representar um conjunto de objetos e as suas relações?

Linguagem C: Ponteiros - Alocação Dinâmica

Estruturas de Dados Filas

Grafos - Aplicação. Implemente na linguagem C a função procurarcaminho(...).

Linguagem C: Listas Encadeadas

Caminhos em Grafos. Grafos - Caminho Simples (1) (Cliente para M. de Adj.) static int visited[maxv];

Teoria dos Grafos. Teoria dos Grafos. Profa. Sheila Morais de Almeida DAINF-UTFPR-PG. agosto

Doutorado em Ciência da Computação. Algoritmos e Grafos. Raimundo Macêdo LaSiD/DCC/UFBA

03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II

SCC122 - Estruturas de Dados. Lista Estática Seqüencial

Grafos Orientados (digrafos)

PAA-DCC-UFAM. Grafos. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

Lista Encadeada (Linked List)

Instituto de C. Linguagem C: Listas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

CAP4. ELEMENTOS DA TEORIA DE GRAFOS. Grafo [graph]. Estrutura que consiste num par ordenado de conjuntos, G ( V, E) , sendo:

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados LEE 2014/15. Algoritmos e Estruturas de Dados - C. Teoria de Grafos e Algoritmos em Grafos

INF 1010 Estruturas de Dados Avançadas

INF 1620 P1-10/04/02 Questão 1 Nome:

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Métodos Computacionais. Fila

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Filas Exemplo de Aplicação

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Matrizes Esparsas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

Módulo 10 Listas Encadeadas

Algoritmos e Estruturas de Dados I

DAINF - Departamento de Informática

Estruturas de Dados Aula 12: Outras Implementações de Listas 18/04/2011

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

Fontes Bibliográficas. Listas Circulares. Função Imprime

Definição e Conceitos Básicos

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

01 Grafos: parte 1 SCC0503 Algoritmos e Estruturas de Dados II

Volmir Eugênio Wilhelm Departamento de Engenharia de Produção UFPR 45

GABARITO EXERCÍCIOS ÁRVORES arv.h struct noarv { int info; struct noarv * esq; struct noarv * dir; }; typedef struct noarv NoArv;

Teoria dos Grafos. Aula 5 - Estruturas de Dados para Grafos. Profª. Alessandra Martins Coelho. março/2013

Curso de C. Memória Dinâmica 17/05/ :33 1

Teoria dos Grafos Aula 2

INF 1620 P3-25/11/05 Questão 1 Nome:

Listas e matrizes esparsas. SCC122 Estruturas de Dados

Métodos Computacionais. Árvores

Estruturas de Dados. Módulo 6 Matrizes. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 10: Introdução aos Grafos

MC-102 Algoritmos e Programação de Computadores

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Prova - 23a de junho de 2008

Alocação Dinâmica em C

Programação de Computadores II

Professora Jeane Melo

Instituto Superior Técnico Introdução aos Algoritmos e Estruturas de Dados

Linguagem C: Árvores Binarias

Algoritmos e Estruturas de Dados

Alocação dinâmica de Memória

Algoritmo de Dijkstra

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

Conceitos Básicos da Teoria de Grafos

Doutorado em Ciência da Computação. Algoritmos e Grafos. Raimundo Macêdo LaSiD/DCC/UFBA

/*(Atenção: Em se tratando de uma lista estaticamente alocada, temos utilizado a estratégia de passa o tamanho máximo do vetor.)*/

Lista de Exercícios de CES-11 CTA - ITA - IEC

BCC202 - Estrutura de Dados I

max1: 20,max2:+ max1:15, max2:20 max1:30,max2:32,max3:35 max1:40,max2:+

Heap Sort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

Métodos Computacionais. Vetores e Matrizes Dinâmicas

Estruturas de Dados. Módulo 12 - Filas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Árvore Binária de Busca. Prof. César Melo

1. Para cada pergunta selecione uma opção. Resposta correta +2, incorreta -1. [12 pontos]

Computação I (MAB120) DCC/UFRJ

Listas (Parte 2) Túlio Toffolo BCC202 Aula 10 Algoritmos e Estruturas de Dados I

INF 1620 P1-04/10/03 Questão 1 Nome:

AULA 14 ESTRUTURA DE DADOS

Prova Final de Linguagens de Programação - DCC024B - Sistemas de Informação

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 4

Sistema Rodoviário Tabajara

Exercícios Capítulos 5 e 6

INF 1007 Programação II

Alocação Dinâmica. Túlio Toffolo BCC202 Aula 02 Algoritmos e Estruturas de Dados I

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

Métodos Computacionais. Listas Encadeadas

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Análise e Síntese de Algoritmos. Algoritmos em Grafos CLRS, Cap. 22

Árvores Binárias de Busca

Carlos Eduardo Batista. Centro de Informática - UFPB

Ciclos hamiltonianos e o problema do caixeiro viajante

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

1 Exercícios com ponteiros

Universidade Federal do Ma Curso de Ciência da Computação

Estruturas de Dados Aula 10: Listas (parte 2) 19/04/2011

Transcrição:

Melhores momentos AULA

Digrafos digrafo = de vértices e conjunto de arcos arco = par ordenado de vértices Exemplo: v e w são vértices e v-w é um arco b d a f c e

Especicação Digrafos podem ser especicados através de sua lista de arcos Exemplo: a b c d e f d-f b-d a-c b-e e-f a-b

Grafos grafo = digrafo simétrico aresta = par de arcos anti-paralelos Exemplo: b-a e a-b formam uma aresta b d a f c e

Grafos Um grafo é um digrafo simétrico Exemplo: representação usual b d a f c e

Estrutura de dados Vértices são representados por objetos do tipo Vertex. Arcos sao representados por por objetos do tipo Arc #dene Vertex int typedef struct { Vertex v; } Arc; Vertex w;

Grafos no computador Usaremos duas representações clássicas: matriz de adjacência (agora) vetor de listas de adjacência (próximas aulas)

Matriz de adjacência de digrafo Matriz de adjacência de um digrafo tem linhas e colunas indexadas por vértices: adj[v][w] = se v-w é um arco adj[v][w] = em caso contrário Exemplo: 3 3 3 Consumo de espaço: Θ(V ) fácil de implementar

Estrutura digraph V = número de vértices A = número de arcos adj = ponteiro para a matriz de adjacência struct digraph { int V; int A; int **adj; }; typedef struct digraph *Digraph;

Digrafo Digraph G

G 3 5 Estruturas de dados 3 5 6 V A adj

MATRIXint Aloca uma matriz com linhas..r- e colunas..c-, cada elemento da matriz recebe valor val int **MATRIXint (int r, int c, int val) { Vertex i, j; int **m = malloc(r * sizeof(int *)); for (i = ; i < r; i++) 3 m[i] = malloc(c * sizeof(int)); for (i = ; i < r; i++) 5 for (j = ; j < c; j++) 6 m[i][j] = val; 7 return m; }

Consumo de tempo linha número de execuções da linha = = Θ() = r + = Θ(r) 3 = r = Θ(r) = r + = Θ(r) 5 = r (c + ) = Θ(r c) 6 = r c = Θ(r c) total Θ() + 3 Θ(r) + Θ(r c) = Θ(r c)

Conclusão Supondo que o consumo de tempo da função malloc é constante O consumo de tempo da função MATRIXint é Θ(r c).

DIGRAPHinit Devolve (o endereço de) um novo digrafo com vértices,..,v- e nenhum arco. Digraph DIGRAPHinit (int V) { Digraph G = malloc(sizeof *G); G>V = V; G>A = ; 3 G>adj = MATRIXint(V,V,); return G; }

AULA

Funções básicas (continuação) S 7.3

DIGRAPHinsertA Insere um arco v-w no digrafo G. Se v == w ou o digrafo já tem arco v-w, não faz nada void DIGRAPHinsertA(Digraph G,Vertex v,vertex w)

DIGRAPHinsertA Insere um arco v-w no digrafo G. Se v == w ou o digrafo já tem arco v-w, não faz nada void DIGRAPHinsertA(Digraph G,Vertex v,vertex w) { } if (v!= w && G>adj[v][w] == ) { } G>adj[v][w] = ; G>A++;

DIGRAPHremoveA Remove do digrafo G o arco v-w Se não existe tal arco, a função nada faz. void DIGRAPHremoveA(Digraph G,Vertex v,vertex w)

DIGRAPHremoveA Remove do digrafo G o arco v-w Se não existe tal arco, a função nada faz. void DIGRAPHremoveA(Digraph G,Vertex v,vertex w) { } if (G>adj[v][w] == ) { } G>adj[v][w] = ; G>A;

DIGRAPHshow : 3 : : 3: 5 : 5 5:

DIGRAPHshow Para cada vértice v de G, imprime, em uma linha, os vértices adjacentes a v void DIGRAPHshow (Digraph G) {

DIGRAPHshow Para cada vértice v de G, imprime, em uma linha, os vértices adjacentes a v void DIGRAPHshow (Digraph G) { Vertex v, w; for (v = ; v < G>V; v++) { printf("%d:", v); 3 for (w = ; w < G>V; w++) if (G>adj[v][w] == ) 5 printf("%d", w); 6 printf("\n"); } }

Consumo de tempo linha número de execuções da linha = V + = Θ(V) = V = Θ(V) 3 = V (V + ) = Θ(V ) = V V = Θ(V ) 5 V V = O(V ) 6 = V = Θ(V) total 3 Θ(V) + O(V ) + 3 Θ(V ) = Θ(V )

Conclusão O consumo de tempo da função DIGRAPHShow é Θ(V ).

Funções básicas para grafos

Funções básicas para grafos #dene GRAPHinit DIGRAPHinit #dene GRAPHshow DIGRAPHshow Função que insere uma aresta v-w no grafo G void GRAPHinsertE (Graph G, Vertex v, Vertex w)

Funções básicas para grafos #dene GRAPHinit DIGRAPHinit #dene GRAPHshow DIGRAPHshow Função que insere uma aresta v-w no grafo G void GRAPHinsertE (Graph G, Vertex v, Vertex w) { } DIGRAPHinsertA(G, v, w); DIGRAPHinsertA(G, w, v); Exercício. Escrever a função GRAPHremoveE

Caminhos em digrafos S 7.

Caminhos Um caminho num digrafo é qualquer seqüência da forma v v v...v k v p, onde v k -v k é um arco para k =,..., p. Exemplo: ---3-5--5 é um caminho com origem é término 5 3 5

Caminhos simples Um caminho é simples se não tem vértices repetidos Exemplo: ---3-5 é um caminho simples de a 5 3 5

Procurando um caminho Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t Exemplo: para s = e t = a resposta é SIM

Procurando um caminho Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t Exemplo: para s = e t = a resposta é SIM 3 5

Procurando um caminho Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t Exemplo: para s = 5 e t = a resposta é NÃO

DIGRAPHpath Recebe um digrafo G e vértices s e t e devolve se existe um caminho de s a t ou devolve em caso contrário Supõe que o digrafo tem no máximo maxv vértices. int DIGRAPHpath (Digraph G, Vertex s, Vertex t)

Caminhos em digrafos S 7.

Caminhos Um caminho num digrafo é qualquer seqüência da forma v v v...v k v p, onde v k -v k é um arco para k =,..., p. Exemplo: ---3-5--5 é um caminho com origem é término 5 3 5

Caminhos simples Um caminho é simples se não tem vértices repetidos Exemplo: ---3-5 é um caminho simples de a 5 3 5

Procurando um caminho Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t Exemplo: para s = e t = a resposta é SIM

Procurando um caminho Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t Exemplo: para s = e t = a resposta é SIM 3 5

Procurando um caminho Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t Exemplo: para s = 5 e t = a resposta é NÃO

DIGRAPHpath Recebe um digrafo G e vértices s e t e devolve se existe um caminho de s a t ou devolve em caso contrário Supõe que o digrafo tem no máximo maxv vértices. int DIGRAPHpath (Digraph G, Vertex s, Vertex t)

DIGRAPHpath(G,,)

DIGRAPHpath(G,,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,5)

pathr(g,5)

pathr(g,5)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,3)

pathr(g,3)

pathr(g,3)

pathr(g,3)

pathr(g,)

pathr(g,)

pathr(g,)

DIGRAPHpath(G,,)

DIGRAPHpath(G,,3)

DIGRAPHpath(G,,3)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,)

pathr(g,5)

pathr(g,5)

pathr(g,5)

pathr(g,)

pathr(g,)

DIGRAPHpath(G,,3)

DIGRAPHpath static int lbl[maxv]; int DIGRAPHpath (Digraph G, Vertex s, Vertex t) { Vertex v; for (v = ; v < G>V; v++) lbl[v] = ; 3 pathr(g,s); if (lbl[t] == ) return ; 5 else return ; }

pathr Visita todos os vértices que podem ser atingidos a partir de v void pathr (Digraph G, Vertex v)

pathr Visita todos os vértices que podem ser atingidos a partir de v void pathr (Digraph G, Vertex v) { Vertex w; lbl[v] = ; for (w = ; w < G>V; w++) 3 if (G>adj[v][w] == ) if (lbl[w] == ) 5 pathr(g, w); }

DIGRAPHpath(G,,) - pathr(g,) - pathr(g,) - pathr(g,) - -5 pathr(g,5) 5- -3 pathr(g,3) 3-3-5 - existe caminho

DIGRAPHpath(G,,3) - pathr(g,) - pathr(g,) - -5 pathr(g,5) 5- nao existe caminho

Consumo de tempo Qual é o consumo de tempo da função DIGRAPHpath?

Consumo de tempo Qual é o consumo de tempo da função DIGRAPHpath? linha número de execuções da linha = V + = Θ(V) = V = Θ(V) 3 = =???? = = Θ() 5 = = Θ() total = Θ() + Θ(V) +??? = Θ(V) +????

Conclusão O consumo de tempo da função DIGRAPHpath é Θ(V) mais o consumo de tempo da função PathR.

Consumo de tempo Qual é o consumo de tempo da função PathR?

Consumo de tempo Qual é o consumo de tempo da função PathR? linha número de execuções da linha V = O(V) V (V + ) = O(V ) 3 V V = O(V ) V V = O(V ) 5 V = O(V) total = O(V) + 3 O(V ) = O(V )

Conclusão O consumo de tempo da função PathR para matriz de adjacência é O(V ). O consumo de tempo da função DIGRAPHpath para matriz de adjacência é O(V ).