Download - Exercícios PAA- Grafos
![Page 1: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/1.jpg)
Exercícios PAA- Grafos
Eduardo Laber
![Page 2: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/2.jpg)
Cap 3-Tardos
Exercício 2
• Modifique o pseudo-código da busca em profundidade da seguinte forma.
• Ao visitar um vértice v a partir de u– Se v não foi visitado faça
• upai (v)
– Se v já foi visitado• Se v<> pai(u)
– Ciclo existe (uv+ caminho de u a v na árvore)
![Page 3: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/3.jpg)
Cap 3-TardosExercício 3• Execute uma ordenação topológica no Grafo. Se em algum ponto
não houver uma fonte, quer dizer que o grafo contém ciclos.
• Execute uma busca em profundidade no grafo anotando, para cada vértice v,– o pai de v– o momento que a busca em v começa: pre(v)– o momento que a busca em v termina: pos(v)
• Ao tentar visitar um vértice v a partir de u tal que a busca em v já começou mais ainda não terminou podemos obter um ciclo da seguinte forma. – Caminhe pelos pais de u até encontrar v. O ciclo é formado por este
caminho + o arco (u,v)
![Page 4: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/4.jpg)
Cap 3-Tardos
Exercício 4• Construa um grafo em que cada aresta
corresponde a uma observação. Uma aresta pode ter um rótulo S (same) ou D (different).
• Faça uma busca no grafo rotulando os vértices em classes A e B – Ao visitar um vértice v (pela primeira vez) a partir de
um vértice u, atribua uma classe consistente com a aresta uv
– Ao visitar um vértice w, já visitado, a partir de x, verifique se as classes de w e x são consistentes com a aresta wx. Caso não sejam, o algoritmo deve indicar que não é possível a divisão em duas classes.
![Page 5: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/5.jpg)
Cap 3-Tardos
Exercício 7• Seja v um nó do grafo. Se u não é vizinho
de v então existe um nó, digamos w, que é vizinho de de u e de v. Caso contrário o grafo teria mais de n vértices (n/2 vizinhos de u, n/2 outros vizinhos de v, u e v). Contradição
• Portanto, vwu é um caminho de v para u
![Page 6: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/6.jpg)
Cap 3-Tardos
Exercício 8
• Para um contra exemplo considere uma clique K com n- n0.5 e um único vértice desta clique ligado a um caminho de n0.5 vértices.
![Page 7: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/7.jpg)
Cap 3-Tardos
Exercício 9• Considerar a árvore gerada a partir de
uma busca em largura começando em s.– Como a altura desta árvore é maior que n/2
então existe um nível nesta árvore ( > 1 e < nível t) com apenas um nó.
– Como toda aresta de G liga vértices da mesma camada ou de camadas adjacentes, ao remover este vértice desconectamos o grafo.
![Page 8: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/8.jpg)
Cap 3-Tardos
Exercício 9
• Algoritmo– Faça uma busca em largura calculando a
distância de s a cada nó e preencha um vetor (de listas) indicando, na posição i, os vértices que distam i de s. Retorne o primeiro nó diferente de s que se encontra sozinho em uma lista
![Page 9: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/9.jpg)
Cap 3-Tardos
Exercício 10• Utilizar uma busca em largura para decompor a
árvore em camadas. Marcar em cada nó a sua distância a v.
• Em uma segunda passada acumular em cada nó w um contador num(w) indicando o número de caminhos de v a w. – Inicialmente os contadores são 0, exceto Num(raiz)=1. – Ao tentar visitar um nó, digamos y, da camada i+1, a
partir de um no x da camada i fazer num(y) num(y)+num(x)
![Page 10: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/10.jpg)
Cap 3-Tardos
Exercício 11 • Manter um vetor de bits indicando se um
programa foi infectado ou não• Construir um grafo não direcionado para cada
tempo t e processar os grafos em ordem crescente de tempo
• Processamento do grafo correspondente ao tempo t– De duas passadas no grafo
• A primeira para marcar as componentes que tem um computador infectado e a segunda para marcar todos os computadores da componente como infectados.
![Page 11: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/11.jpg)
Cap 3-Tardos
Exercício 12Construa um grafo direcionados G da seguinte formaa) Para cada pessoa P(i) crie dois vértices: B(i) – data de
nascimento e D(i), data de morteb) Para todo i, crie uma arco de B(i) para D(i)c) Se nos dados coletados, P(i) morre antes de P(j) nascer
crie um arco de D(i) para B(j)d) Se nos dados coletados, a vida de P(i) tem interseção
com a vida de P(j), crie um arco de P(i) para B(j) e um arco de B(i) para P(j)
Se G tem uma ordenação topológica os dados são consistentes, caso contrário não
![Page 12: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/12.jpg)
Papadimitriou-Cap 3
Exercício 9• Duas passadas no grafo
– A primeira calcula o grau de cada vértice• For each v in Adj[u]
– d(u) d(u)+1
– Na segunda, acumulamos em twodegree[u], para cada u, a soma dos graus dos vizinhos de u.
• For each v in Adj[u]– Twodegree[u] Twodegree[u]+d(v)
![Page 13: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/13.jpg)
Papadimitriou-Cap 3
Exercício 13
a) Defina um vértice s em G e execute uma DFS a partir de s. Seja T a árvore obtida. Qualquer folha de T satisfaz a propriedade desejada
b) Qualquer Ciclo
c) Se G= dois ciclos disjuntos
![Page 14: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/14.jpg)
Papadimitriou-Cap 3
Exercício 15
a) Seja G=(V,E) o grafo direcionado em que V é o conjunto de interseções de ruas e E representa o conjunto das ruas
• Verifique se o grafo é fortemente conexo utilizando o algoritmo ensinado em sala com complexidade O(m+n)
![Page 15: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/15.jpg)
Papadimitriou-Cap 3
Exercício 15b) Seja v o nó correspondente a Town Hall. Seja
S o conjunto de nó alcançáveis a partir de v. S pode ser obtido em O(m+n) através de uma DFS( BFS).Seja G’ o grafo reverso de G. Seja T o conjunto de nós obtidos a partir de v em G’. Se T for um subconjunto de S então a propriedade é verdadeira. Caso contrário, é falsa.
![Page 16: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/16.jpg)
Papadimitriou-Cap 3
Exercício 18
• Execute uma DFS em G a partir de r e armazene os contadores pre e post para cada vértice do grafo.
• u é ancestral de v se e somente sepre[u] pre[v]< post[v]<post[u]
![Page 17: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/17.jpg)
Papadimitriou-Cap 3
Exercício 22• Execute uma DFS em G e armazene os
contadores pre e post para cada vértice do grafo. Seja v o vértice com maior post. Sabemos que ele pertence a um source node em G~ (aula de componentes fortemente conexos).
• Execute uma DFS começando em v. Se apenas uma árvore for gerada então existe o nó desejado. Caso contrário, não.
![Page 18: Exercícios PAA- Grafos](https://reader036.vdocuments.com.br/reader036/viewer/2022083006/56813a78550346895da27444/html5/thumbnails/18.jpg)
Papadimitriou-Cap 3
Exercício 24
Execute o algoritmo linear para ordenação topológica.
• Se em algum ponto o conjunto S dos vértices com grau de entrada igual a 0 tiver mais de um elemento, então G não possui o caminho desejado. Caso contrário G possui o caminho.