Algoritmos e Estruturas de Dados LEE 2013/14. Teoria de Grafos e Algoritmos em Grafos 2ª Parte

Tamanho: px
Começar a partir da página:

Download "Algoritmos e Estruturas de Dados LEE 2013/14. Teoria de Grafos e Algoritmos em Grafos 2ª Parte"

Transcrição

1 Algoritmos e Estruturas de Dados LEE / Teoria de rafos e Algoritmos em rafos ª Parte rafos DFS Notar que a estratégia de procura de Tremaux, mais não é que procura em profundidade primeiro. O algoritmo procede sempre abrindo uma porta e afastandose da origem, até que chega a um ponto em que não pode abrir mais portas, tendo então que recuar até ao último ponto onde deixou, pelo menos, uma porta por abrir. Se ao recuar nunca encontrar portas por abrir, acabará regressando ao ponto de partida, dado que o fio que desenrolou no caminho descendente, lhe permite esse regresso.

2 rafos Implementação de DFS (matriz de adjacências) #define dfsr search void dfsr(raph *, Edge *e) int t, w = e->w; pre[w] = cnt++; for (t = ; t < ->V; t++) if (->adj[w][t]!= ) if (pre[t] == -) dfsr(, EDE(w, t)); Função a ser chamada a partir de uma função de procura genérica ( ADT style ) que inicializa o contador cnt a zero e todas as entradas da tabela indexada pelos vértices pre a. rafos Descrição da Implementação A tabela pre está associada com as lâmpadas. Se pre[i] valer, significa que a luz está apagada para esse vértice. Quando se encontra uma aresta para um vértice em que pre não vale, um vértice já visitado, essa aresta não é seguida. Finalmente, a própria estrutura da recursão estabelece o mecanismo equivalente a desenrolar o novelo de fio. Quando um vértice não possui mais vértices adjacentes com pre igual a, a chamada recursiva termina, devolvendo o controlo de execução para o vértice que o antecedeu na recursão. O retorno da recursão é equivalente a voltar a enrolar o fio.

3 rafos Implementação de DFS (lista de adjacências) #define dfsr search void dfsr(raph *, Edge *e) int link t, t; w int = e->w; w = e->w; pre[w] = cnt++; for (t = ; ->adj[w]; t < ->V; t t++)!= NULL; t = t->next) if (->adj[w][t] (pre[t->v] == -)!= ) if (pre[t] == -) dfsr(, dfsr(, EDE(w, EDE(w, t->v)); t)); rafos Comparação Na implementação por matriz de adjacências, para cada vértice examinam-se todos as arestas que lhe são incidentes por ordem de numeração dos vértices de saída. Avança sempre pelo primeiro (de índex mais baixo) que não tenha sido visitado e lhe é adjacente. Na implementação por listas de adjacências, são imediatamente considerados os vértices adjacentes e a ordem de inspecção pode não coincidir com a numeração. Avança sempre pelo primeiro da lista de adjacências que não tenha sido ainda visitado.

4 rafos ADT para procura static int cnt, pre[maxv]; void RAPHsearch(raph *) int v; cnt = ; for (v = ; v < ->V; v++) pre[v] = -; for (v = ; v < ->V; v++) if (pre[v] == -) search(, EDE(v, v)); RAPHsearch é uma função ADT para procura genérica em grafos, realizando os seguintes passos: Encontra um vértice não marcado. Visita (e marca como visitados) todos os vértices no sub-grafo ligado a que o primeiro vértice pertence. A função de procura não é especificada a este nível de abstracção. rafos Propriedades da procura Propriedade Uma função de procura em grafos marca cada vértice do grafo se e só se a função de procura que usa marcar cada vértice do sub-grafo ligado que contiver o vértice inicial. Demonstração trivial por indução no número de sub-grafos ligados máximos. Propriedade A DFS num grafo representado por matriz de adjacências requer um tempo proporcional a V. Cada entrada da matriz de adjacências é inspeccionada uma só vez. Propriedade A DFS num grafo representado por listas de adjacências requer um tempo proporcional a V + E. Inicialização proporcional a V, após o que se fazem V chamadas recursivas e cada elemento das listas de adjacências é inspeccionado uma só vez. 8

5 rafos Tabelas indexadas por vértices Muitas funções sobre grafos requerem a existência, o uso ou construção de tabelas indexadas pelos vértices dos grafos que processam. Tais tabelas são incluídas em vários níveis de abstracção Como variáveis globais ex: pre em DFS. Na representação do próprio grafo ex: grau de um vértice Como parâmetros passados, fornecidos pelos próprios clientes ex: ao calcular alguma tabela que seja função dos vértices. A inicialização destas tabelas é tipicamente feita colocando todas as entradas a, por forma a poderem paralelamente ser usadas com a mesma utilidade da tabela pre, atrás apresentada. 9 rafos - BFS Se o objectivo for encontrar o caminho mais curto entre um par de vértices, caso exista, a DFS não é muito útil. A DFS poderá encontrar um caminho, mas não dá garantias de que seja o mais curto, a menos que se determinem todos explicitamente para posterior avaliação. A procura em largura primeiro ( BFS Breadth First Search ) é baseada exactamente nesse objectivo. Quando temos mais que uma aresta para percorrer, escolhemos uma e guardamos as outras para explorar mais tarde. Em DFS usamos uma pilha (LIFO) avança para longe da entrada enquanto puder. Em BFS usamos um fila (FIFO) só avança para longe da entrada depois de ter investigado todos corredores que dela saem.

6 rafos Implementação de BFS (matriz de adjacências) # define bfs search void bfs(raph *, Edge *e) int v; QUEUEput(e); while (!QUEUEempty()) if (pre[(e = QUEUEget())->w] == -) pre[e->w] = cnt++; st[e->w] = e->v; for (v = ; v < ->V; v++) if (->adj[e->w][v] == ) if (pre[v] == -) QUEUEput(EDE(e->w, v)); Cria uma fila (FIFO) com todas as arestas incidentes de vértices visitados e de vértices ainda não visitados. Toma a primeira aresta da fila até encontrar uma que aponte para um vértice não visitado. Visita esse vértice, colocando na fila todas as arestas que apontam para vértices não visitados. Tabela st guarda informação sobre o vértice antecessor. rafos Exemplo de execução (BFS)

7 rafos Exemplo de execução (BFS) rafos Exemplo de execução (BFS)

8 rafos Exemplo de execução (BFS) rafos Exemplo de execução (BFS)

9 rafos Exemplo de execução (BFS) rafos Exemplo de execução (BFS) 8

10 rafos Exemplo de execução (BFS) 9 rafos Exemplo de execução (BFS) 8

11 rafos Propriedades da BFS () Propriedade Durante a BFS, os vértices entram e saem da fila FIFO por ordem crescente da sua distância ao vértice inicial. Demonstração Verifica-se uma propriedade mais forte: a fila consiste sempre de zero ou mais vértices distando k passos do vértice inicial, seguidos de zero ou mais vértices distando k+ passos dos vértice inicial, para algum valor de k. É fácil provar esta propriedade por indução. 8 rafos Propriedades da BFS () Propriedade A BFS visita todos os vértices e arestas de um grafo em tempo proporcional a V para a representação por matriz de adjacências e proporcional a V+E para a representação por listas de adjacências. Demonstração: Tal como em DFS, a implementação inspecciona completamente a linha da matriz de adjacências ou a lista de pares adjacentes associada com cada vértice visitado. Basta mostrar que todos os vértices são visitados. Todos os vértices que podem ser alcançados a partir do início estão (i) Na árvore criada pela procura, (ii) na fila, ou (iii) são alcançáveis a partir dos vértices que estão na fila. Todos os vértices se deslocam de (iii) para (ii) e depois para (i), sendo que em cada iteração do ciclo while (i) aumenta a sua cardinalidade. 8

12 rafos Implementação melhorada de BFS (matriz de adjacências) void bfs(raph *, Edge *e) int v, w; QUEUEput(e); pre[e->w] = cnt++; while (!QUEUEempty()) e = QUEUEget(); w = e->w; st[w] = e->v; for (v = ; v < ->V; v++) if ((->adj[w][v] == ) && (pre[v] == -)) QUEUEput(EDE(w, v)); pre[v] = cnt++; uarda apenas os vértices por visitar 8 rafos Problemas que BFS resolve Caminho mais curto entre v e w Tomar v como o vértice inicial e aplicar BFS até que pre[w] deixe de ser. Caminhos mais curtos a partir de um vértice fonte Tomar o vértice fonte como inicial e executar a BFS até ao fim. Todos os caminhos mais curtos Como a BFS permite encontrar o caminho mais curto de um vértice inicial para todos os outros, basta aplicar BFS para cada um dos vértices do grafo dado como ponto de partida. A complexidade desta solução é cúbica no número de vértices para representação por matrizes de adjacências. 8

13 rafos Procura generalizada () Tanto a DFS como a BFS são casos particulares de procura generalizada em grafos. A implementação da BFS que se apresentou, introduz a pista essencial de resolução de qualquer outro mecanismo de procura. Isto é, tudo depende da forma como se inserem novos vértices na fila, assumindo que se retira sempre o vértice que encabeça a fila. Substitua-se o conceito de fila pelo conceito de franja, ou fronteira. Todos os vértices que estão na franja são os não visitados, candidatos à próxima visita. 8 rafos Procura generalizada (S) () Assim sendo, a estratégia genérica de procura em grafos é a seguinte: Tomar um qualquer vértice como inicial e criar a franja colocando lá esse vértice. Enquanto a franja não estiver vazia Mover ao longo de uma aresta a partir da franja. Se o vértice a que se chega não tiver sido visitado, visitá-lo e colocar na franja todos os vértices não visitados que lhe são adjacentes. Esta estratégia garante que todos os vértices de um grafo ligado serão visitados. Quando usamos uma pilha para modelar a franja temos DFS. Quando usamos uma fila, temos BFS. 8

14 rafos Implementação de procura generalizada (lista de adjacências) #define pfs search void pfs(raph *, Edge *e) link t; int v, w; Qput(e); pre[e->w] = cnt++; while (!Qempty()) e = Qget(); w = e->w; st[w] = e->v; for (t = ->adj[w]; t!= NULL; t = t->next) if (pre[v = t->v] == -) Qput(EDE(w, v)); pre[v] = cnt++; else if (st[v] == -) Qupdate(EDE(w, v)); 8 rafos Propriedade da S Propriedade Procura generalizada em grafos visita todos os vértices e arestas de um grafo num tempo proporcional a V para matrizes de adjacências e proporcional a V+E para listas de adjacências; + mais, no pior caso, o tempo necessário para V inserções, V remoções e E actualizações numa fila generalizada de tamanho V. Demonstração A primeira parte não depende da implementação da fila generalizada, pelo que se aplica trivialmente. O tempo extra explicitado decorre naturalmente da implementação de uma fila generalizada. 88

15 rafos Síntese da aula Procura em grafos Analogia com a exploração de labirintos; Estratégia de Tremaux Procura em profundidade - DFS Exemplo de execução; Implementação para matrizes de adjacências e por listas de adjacências; Comparação; Propriedades Procura em largura BFS Implementação por matrizes de adjacências; Exemplo de execução; Propriedades; Implementação alternativa para matrizes de adjacências Procura generalizada em grafos Descrição; Implementação; Propriedades 89 rafos Ponderados rafos em que as arestas têm pesos Problemas simples em grafos ponderado com interesse prático: Ligar todos os vértices com o menor custo Obtenção do caminho de menor custo entre vértices (extensível para dígrafos) 9

16 rafos Árvores mínimas de suporte Definição Uma árvore mínima de suporte (MST) de um grafo ponderado é o conjunto de arestas ligando todos os vértices, tais que a soma dos pesos das arestas é, pelo menos, tão baixa quanto a soma dos pesos de qualquer outro conjunto de arestas ligando todos os vértices. Deverá ser evidente pela definição que estamos apenas interessados em conjuntos de arestas que constituam uma árvore de suporte. Como se mostra que a definição assim o estabelece? 9 rafos Representação de grafos ponderados () A representação dos pesos associados às arestas em grafos ponderados pode ser feita por: A matriz de adjacências deixa de ser booleana, para passar a conter o valor associado às arestas requer sentinela para vértices não adjacentes. Cada elemento da lista de adjacências passa a conter um campo adicional com o peso da aresta, para além do campo identificador do vértice. No caso da representação das arestas ter-se-á que adicionar um campo para o peso. typedef struct int v, int w, double wt; Edge; Edge EDE(int, int, double); Estas definições são incluídas no ficheiro RAPH.h anteriormente introduzido. 9

17 rafos - Implementação de ADT (matriz de adjacências) #include <stdlib.h> #include RAPH.h rafos Ponderados struct graph int V; int E; double **adj;; raph RAPHinit(int V) raph * = malloc(sizeof (graph *)); ->V = V; ->E = ; ->adj = MATRIXdouble(V, V, maxwt); return ; void RAPHinsertE(raph *, Edge *e) if (->adj[e->v][e->w] == maxwt) ->E++; ->adj[e->v][e->w] = e->wt; ->adj[e->w][e->v] = e->wt; 9 rafos Propriedades das MST () Propriedade Dada uma divisão de vértices de um grafo em dois conjuntos, qualquer árvore mínima de suporte (MST) desse grafo contém uma aresta de menor peso que liga um vértice de um dos conjuntos a algum dos vértices do outro. Demonstração Por redução ao absurdo. Suponha-se que não há ou que não é de menor peso. Se não existir, não é uma árvore de suporte. Se não for de menor peso, então seja s a aresta de menor peso que liga vértices dos dois conjuntos. Esta aresta não pertence à MST. Adicione-se a aresta s. O grafo obtido possui agora um ciclo e esse ciclo contém também a aresta t que liga os dois conjuntos. Retirando a aresta t obtém-se uma MST de menor peso. Não é? 9

18 rafos Exemplo () 8 8 Aresta mais curta ligando os vértices amarelos aos verdes. 9 rafos Propriedades das MST () Propriedade Dado um grafo, considere-se o grafo que se obtém adicionando uma aresta e a. Adicionar e à MST de e retirar a maior aresta do ciclo assim criado, gera a MST de. Demonstração: Se e é maior que todos as outras arestas do ciclo, não pode pertencer à MST de (ver propriedade anterior): retirando e de tal MST partiria o grafo em dois e e não seria a mais curta aresta entre essas duas partes, porque alguma outra aresta do ciclo faz essa ligação e possui menor peso. Caso contrário, seja t a maior aresta do ciclo criado com a adição de e. Retirando t à MST original gera duas partes em que todas as restantes arestas são menores que t. Logo, a menor aresta que liga essas duas partes é a aresta e. 9

19 rafos Exemplo () Árvore Mínima de Suporte Nova aresta 8 8 Ciclo Maior aresta do ciclo As arestas que não pertencem à árvore mínima de suporte são as de maior peso em algum ciclo do grafo original. 9 rafos Síntese da aula Procura em profundidade - DFS Exemplo de execução; Implementação para matrizes de adjacências e por listas de adjacências; Comparação; Propriedades Procura em largura BFS Implementação por matrizes de adjacências; Exemplo de execução; Propriedades; Implementação alternativa para matrizes de adjacências Procura generalizada em grafos Descrição; Implementação; Propriedades Árvores de suporte mínimas MST Representação e implementação de ADT para grafos ponderados; Propriedades das MST s exemplos 98

20 rafos Uma solução para a MST Ideia Construir a árvore mínima de suporte adicionando arestas, tais que cada aresta adicionada é a de menor peso de todas as que ligam um vértice que já está na árvore a um outro que ainda não esteja. Este método é conhecido como o Algoritmo de Prim. Propriedade O algoritmo de Prim calcula correctamente a MST. Demonstração Aplicar a Propriedade, usando os vértices já na árvore parcial como o primeiro conjunto e os que não pertencem a essa árvore como o segundo conjunto. 99 rafos Outra solução para a MST Ideia Construir a árvore mínima de suporte adicionando arestas por ordem crescente do seu valor, desde que a nova aresta não forme um ciclo, parando assim que se tiverem adicionado V- arestas. Este método é conhecido com o Algoritmo de Kruskal. Propriedade O algoritmo de Kruskal calcula correctamente a MST. Demonstração (esboço) Mostra-se por indução que o método constrói uma floresta de sub- MST s. Sempre que se adiciona uma aresta que feche um ciclo, só pode ser a maior desse ciclo Propriedade. Caso contrário, a aresta adicionada liga duas árvores e é a menor a fazer essa ligação Propriedade.

21 rafos Outra mais... Ideia Começar por ligar cada vértice ao seu vizinho mais próximo, criando, no máximo, V/ árvores. Depois, ligar cada árvore à outra árvore que lhe estiver mais próxima. Etc. Este método é conhecido como o Algoritmo de Boruvka. Propriedade O algoritmo de Boruvka calcula correctamente a MST. Demonstração: Cada aresta escolhida é a mais pequena que liga dois conjuntos disjuntos Propriedade. rafos Alg. de Prim () (Implementação) É o algoritmo mais simples de implementar e é a escolha acertada para grafos densos. Constrói-se a árvore adicionando o vértice que estiver mais próximo da árvore já construída. A definição do método aponta para uma implementação de força bruta, que não é aconselhável para que seja eficiente. Através da definição de uma estrutura de dados complementar adequada é possível evitar cálculos excessivos. Precisamos Indicação do vértice pai, para cada vértice já na árvore. Para cada vértice fora da árvore, indicação de qual o vértice na árvore que lhe está mais próximo. Para cada vértice fora da árvore, qual a distância ao vértice da árvore mais próximo.

22 rafos Alg. de Prim () (Implementação) A implementação mais simples daquele conjunto de dados é através de uma tabela indexada pelos vértices. Pode-se usar uma estrutura para representar toda a informação identificada acima. Vamos usar tabelas independentes para maior clareza e generalidade. Para determinar o próximo vértice a adicionar, inspeccionamse todos os vértices fora da árvore, usando cada um como um índice para a terceira tabela com o objectivo de determinar a sua distância à árvore e saber qual o mais próximo. Quando se adiciona um vértice, v, examina-se cada uma das suas arestas v-w, e se w não estiver na árvore actualiza-se a sua distância à árvore, caso v-w tenha um peso inferior à presente distância de w à árvore. rafos Alg. de Prim () (Implementação) static int fr[maxv]; #define P ->adj[v][w] void RAPHmstV(raph *, int st[], double val[]) int v, w, min; for (v = ; v < ->V; v++) st[v] = -; fr[v] = v; val[v] = maxwt; min = ; st[] = ; val[->v] = maxwt; for (v = ; min!= ->V; st[v = min] = fr[v]) for (w =, min = ->V; w < ->V; w++) if (st[w] == -) if (P < val[w]) val[w] = P; fr[w] = v; if (val[w] < val[min]) min = w; fr - frente (franja) provisória de cada nó st - aresta final na MST val - distância provisória do nó à MST min - nó à menor distância da MST

23 rafos Exemplo de execução () val[*] maxwt Ciclo for interior: v, st[] - min V st[] == - X já na árvore - adj[][] < val[] ü val[], fr[] val[] < val[min] ü min - adj[][] < val[] X não adjacentes - adj[][] < val[] ü val[], fr[] val[] < val[min] ü min -;;; não adjacentes v min, st[] fr[] rafos Exemplo de execução () Ciclo for interior: v min =, st[] fr[] - min V já na árvore - adj[][] < val[] X val[] < val[min] ü min - adj[][] < val[] ü val[], fr[] val[] < val[min] X - já na árvore - adj[][] < val[] ü val[], fr[] val[] < val[min] ü min -;; não adjacentes v min, st[] fr[]

24 rafos Exemplo de execução () rafos Árvore de procura (Alg. Prim) 8

25 rafos Árvore de procura (Alg. Prim) 9 rafos Árvore de procura (Alg. Prim)

26 rafos Árvore de procura (Alg. Prim) rafos Árvore de procura (Alg. Prim)

27 rafos Árvore de procura (Alg. Prim) rafos Árvore de procura (Alg. Prim)

28 rafos Árvore de procura (Alg. Prim) rafos Árvore de procura (Alg. Prim) Ordem de entrada do verticas na MST:,,,,,,,

29 rafos Exemplo com tabela Tomando o vértice como ponto de partida Legenda val/fr / / / / / / / rafos Exemplo com tabela Tomando o vértice como ponto de partida Legenda val/fr / / / / / / / / / / / / / 8

30 rafos Exemplo com tabela Tomando o vértice como ponto de partida Legenda val/fr / / / / / / / / / / / / / / / / / / 9 rafos Exemplo com tabela Tomando o vértice como ponto de partida Legenda val/fr / / / / / / / / / / / / / / / / / / / / / /

31 rafos Exemplo com tabela Tomando o vértice como ponto de partida Legenda val/fr / / / / / / / / / / / / / / / / / / / / / / / / / rafos Exemplo com tabela Tomando o vértice como ponto de partida Legenda val/fr / / / / / / / / / / / / / / / / / / / / / / / / / / /

32 rafos Exemplo com tabela Tomando o vértice como ponto de partida Legenda val/fr / / / / / / / / / / / / / / / / / / / / / / / / / / / / rafos Exemplo com tabela Tomando o vértice como ponto de partida Legenda val/fr / / / / / / / / / / / / / / / / / / / / / / / / / / / / Ordem de entrada do verticas na MST:,,,,,,,

33 rafos Alg. de Prim (Propriedade) Propriedade Com o algoritmo de Prim, pode-se determinar a MST de um grafo denso em tempo linear. Demonstração: A simples observação do código permite concluir que o tempo de execução é proporcional a V, pelo que é linear para grafos densos. Cada vez que se visita um vértice, uma passagem pelos vértices fora da árvore serve o objectivo duplo de actualizar a distância mínima de cada vértice à árvore e de determinar qual está mais próximo. i.e., qual o próximo a visitar. Descrição: Deslocar a aresta mais pequena da franja para a árvore. Visitar o vértice a que conduz e colocar na franja todas as arestas que dele saem para vértices não visitados, substituindo a aresta mais comprida quando duas arestas da franja apontam para o mesmo vértice. rafos Alg. de Kruskal () (Implementação) O algoritmo de Prim adiciona uma aresta de cada vez a uma única árvore em construção. O algoritmo de Kruskal também adiciona uma aresta de cada vez, mas possui várias pequenas árvores que se vão agregando à medida que a execução evolui. Tem início numa floresta de V árvores uma por vértice e termina quando apenas existe uma árvore a árvore mínima de suporte. Há que ordenar as arestas com um qualquer algoritmo de ordenação e posteriormente utilizar um dos algoritmos discutidos para o problema da conectividade.

34 rafos Alg. de Kruskal () (Implementação) void RAPHmstE(raph *, Edge mst[]) int i, k; Edge a[maxe]; int E = RAPHedges(a, ); sort(a,, E-); UFinit(->V); for (i =, k = ; i < E && k < ->V-; i++) if (!UFfind(a[i].v, a[i].w)) UFunion(a[i].v, a[i].w); mst[k++] = a[i];. Ordenação do vector de arestas, a.. Criação de V conjuntos com um vértice cada.. Se a menor aresta ainda não incluída não ligar dois pares que já estão ligados, incluila na árvore. rafos Exemplo de execução () Ordenação das arestas: <(,); (,); (,); (,); (,); (,); (,); (,); (,); (,); (,)> Partição inicial:,,,,,,, i ; k a[i].v = ; a[i].w =,,,,,,, mst[k] (,) k i a[i].v = ; a[i].w =,,,,,,, mst[k] (,) k 8

35 rafos Exemplo de execução () 9 rafos Alg. de Kruskal (Propriedade) Propriedade O algoritmo de Kruskal calcula a MST de um grafo num tempo proporcional a ElgE. Demonstração Esta propriedade é consequência do facto de o tempo de execução incluir uma ordenação de E arestas seguida de E operações procura e V- operações de união. PORQUÊ? Se utilizarmos os melhores algoritmos para cada uma das operações identificadas, tais como mergesort para a ordenação e procura-união ponderada com compressão de caminho para a conectividade, o custo da ordenação domina.

36 rafos Alg. de Boruvka () (Implementação) Tal como o algoritmo de Kruskal, este algoritmo constrói a MST adicionando arestas a uma floresta de sub-árvores, todas elas MST s. A diferença reside no facto de a adição se processar em fases, em que para cada fase se adicionam várias arestas. Em cada fase determinam-se as arestas mais curtas que ligam cada sub-árvore com outra. Em seguida adicionam-se todas essas arestas. Mais uma vez, as funções elementares procura e união serão cruciais para uma implementação eficiente. rafos Alg. de Boruvka () (Implementação) Torna-se necessário permitir que a função de procura seja ligeiramente alterada para que associe um índice com cada uma das sub-árvores. Assim sendo, mantém-se uma tabela indexada por vértices indicando, para cada sub-árvore, qual a sua vizinha mais próxima. De seguida executam-se as seguintes operações em cada aresta do grafo: Se ligar dois vértices na mesma árvore, ignorá-la. Caso contrário, verificar as distâncias do vizinho mais próximo de cada uma das árvores, actualizando-se se apropriado.

37 rafos Alg. de Boruvka () (Implementação) Depois de fazer esta avaliação, a tabela dos vizinhos mais próximos contém a informação necessária para ligar subárvores. Para índice dos vértices faz-se uma união, ligando os seus vizinhos mais próximos. Em seguida, retiram-se as arestas mais longas que ligam outros pares de vértices nos pares de árvores MST ligadas. rafos Alg. de Boruvka () (Implementação) Edge nn[maxv]; void RAPHmstE(raph *, Edge mst[]) int h, i, j, k, v, w, N; Edge e, a[maxe]; int E = RAPHedges(a, ); for (UFinit(->V); E!= ; E = N) for (k = ; k < ->V; k++) nn[k] = EDE(->V, ->V,.); for (h =, N = ; h < E; h++) i = find(a[h].v); j = find(a[h].w); if (i == j) continue; if (a[h].wt < nn[i].wt) nn[i] = a[h]; if (a[h].wt < nn[j].wt) nn[j] = a[h];.... Tabela dos vizinhos mais próximos, nn.. Criação de tabela de arestas, a.. Inicialização da distância aos vizinhos.. Determinação da sub-árvore a que pertencem as arestas.. Cálculo do vizinho mais próximo.

38 rafos Alg. de Boruvka () (Implementação)... a[n++] = a[h]; for (k = ; k < ->V; k++) e = nn[k]; v = e.v; w = e.w; if ((v!= ->V) &&!UFfind(v, w)) UFunion(v, w); mst[k] = e;. Deita fora de a as arestas que ligam vértices na mesma sub-árvore!!!. Funde duas subárvores, se ainda não associadas, usando a aresta mais curta, e. rafos Alg. de Boruvka (Propriedade) Propriedade O algoritmo de Boruvka calcula a MST de um grafo num tempo inferior a E lgv lg*v. Demonstração: Dado que o número de sub-árvores na floresta se reduz, pelo menos, a metade em cada fase, o número de fases não é maior que lg V. O tempo de cada fase é, no máximo, proporcional ao custo de E operações de procura. Observações: A expressão acima é bastante conservadora, na medida em que ignora a redução de arestas ocorrida em cada fase. Concebido em 9 e desde os anos 8 a base para o desenvolvimento de algoritmos eficientes para MST s, assim como para algoritmos paralelos

39 rafos Comparação dos métodos () Algoritmo Pior caso Comentário Prim (padrão) V Óptimo para grafos densos Prim (com PFS)* E lg V Pior caso conservador Kruskal (padrão) E lg E Custo de ordenação domina Kruskal (ord. parcial)* E + X lg V Depende da aresta maior Boruvka E lg V Pior caso muito conservador * Variantes não discutidas * PFS Priority-First Search * ord. parcial evitar ordenar todas as arestas, dado que podem não ser necessárias (via heapsort, por exemplo). rafos Comparação dos métodos () E V H P K K* e/e B e/e Densidade Densidade Densidade , 8. 8, Densidade V/ H: Prim lista de adjacências/heapsort P: Prim matriz de adjacências K: Kruskal K*: Kruskal com ordenação parcial B: Boruvka e/e: arestas examinadas (uniões) 8

40 rafos Síntese da aula Árvores de suporte mínimas MST Propostas de solução para cálculo de MST s Algoritmo de Prim Descrição; Implementação; Exemplo de execução; Análise de eficiência Algoritmo de Kruskal Descrição; Implementação; Exemplo de execução; Análise de eficiência Algoritmo de Boruvka Descrição; Implementação; Exemplo de execução; Análise de eficiência Comparação dos três métodos 9 Caminhos em rafos Caminho simples Dados dois vértices num grafo, saber se estão ligados por um caminho; Determinar se o caminho existe ou calculá-lo explicitamente; Caminho de Hamilton Dados dois vértices num grafo, saber se existe um caminho que visite todos os vértices do grafo exactamente uma vez; Determinar se o caminho existe ou calculá-lo explicitamente; Caminho de Euler Dados dois vértices num grafo, saber se existe um caminho simples que use todas as arestas do grafo exactamente uma vez; Determinar se o caminho existe ou calculá-lo explicitamente.

41 rafos - Caminho Simples (Cliente para M. de Adj.) static int visited[maxv]; int RAPHpath(raph *, int v, int w) int t; for (t = ; t < ->V; t++) visited[t] = ; return pathr(, v, w); int pathr(raph *, int v, int w) int t; if (v == w) return ; visited[v] = ; for (t = ; t < ->V; t++) if (->adj[v][t] == ) if (visited[t] == ) if (pathr(, t, w)) return ; return ; rafos - Descrição do algoritmo Suporta-se num esquema de procura em profundidade primeiro depth first search. A partir de v, encontrando um primeiro vértice adjacente, t, chama-se recursivamente tentando encontrar w a partir de t. O vector visited serve para garantir uma só visita a cada vértice.

42 rafos - Exemplo de execução () Chamada à função para determinar a existência de caminho entre os vértices e RAPHpath(,, ) rafos - Exemplo de execução () Sequência de chamadas a pathr pathr(,, )

43 rafos - Exemplo de execução () Sequência de chamadas a pathr pathr(,, ) - pathr(,, ) -; ( e já visitados) - (não adjacentes) rafos - Exemplo de execução () Sequência de chamadas a pathr pathr(,, ) - pathr(,, ) -; ( e já visitados) - (não adjacentes) - pathr(,, ) -; ( e já visitados)

44 rafos - Exemplo de execução () Sequência de chamadas a pathr pathr(,, ) - pathr(,, ) -; ( e já visitados) - (não adjacentes) - pathr(,, ) -; ( e já visitados) - pathr(,, ) -; (não adjacentes) - (já visitado)... rafos - Exemplo de execução () Sequência de chamadas a pathr... - ( já visitado) -; (não adjacentes) - pathr(,, ) 8

45 rafos - Exemplo de execução () Sequência de chamadas a pathr... - ( já visitado) -; (não adjacentes) - pathr(,, ) -; (não adjacentes) - ( já visitado) - (não adjacentes) - pathr(,, ) 9 rafos - Exemplo de execução () Sequência de chamadas a pathr pathr(,, ) - pathr(,, ) -; ( e já visitados) - (não adjacentes) - pathr(,, ) -; ( e já visitados) - pathr(,, ) -; (não adjacentes) - (já visitado)...

46 rafos - Exemplo de execução () Sequência de chamadas a pathr... - ( já visitado) -; (não adjacentes) - pathr(,, ) -; (não adjacentes) - ( já visitado) - (não adjacentes) - pathr(,, ) rafos - Análise de Complexidade () Número de execuções de if (->adj[v][t]==) para v? for (t = ; t < ->V; t++) Ou seja, V vezes no pior caso para cada v. Número de execuções de if (visited[t]==) para v? for (t = ; t < ->V; t++) if (->adj[v][t] == ) Ou seja, sempre que v e t forem adjacentes. No pior caso, V vezes.

47 rafos - Análise de Complexidade () Quantas chamadas a pathr para cada v? for (t = ; t < ->V; t++) if (->adj[v][t] == ) if (visited[t] == ) Ou seja, para adjacentes de v ainda não visitados. No pior caso, V vezes. Número total de chamadas a pathr não é superior a V. Porquê? rafos - Análise de Complexidade () Discussão anterior centrou-se na representação por matriz de adjacências. Para listas de adjacências, o teste if (->adj[v][t] == ) é substituído pelo teste de fim de lista de adjacentes de v executado, no pior caso, grau(v) vezes; grau(v) V Para todos os vértices, no pior caso, é executado Σv grau(v) = E. Tudo o mais permanece.

48 rafos - Análise de Complexidade () Na representação por matrizes de adjacência, o algoritmo tem um tempo de execução da ordem de V. Porquê? Na representação por listas de adjacências, o algoritmo tem um tempo de execução da ordem de E. Porquê? Em síntese: Pode-se determinar um caminho ligando dois vértices dados de um grafo em tempo linear. rafos - Análise de Complexidade () Tempo linear significa: tempo proporcional a V para matrizes de adjacência; tempo proporcional a E para listas de adjacências. Que representação preferir para este problema? Se o grafo for denso, preferir a solução por matriz de adjacências. Se o grafo for esparso, preferir a solução por listas de adjacências.

49 rafos - Caminho de Hamilton () Cliente para M. de Adj. Caminho simples static int visited[maxv]; int pathr(raph *, int v, int w, ) int t; if (v == w) return ; int RAPHpath (raph *, int v, int w) int t; for (t = ; t < ->V; ++t) visited[t] = ; return pathr(, v, w, ); visited[v] = ; for (t = ; t < ->V; t++) if (->adj[v][t] == ) if (visited[t] == ) if (pathr(, t, w, )) return ; return ; rafos - Caminho de Hamilton () Cliente para M. de Adj. Caminho de Hamilton static int visited[maxv]; int pathr(raph *, int v, int w, int d) int t; if (v == w) if (d == ) return ; else return ; visited[v] = ; for (t = ; t < ->V; t++) if (->adj[v][t] == ) if (visited[t] == ) if (pathr(, t, w, d-)) return ; visited[v] = ; return ; int RAPHpathH(raph *, int v, int w) int t; for (t = ; t < ->V; ++t) visited[t] = ; return pathr(, v, w, ->V-); 8

50 rafos - Exemplo de execução () Chamada à função para determinar a existência de caminho de Hamilton entre os vértices e RAPHpathH(,, ) 9 rafos - Exemplo de execução () Sequência de chamadas a pathr pathr(,,, ) - ( visitado) - pathr(,,, ) -; (já visitados) - pathr(,,, ) -; ; (já visitados) -; (não adjacentes) (sai limpando ) - pathr(,,, ) - (não adjacentes) - (já visitado) - (não adjacentes) - (já visitado) (...)

51 rafos - Exemplo de execução () Sequência de chamadas a pathr (...) - pathr(,, ) (d!= ) (sai limpando ) (sai limpando ) - (não adjacente) (sai limpando ) - pathr(,,, ) - (já visitado) - pathr(,,, ) -;; (já visitados) - pathr(,,, ) - (não adjacente) (...) rafos - Exemplo de execução () Sequência de chamadas a pathr (...) - (já visitado) - (não adjacentes) - (já visitado) - pathr(,,, ) (...) (d ==, caminho encontrado) Caminho encontrado!!!

52 rafos - Análise de Complexidade Propriedade A procura recursiva por um caminho de Hamilton pode levar tempo exponencial. Esboço de Demonstração Considere-se um grafo em que o vértice V- está isolado e os restantes V- vértices formam um sub-grafo completo. O programa nunca conseguirá encontrar um caminho de Hamilton (Porquê?). No entanto, por indução pode-se estabelecer que examinará todos os (V-)! caminhos no sub-grafo completo e em todos eles executará V- chamadas recursivas a graphr. Logo, o número total de chamadas recursivas é da ordem de V!, ou da ordem de (V/e) V, o que é superior a qualquer polinómio em V. rafos Discussão () Como é que dois problemas tão próximos no seu enunciado e dois programas tão próximos na sua estrutura, possuem complexidades tão distintas? Quando se procura um caminho simples sabemos que, se existe um caminho entre os vértices v e w, ele é encontrado a partir de algum t adjacente a v. O mesmo é verdade para caminhos de Hamilton. Se não encontrarmos um caminho simples entre t e w, sabemos que não existe um caminho simples entre v e w que passe por t.

53 rafos Discussão () Para caminhos de Hamilton, pode não existir um caminho que comece por v-t, mas pode existir um caminho que comece por v-x-t, para algum outro vértice x (daí termos de desmarcar vértices visitados). Logo, teremos que executar uma chamada recursiva a partir de t para todos os caminhos possíveis originados em v e que passam em t. O que é o mesmo que dizer que poderemos ter que investigar todos os caminhos possíveis no grafo. rafos - Caminhos e Ciclos de Euler () Propriedade Um grafo ligado possui um caminho de Euler entre o vértice v e o vértice w se e só se v e w têm grau ímpar e todos os outros vértices têm grau par. Demonstração Prova-se por indução no número de arestas. Claramente, o resultado é verdadeiro para um grafo com dois vértices e uma só aresta ligando-os. Seja um grafo ligado com mais que uma aresta. Existe um caminho de Euler entre v e w se e só se existir um vértice t, adjacente de v, para o qual exista um caminho de Euler até w no grafo * (* obtém-se de removendo a aresta que liga v a t);

54 rafos - Caminhos e Ciclos de Euler () Demonstração (continuação) Pela hipótese de indução, existe um caminho de Euler em * se e só se todos os vértices têm grau par excepto t e w, que têm grau ímpar. Se existir um caminho de Euler entre t e w em *, adicionando uma aresta entre v e t faz com que t tenha grau par e com que v tenha grau ímpar, sem afectar o grau dos restantes vértices. Logo, o resultado fica estabelecido. rafos - Caminhos e Ciclos de Euler () Demonstração (continuação) Se não existir um caminho de Euler entre t e w em *, então é porque t tem grau par - (de grau ímpar em ), ou w tem grau par - (também de grau par em ), ou v tem grau ímpar - (de grau par em ), ou outro vértice tem grau ímpar - (também de grau ímpar em ). Em qualquer dos casos, violando a condição enunciada. 8

55 rafos - Caminhos e Ciclos de Euler () Propriedade Um grafo ligado possui um ciclo de Euler se e só se todos os seus vértices tiverem grau par. Demonstração Consequência imediata da propriedade anterior e do argumento utilizado na sua demonstração. rau dos vértices Tempo proporcional a E para listas de adjacências. Tempo proporcional a V para matrizes de adjacências. Ou mantém-se uma tabela indexada pelos vértices com o grau de cada vértice. 9 rafos - Caminhos e Ciclos de Euler () Neste último caso, determinar se existe ou não um caminho ou ciclo de Euler pode ser feito em tempo proporcional a V. Sendo fácil saber se existe, será que é fácil calculá-lo como nos caminhos simples ou será que é tão difícil como com os caminhos de Hamilton? Examinando a demonstração Qualquer aresta cuja remoção mantenha o grafo ligado pode ser a primeira aresta de um caminho de Euler. Encontrando uma primeira aresta nestas condições, aplica-se o conceito recursivamente.

56 rafos Problemas em grafos Estes três exemplos servem para ilustrar a gama de variabilidade que pode existir em problemas com grafos. Problemas aparentemente iguais com diferentes complexidades. Problemas aparentemente complexos com soluções simples. Categorias em termos de complexidade Simples, Tratáveis, Intratáveis, Desconhecida. Exemplos de problemas (ver discussão no livro) Conectividade simples, conectividade forte em digrafos, fecho transitivo, árvores mínimas de suporte, caminhos mais curtos com uma única origem, planaridade, emparelhamento, alocação, caminho mais comprido, coloração, conjuntos independentes, cliques, isomorfismo, ciclos de tamanho par em digrafos. rafos Complexidade dos Problemas () rafos não direccionados Conectividade S Conectividade geral T Ciclo de Euler S Ciclo de Hanilton I Emparelhamento em grafos bipartidos S Emparelhamento máximo T Planaridade T Clique máxima I Bi-coloração S Tri-coloração I Caminhos mais curtos S Caminhos mais compridos I Cobertura de vértices I Isomorfismo?

57 rafos Complexidade dos Problemas () Digrafos Fecho transitivo S Conectividade forte S Ciclos ímpares S Ciclos pares? rafos ponderados Árvore mínima de suporte S Caixeiro viajante I Redes Caminhos mais curtos S Ciclos negativos I Fluxo da rede S Atribuição T Fluxo de custo mínimo T rafos Síntese da aula Caminhos em grafos Caminhos simples, caminhos de Hamilton e caminhos de Euler Caminhos Simples Implementação; Descrição da implementação; Exemplo de execução; Análise de complexidade Caminhos de Hamilton Implementação; Descrição da implementação; Exemplo de execução; Análise de complexidade Caminhos e Ciclos de Euler Caracterização dos grafos que possuem caminho e ciclos de Euler Problemas em grafos Síntese de complexidade de alguns problemas em grafos

Algoritmos e Estruturas de Dados LEE 2015/16. Teoria de Grafos e Algoritmos em Grafos 2ª Parte

Algoritmos e Estruturas de Dados LEE 2015/16. Teoria de Grafos e Algoritmos em Grafos 2ª Parte Algoritmos e Estruturas de Dados LEE / Teoria de rafos e Algoritmos em rafos ª Parte rafos DFS Notar que a estratégia de procura de Tremaux, mais não é que procura em profundidade primeiro. O algoritmo

Leia mais

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

Caminhos em Grafos. Grafos - Caminho Simples (1) (Cliente para M. de Adj.) static int visited[maxv]; Caminhos em rafos Caminho simples Dados dois vértices num grafo, saber se estão ligados por um caminho; Determinar se o caminho existe ou calculá-lo explicitamente; Caminho de Hamilton Dados dois vértices

Leia mais

Grafos Procura (1) AED (IST/DEEC) 44. Grafos Procura (2) Procurar em grafos é equivalente a percorrer labirintos

Grafos Procura (1) AED (IST/DEEC) 44. Grafos Procura (2) Procurar em grafos é equivalente a percorrer labirintos rafos Procura () Algumas propriedades simples em grafos são fáceis de determinar, independentemente da ordem pela qual se examinam as arestas. Ex: grau de todos os vértices. Outras propriedades estão associadas

Leia mais

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 LEE 2013/14. Objecto abstracto Dois tipos de entidades. Vértices representam Algoritmos e Estruturas de Dados LEE 2013/14 Teoria de Grafos e Algoritmos em Grafos 1ª Parte Grafos - O que é um grafo? Objecto abstracto Dois tipos de entidades Nós ou Vértices Ramos ou Arestas Vértices

Leia mais

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados MEEC 2012/13. 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 Algoritmos e Estruturas de Dados MEEC 01/1 Teoria de Grafos e Algoritmos em Grafos 1ª Parte Grafos - O que é um grafo? Objecto abstracto Dois tipos de entidades Nós ou Vértices Ramos ou Arestas Vértices

Leia mais

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

AED Algoritmos e Estruturas de Dados LEEC /2007. Teoria de Grafos e Algoritmos em Grafos AED Algoritmos e Estruturas de Dados LEEC - 2006/2007 Teoria de Grafos e Algoritmos em Grafos Grafos - O que éum grafo? Objecto abstracto Dois tipos de entidades Nós ou Vértices Ramos ou Arestas Vértices

Leia mais

Teoria dos Grafos Aula 6

Teoria dos Grafos Aula 6 Teoria dos Grafos Aula 6 Aula passada Busca em grafos Busca em largura (BFS Breadth First Search) Propriedades Aula de hoje BFS implementação Complexidade Busca em profundidade (DFS) Conectividade, componentes

Leia mais

Algoritmo de Kruskal. Algoritmo de Kruskal. Floresta geradora 26. Subfloresta S 20.3

Algoritmo de Kruskal. Algoritmo de Kruskal. Floresta geradora 26. Subfloresta S 20.3 Algoritmo de Kruskal Algoritmo de Kruskal S. Algoritmos em Grafos º sem / Subfloresta Uma subfloresta de G é qualquer floresta F que seja subgrafo de G. Exemplo: As arestas vermelhas que ligam os vértices

Leia mais

Grafos Caminhos mais curtos

Grafos Caminhos mais curtos rafos Caminhos mais curtos Cada caminho num digrafo ponderado possui um peso -a soma dos pesos das arestas que o constituem. Esta característica origina directamente problemas como: determinar o caminho

Leia mais

Aula 09. Percurso em grafo

Aula 09. Percurso em grafo Logo Aula 09 Percurso em grafo 2 Percurso de grafo Veremos agora a pesquisa em profundidade e pesquisa em largura de um grafo. Ambos os algoritmos recebem um nó inicial no grafo, e eles visitam todos os

Leia mais

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina Grafos: Busca SCE-183 Algoritmos e Estruturas de Dados 2 Thiago A. S. Pardo Maria Cristina Percorrendo um grafo Percorrendo um Grafo Percorrer um grafo é um problema fundamental Deve-se ter uma forma sistemática

Leia mais

AED2 - Aula 22 Busca em largura, cálculo de distâncias

AED2 - Aula 22 Busca em largura, cálculo de distâncias AED2 - Aula 22 Busca em largura, cálculo de distâncias Relembrando a busca genérica, usando um versão alternativa: marque todos os vértices como não encontrados. marque s como encontrado. coloque s no

Leia mais

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

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 Algoritmos e Estruturas de Dados LEE / Teoria de Grafos e Algoritmos em Grafos Grafos - O que é um grafo? Objecto abstracto Dois tipos de entidades Nós ou Vértices Ramos ou Arestas Vértices representam

Leia mais

BCC204 - Teoria dos Grafos

BCC204 - Teoria dos Grafos BCC204 - Teoria dos Grafos Marco Antonio M. Carvalho (baseado nas notas de aula do prof. Haroldo Gambini Santos) Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal

Leia mais

Demonstração. Relação invariante chave. Implementações do algoritmo de Prim. Implementação grosseira

Demonstração. Relação invariante chave. Implementações do algoritmo de Prim. Implementação grosseira Algoritmo de Prim Simulação S. Algoritmos em Grafos º sem / Franja A franja (= fringe) de uma subárvore T é o conjunto de todas as arestas que têm uma ponta em T e outra ponta fora Exemplo: As arestas

Leia mais

Calculando distâncias

Calculando distâncias Calculando distâncias Problema: dados um digrafo G e um vértice s, determinar a distância de s aos demais vértices do digrafo Exemplo: para s = v 3 5 dist[v] 3 3 5 Algoritmos em Grafos º sem / Busca em

Leia mais

INF 1010 Estruturas de Dados Avançadas

INF 1010 Estruturas de Dados Avançadas INF Estruturas de Dados Avançadas Grafos //8 DI, PUC-Rio Estruturas de Dados Avançadas. Primeiro uso conhecido 7 Euler: pontes de Königsberg //8 DI, PUC-Rio Estruturas de Dados Avançadas. Primeiro uso

Leia mais

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

Análise e Síntese de Algoritmos. Algoritmos em Grafos CLRS, Cap. 22 Análise e Síntese de Algoritmos Algoritmos em Grafos CLRS, Cap. 22 Mudança no Horário Aulas Teóricas de 4ª feira 10:30 12:00 Sala: FA1 12:00 13:30 Sala: FA1 Deixa de haver aula teórica às 9:00 por troca

Leia mais

Melhores momentos AULA 12

Melhores momentos AULA 12 Melhores momentos AULA Calculando distâncias Problema: dados um digrafo G e um vértice s, determinar a distância de s aos demais vértices do digrafo Exemplo: para s = v 3 5 dist[v] 3 3 5 Busca em largura

Leia mais

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 33

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 33 Pesquisa em Grafos Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/2015 1 / 33 Pesquisa em Grafos Uma das tarefas mais importantes é saber percorrer um grafo, ou seja

Leia mais

Grafos. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Grafos. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo PMR2300 Escola Politécnica da Universidade de São Paulo Um grafo é uma estrutura que generaliza árvores, sendo formado por nós e arestas. Cada nó em um grafo pode ser conectado a vários outros nós por

Leia mais

Definição 1.1 : Uma árvore é um grafo simples conexo e sem ciclos.

Definição 1.1 : Uma árvore é um grafo simples conexo e sem ciclos. 1 Árvores Definição 1.1 : Uma árvore é um grafo simples conexo e sem ciclos. Um grafo simples sem ciclos mas não conexo (em que cada componente conexa é portanto uma árvore) chama-se uma floresta. Numa

Leia mais

Grafos: Busca. Algoritmos e Estruturas de Dados 2. Graça Nunes

Grafos: Busca. Algoritmos e Estruturas de Dados 2. Graça Nunes Grafos: Busca Algoritmos e Estruturas de Dados Graça Nunes Percorrendo um grafo Percorrendo um Grafo Percorrer um grafo é uma tarefa fundamental Pense no caso de se procurar uma certa informação associada

Leia mais

Teoria dos Grafos Aula 5

Teoria dos Grafos Aula 5 Teoria dos Grafos Aula Aula passada Explorando grafos Mecanismos genéricos Ideias sobre BFS, DFS Aula de hoje Busca em grafos Busca em largura (BFS Breadth First Search) Propriedades Busca em Grafos Problema

Leia mais

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

03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II 03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2011/1 Moacir

Leia mais

ESTRUTURAS DE DADOS. prof. Alexandre César Muniz de Oliveira. 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8.

ESTRUTURAS DE DADOS. prof. Alexandre César Muniz de Oliveira. 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8. ESTRUTURAS DE DADOS prof. Alexandre César Muniz de Oliveira 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8. Grafos Sugestão bibliográfica: ESTRUTURAS DE DADOS USANDO C Aaron

Leia mais

Na última aula... Procurando um caminho. Certificados. Procurando um caminho

Na última aula... Procurando um caminho. Certificados. Procurando um caminho Procurando um caminho Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t Na última aula... Exemplo: para s = e t = a resposta é SIM Algoritmos em Grafos º sem / Procurando

Leia mais

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma Grafos Árvores espalhadas mínimas Conteúdo Introdução Como construir uma árvore geradora miníma Algoritmos Referências Introdução Dado um grafo conectado não orientado G = (V, E) e uma função peso w :

Leia mais

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira Árvores SCC-202 Algoritmos e Estruturas de Dados I Lucas Antiqueira Listas e árvores Listas lineares Um nó após o outro, adjacentes Nó sucessor e antecessor Diversas aplicações necessitam de estruturas

Leia mais

Conjuntos disjuntos. Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida

Conjuntos disjuntos. Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida Conjuntos disjuntos Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida Desempenho análise complicada Uso problemas de grafos equivalência

Leia mais

Na última aula... Algoritmos em Grafos 1º sem / 80

Na última aula... Algoritmos em Grafos 1º sem / 80 Na última aula... Algoritmos em Grafos 1º sem 01 1 / 80 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 = 0 e t = 1 a resposta

Leia mais

Aula 08. Estruturas de dados Árvore e Grafo

Aula 08. Estruturas de dados Árvore e Grafo Logo Aula 08 Estruturas de dados Árvore e Grafo 2 Árvore Estruturas estudadas até agora não são \ adequadas para representar dados que devem ser dispostos de maneira hierárquica Ex., hierarquia de pastas

Leia mais

Grafos: algoritmos de busca

Grafos: algoritmos de busca busca em grafos como caminhar no grafo de modo a percorrer todos os seus vértices evitando repetições desnecessárias do mesmo vértice? e por onde começar? solução: necessidade de recursos adicionais que

Leia mais

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32 Grafos - Introdução Pedro Ribeiro DCC/FCUP 2014/2015 Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/2015 1 / 32 Conceito Definição de Grafo Formalmente, um grafo é: Um conjunto de nós/vértices (V).

Leia mais

Sub-grafo. Árvore Geradora Mínima

Sub-grafo. Árvore Geradora Mínima Comentários da aula anterior Componentes Fortemente Conectados (algoritmo) 1. Chama BuscaEmProfundidade (G) para obter os tempos de término (t[u], ou f[u]) para todos os vértices de G, isto é, enquanto

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados

Leia mais

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados

Leia mais

GRAFOS Aula 05 Algoritmos de percurso: busca em largura e profundidade Max Pereira

GRAFOS Aula 05 Algoritmos de percurso: busca em largura e profundidade Max Pereira Ciência da Computação GRAFOS Aula 05 Algoritmos de percurso: busca em largura e profundidade Max Pereira Busca em Largura (Breadth-First Search) Um dos algoritmos mais simples para exploração de um grafo.

Leia mais

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

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 10: Introdução aos Grafos Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 10: Introdução aos Grafos História O assunto que se constitui no marco inicial da teoria de grafos é na realidade um problema algorítmico.

Leia mais

CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

CAL ( ) MIEIC/FEUP Estruturas de Dados ( ) Conjuntos Disjuntos R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes FEUP, MIEIC, CPAL, 2010/2011 1 Conjuntos Disjuntos Objectivo resolver eficientemente o problema da equivalência estrutura

Leia mais

Na última aula... Procurando um caminho. Certicados. Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t

Na última aula... Procurando um caminho. Certicados. Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t 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 Na última aula... Algoritmos em Grafos º sem / Procurando

Leia mais

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DO 2 o TESTE

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DO 2 o TESTE INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos Ano Lectivo de 2006/2007 2 o Semestre RESOLUÇÃO DO 2 o TESTE I. (2,0+2,0+2,0 = 6,0 val.) 1) Calcule o valor óptimo da função objectivo e o respectivo

Leia mais

Grafos COM11087-Tópicos Especiais em Programação II

Grafos COM11087-Tópicos Especiais em Programação II Grafos COM11087-Tópicos Especiais em Programação II edmar.kampke@ufes.br Introdução Grafos são estruturas muito estudadas na Ciência da Computação para modelagem de problemas Euler (1736) em Königsberg

Leia mais

Grafos Parte 1. Aleardo Manacero Jr.

Grafos Parte 1. Aleardo Manacero Jr. Grafos Parte 1 Aleardo Manacero Jr. Uma breve introdução Grafos são estruturas bastante versáteis para a representação de diversas formas de sistemas e/ou problemas Na realidade, árvores e listas podem

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

INF 1010 Estruturas de Dados Avançadas

INF 1010 Estruturas de Dados Avançadas INF Estruturas de Dados Avançadas Grafos // DI, PUC-Rio Estruturas de Dados Avançadas. Aplicações de grafos grafo vértices arestas Cronograma tarefas restrições de preferência Malha viária interseções

Leia mais

Grafos: componentes fortemente conexos, árvores geradoras mínimas

Grafos: componentes fortemente conexos, árvores geradoras mínimas Grafos: componentes fortemente conexos, árvores geradoras mínimas SCE-183 Algoritmos e Estruturas de Dados 2 Thiago A. S. Pardo Maria Cristina 1 Componentes fortemente conexos Um componente fortemente

Leia mais

Na última aula... Algoritmos em Grafos 1º sem / 1

Na última aula... Algoritmos em Grafos 1º sem / 1 Na última aula... Algoritmos em Grafos 1º sem 01 1 / 1 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 = 0 e t = 1 a resposta

Leia mais

i a[i]

i a[i] Técnicas de Hashing Outra forma de se fazer busca em uma tabela, é construir-se a tabela de forma a facilitar a busca, colocando-se cada elemento numa posição pré-determinada. Tal posição é obtida aplicando-se

Leia mais

Melhores momentos AULA 4

Melhores momentos AULA 4 Melhores momentos AULA 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 = 0 e t = 1 a resposta é SIM 1 0 3 5 Procurando um

Leia mais

Grafos tipo abstrato de dados

Grafos tipo abstrato de dados Algoritmos e Estruturas de Dados II Grafos tipo abstrato de dados Thiago A. S. Pardo Profa. M. Cristina Material de aula da Profa. Josiane M. Bueno 1 Tipo Abstrato de Dados Última aula: TAD grafo? 2 Tipo

Leia mais

Grafos: árvores geradoras mínimas. Graça Nunes

Grafos: árvores geradoras mínimas. Graça Nunes Grafos: árvores geradoras mínimas Graça Nunes 1 Motivação Suponha que queremos construir estradas para interligar n cidades Cada estrada direta entre as cidades i e j tem um custo associado Nem todas as

Leia mais

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade Gustavo E.A.P.A. Batista 25 de janeiro de 2005 1 Contextualização 2 Caminhos Mínimos Caminhos Mínimos de uma Origem

Leia mais

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca ÁRVORES SUMÁRIO Fundamentos Árvores Binárias Árvores Binárias de Busca 2 ÁRVORES Utilizadas em muitas aplicações Modelam uma hierarquia entre elementos árvore genealógica Diagrama hierárquico de uma organização

Leia mais

GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes

GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes 8//6 GRAFOS BUSCAS E MENOR CAMINHO Prof. André Backes Busca em grafos Definição Consiste em explorar o grafo de uma maneira bem específica. Trata-se de um processo sistemático de como caminhar por seus

Leia mais

Grafos IFRN. Prof. Robinson Alves

Grafos IFRN. Prof. Robinson Alves Grafos IFRN Prof. Robinson Alves Problema do Caixeiro Viajante Consiste em determinar o menor caminho, passando por todos os vértices uma única vez e retornando ao vértice de origem Métodos: Tentativa

Leia mais

Teoria dos Grafos. Árvores

Teoria dos Grafos.  Árvores Teoria dos Grafos Valeriano A. de Oliveira Socorro Rangel Silvio A. de Araujo Departamento de Matemática Aplicada antunes@ibilce.unesp.br, socorro@ibilce.unesp.br, saraujo@ibilce.unesp.br Preparado a partir

Leia mais

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo PMR2300 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó (exceto a

Leia mais

Grafos e Algoritmos de Busca

Grafos e Algoritmos de Busca Grafos e Algoritmos de Busca /65 Grafos e Algoritmos de Busca Eduardo Camponogara Departamento de Automação e Sistemas Universidade Federal de Santa Catarina DAS-93: Introdução a Algoritmos Grafos e Algoritmos

Leia mais

Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Análise e Síntese de Algoritmos Algoritmos Elementares em Grafos [CLRS, Cap. 22] 24/25 Contexto Revisão [CLRS, Cap.-3] Fundamentos; notação; exemplos Algoritmos em Grafos [CLRS, Cap.2-26] Algoritmos elementares

Leia mais

Caminhos mínimos de única origem

Caminhos mínimos de única origem Caminhos mínimos de única origem Algoritmos em Grafos Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. Conteúdo Introdução

Leia mais

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 032/2016 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua

Leia mais

Melhores momentos AULA 5

Melhores momentos AULA 5 Melhores momentos AULA 5 Vetor de listas de adjacência de digrafos Na representação de um digrafo através de listas de adjacência tem-se, para cada vértice v, uma lista dos vértices que são vizinhos v.

Leia mais

grafo nós vértices arcos arestas

grafo nós vértices arcos arestas GRAFOS E APLICAÇÕES 1. INTRODUÇÃO 1) Um grafo G = (V, E) consiste num conjunto de nós (ou vértices) V e num conjunto de arcos (ou arestas) E. Cada arco é representado por um par de nós. No seguinte exemplo,

Leia mais

Estruturas de Dados Grafos

Estruturas de Dados Grafos Estruturas de Dados Grafos Prof. Eduardo Alchieri (introdução) Grafo é um conjunto de pontos e linhas que conectam vários pontos Formalmente, um grafo G(V,A) é definido pelo par de conjuntos V e A, onde:

Leia mais

Grafos. Marcelo K. Albertini. 22 de janeiro de 2015

Grafos. Marcelo K. Albertini. 22 de janeiro de 2015 Grafos Marcelo K. Albertini 22 de janeiro de 205 2/ Grafo Um conjunto de vértices conectados em pares por arestas. Porque estudar grafos? Muitas aplicações Abstração útil e interessante Muitos algoritmos

Leia mais

Grafos Direcionados. > Grafos Direcionados Representações Computacionais 1/36

Grafos Direcionados. > Grafos Direcionados Representações Computacionais 1/36 Grafos Direcionados > Grafos Direcionados Representações Computacionais 1/36 Grafos Direcionados Em muitas aplicações, é importante ter direção nas arestas: Ruas de mão única Grafos modelando páginas da

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 06 Busca em Profundidade e Busca em Largura Edirlei Soares de Lima Grafos (Revisão) G = (V, A) G: grafo; V: conjunto de vértices; A: conjunto

Leia mais

Árvores & Árvores Binárias

Árvores & Árvores Binárias Árvores & Árvores Binárias Problema Implementações do TAD Lista Linear Lista encadeada eficiente para inserção e remoção dinâmica de elementos, mas ineficiente para busca Lista seqüencial (ordenada) Eficiente

Leia mais

Caminho mais curto. 1 - Caminho não pesado

Caminho mais curto. 1 - Caminho não pesado Caminho mais curto Dado um grafo pesado G = (V, E) e um vértice s, obter o caminho pesado mais curto de s para cada um dos outros vértices em G Exemplo: rede de computadores, com custo de comunicação e

Leia mais

MAC328 Algoritmos em grafos (14/5/2004) Componentes fortemente conexos

MAC328 Algoritmos em grafos (14/5/2004) Componentes fortemente conexos 1 Componentes fortemente conexos 1 Componentes fortemente conexos 1. Subgrafos induzidos pela relação de equivalência x y (acessibilidade mútua) 1 Componentes fortemente conexos 1. Subgrafos induzidos

Leia mais

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

PAA-DCC-UFAM. Grafos. Universidade Federal do Amazonas Departamento de Eletrônica e Computação Grafos Universidade Federal do Amazonas Departamento de Eletrônica e Computação Grafos () Um grafo é composto por um conjunto de vértices e um conjunto de arestas Cada aresta liga dois vértices do grafo

Leia mais

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

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 11: Introdução aos Grafos Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 11: Introdução aos Grafos Indução Finita Indução Finita é uma técnica para provar teoremas também usada no projecto de algoritmos. Suponha

Leia mais

Capítulo 2- Modelos de grafos.

Capítulo 2- Modelos de grafos. Capítulo 2- Modelos de grafos. 2.1- Introdução (pág. 8) [Vídeo 24] Grafo- é um esquema constituído por pontos (ou vértices) e por segmentos (ou arestas). (8) Exemplo 1(pág.8) Um grafo diz-se conexo se

Leia mais

Fábio Protti - UFF Loana T. Nogueira - UFF Sulamita Klein UFRJ

Fábio Protti - UFF Loana T. Nogueira - UFF Sulamita Klein UFRJ Fábio Protti - UFF Loana T. Nogueira - UFF Sulamita Klein UFRJ Suponha que temos um grupo de pessoas (funcionário de uma empresa) que serão submetidos a um treinamento. Queremos identificar os grupos de

Leia mais

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

Listas (Parte 1) Túlio Toffolo  BCC202 Aula 09 Algoritmos e Estruturas de Dados I Listas (Parte 1) Túlio Toffolo tulio@toffolo.com.br www.toffolo.com.br BCC202 Aula 09 Algoritmos e Estruturas de Dados I Ementa do Curso Tipos Abstratos de Dados / Alocação Dinâmica Análise de Algoritmos

Leia mais

Algoritmos e Estruturas de Dados. Grafos Semestre de Inverno 13/14

Algoritmos e Estruturas de Dados. Grafos Semestre de Inverno 13/14 Algoritmos e Estruturas de Dados Grafos Semestre de Inverno 13/14 1 Grafo - Definição } Um grafo G=(V,E) é um par de dois conjuntos não vazios em que V é um conjunto finito e E é uma relação binária em

Leia mais

Grafos - Representação

Grafos - Representação Grafos - Representação É importante salientar outra diferença relevante entre a representação de matriz de adjacência e a representação ligada de grafos. Na representação de matriz está implícita a possibilidade

Leia mais

Otimização em Grafos

Otimização em Grafos Otimização em Grafos Luidi G. Simonetti PESC/COPPE 2017 Luidi Simonetti (PESC) EEL857 2017 1 / 33 Definição do Problema Dado: um grafo ponderado G = (V, E), orientado ou não, onde d : E R + define as distâncias

Leia mais

Otimização em Grafos

Otimização em Grafos Otimização em Grafos Luidi G. Simonetti PESC/COPPE 2017 Luidi Simonetti (PESC) EEL857 2017 1 / 35 Teoria dos Grafos - Relembrando Árvore Um grafo G é uma árvore se é conexo e não possui ciclos (acíclico).

Leia mais

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

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra ES- Algoritmos e Estruturas de Dados arlos Alberto Alonso Sanches Juliana de Melo ezerra ES- rafos onceitos gerais e representações Algoritmos em grafos Exploração sistemática em largura aminhos mais curtos

Leia mais

5COP096 TeoriadaComputação

5COP096 TeoriadaComputação Sylvio 1 Barbon Jr barbon@uel.br 5COP096 TeoriadaComputação Aula 13 Prof. Dr. Sylvio Barbon Junior Sumário - Problemas NP-Completo Algoritmos Não-deterministas; Classes NP-Completo e NP-Dificil; Teorema

Leia mais

Algoritmos e Estruturas de Dados

Algoritmos e Estruturas de Dados Algoritmos e Estruturas de Dados Grafos Slides baseados em: ZIVIANI, N. Projetos de Algoritmos - com implementações em Java e C++. Thomson Learning, 2007. Cap 7. CORMEN, H.T.; LEISERSON, C.E.; RIVEST,

Leia mais

Árvores. Listas e árvores. Árvores. Árvores. Árvores. Árvores 03/11/2011. Listas lineares

Árvores. Listas e árvores. Árvores. Árvores. Árvores. Árvores 03/11/2011. Listas lineares istas e árvores istas lineares Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral S-502 lgoritmos e struturas de ados iversas aplicações necessitam de estruturas mais complexas

Leia mais

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões Edital de Seleção 053/2016 PROPESP/UFAM Prova de Conhecimento Caderno de Questões CANDIDATO: INSCRIÇÃO: Assinatura conforme identidade INSTRUÇÕES PARA O CANDIDATO: Verifique o seu nome e o número da sua

Leia mais

Grafos Parte 2. SCC-603 Algoritmos e Estruturas de Dados II. Profª. Rosane Minghim / Baseado em material de professores dos anos anteriores

Grafos Parte 2. SCC-603 Algoritmos e Estruturas de Dados II. Profª. Rosane Minghim / Baseado em material de professores dos anos anteriores Grafos Parte 2 SCC-603 Algoritmos e Estruturas de Dados II Profª. Rosane Minghim / 2012 Baseado em material de professores dos anos anteriores Percorrendo um grafo Percorrendo um Grafo Percorrer um grafo

Leia mais

TGR BCC Representação Computacional de Grafos. Prof. Ricardo José Pfitscher

TGR BCC Representação Computacional de Grafos. Prof. Ricardo José Pfitscher TGR BCC Representação Computacional de Grafos Prof. Ricardo José Pfitscher Cronograma Representação Matriz de djacências Lista de djacências Matriz de Incidências Representação Como podemos representar

Leia mais

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

CAL ( ) MIEIC/FEUP Grafos: Introdução (Março, 2011) 1 Algoritmos em Grafos: Introdução R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes CAL, MIEIC, FEUP Março de 2011 Índice 2 Revisão de conceitos e definições Exemplificar aplicações Representação

Leia mais

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos Caminhos Mínimos Com Uma Fonte 1/74 Caminhos Mínimos Com Uma Fonte Eduardo Camponogara Departamento de Automação e Sistemas Universidade Federal de Santa Catarina DAS-9003: a Algoritmos Caminhos Mínimos

Leia mais

Teoria da Computação. Complexidade computacional classes de problemas

Teoria da Computação. Complexidade computacional classes de problemas Teoria da Computação Complexidade computacional classes de problemas 1 Universo de problemas Problemas indecidíveis ou não-computáveis Não admitem algoritmos Problemas intratáveis Não admitem algoritmos

Leia mais

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação SCC-203 ALGORITMOS E ESTRUTURAS DE DADOS II Prova - Gabarito Nome: Nro. USP ) O matemático

Leia mais

Algoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência

Algoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência Algoritmos e Estruturas de Dados LEE 2013/2014 Algoritmos de Ordenação Parte II Quicksort [1] Provavelmente o algoritmo mais usado inventado nos anos 60 muito estudado e analisado desempenho bem conhecido

Leia mais

Fluxos em redes: o Problema do Fluxo máximo

Fluxos em redes: o Problema do Fluxo máximo 1 Fluxos em redes: o Problema do Fluxo máximo Instância: uma rede (G, c) e vértices s e t G = (V, E) um grafo dirigido s e t V são dois vértices distinguidos c: E R 0 é uma função capacidade nas arestas

Leia mais

Matemática Aplicada às Ciências Sociais- 11º ano (Versão: para o manual a partir de 2016/17)

Matemática Aplicada às Ciências Sociais- 11º ano (Versão: para o manual a partir de 2016/17) Matemática Aplicada às Ciências Sociais- 11º ano (Versão: para o manual a partir de 2016/17) Professor: Pedro Nóia Livro adotado: Matemática Aplicada às Ciências Sociais- 11º ano Elisabete Longo e Isabel

Leia mais

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford. O problema tem subestrutura óptima

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford. O problema tem subestrutura óptima Caminho mais curto a partir de um nó Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford Fernando Lobo Algoritmos e Estrutura de Dados II Input: Um grafo com pesos nos arcos G =

Leia mais

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio David Déharbe Programa de Pós-graduação em Sistemas e Computação Universidade Federal do Rio Grande do Norte Centro de Ciências Exatas

Leia mais

Tabelas Hash. informação, a partir do conhecimento de sua chave. Hashing é uma maneira de organizar dados que:

Tabelas Hash. informação, a partir do conhecimento de sua chave. Hashing é uma maneira de organizar dados que: Tabelas Hash Tabelas Hash O uso de listas ou árvores para organizar informações é interessante e produz bons resultados. Porem, em nenhuma dessas estruturas se obtém o acesso direto a alguma informação,

Leia mais

Grafos parte 2. Percorrendo um grafo. Correção. Eficiência. Percorrendo um Grafo. Percorrendo um Grafo. Percorrendo um Grafo

Grafos parte 2. Percorrendo um grafo. Correção. Eficiência. Percorrendo um Grafo. Percorrendo um Grafo. Percorrendo um Grafo Percorrendo um grafo Grafos parte 2 SCC-203 Algoritmos e Estruturas de Dados 2 Rosane 2010 Baseado em material de professores dos anos anteriores Percorrendo um Grafo Percorrer um grafo é um problema fundamental

Leia mais

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 28 Caminho mais curto a partir de um nó Input: Um grafo com pesos nos arcos

Leia mais