Anda di halaman 1dari 6

PUC-Rio Departamento de Informtica a Prof. Marcus Vinicius S. Poggi de Arago (3WA) a Horrio: 2as. e 4as.

15-17hs (3WA) a 17 de outubro de 2011 Per odo: 2011.2

ANALISE DE ALGORITMOS (INF 1721) 2a Lista de Exerc cios 1. Seja um grafo G = (V, E), no orientado, e uma arestas e E. Proponha um algoritmo a de complexidade linear para determinar se G possui um ciclo incluindo e ou no. a 2. Dado um grafo G = (V, E), no-orientado, seja vd[v] a soma dos graus de todos os a vizinhos de v. Projete um algoritmo para calcular vd[v] para v V em tempo linear O(n + m). 3. Considere um mapa rodovirio e um motorista que tem que ir do vrtice s ao t. O a e mapa representado pelo grafo G = (V, E), no-orientado onde os valores associados as e a ` arestas e E, he , correspondem `s altitudes das estradas correspondentes aos trechos. a O motorista no gosta de altitude e quer fazer o caminho que minimiza a maior altitude a que ele vai passar. Proponha uma algoritmo que encontre esse caminho (Dica: utilize um algoritmo de rvore geradora m a nima). Qual a complexidade do seu algoritmo ? Tem 2 que ser O(n ). 4. Uma oresta um grafo sem ciclos. Seja um grafo G = (V, E), no-orientado onde os e a pesos das arestas e E so dados por we . Proponha um algoritmo para encontrar uma a oresta com k arestas, K n 1, de peso total m nimo. Sua complexidade tem que ser O(n2 ) ou inferior. Qual seria a complexidade utilizando o algoritmo de Kruskal ? Projete um algoritmo de complexidade O(Km log K) para esse problema. 5. Uma 1-rvore geradora m a nima pode ser obtida adicionando-se ` arvore geradora m a nima a menor aresta que no pertence a mesma. Suponha agora que se obrigue que o unico a ` ciclo da 1-rvore contenha um dado vrtice v. Proponha um algoritmo para encontrar a e uma 1-rvore geradora m a nima com esta restriao. c 6. Considere que a arvore geradora de peso m nimo (AGM) de G = (V, E), no-orientado a onde os pesos das arestas e E so dados por we , conhecida. Considere agora que um a e novo vrtice foi acrescentado ` G com arestas para todos os vrtices em V . Proponha e a e um algoritmo para encontrar a nova AGM. Seu algoritmo deve excutar em O(n log n) ou menos. Tente encontrar um algoritmo O(n), existe. 7. Seja o grafo G = (V, E) onde V = {1, 2, 3, 4, 5, 6} e E = {(1, 2, 5), (1, 3, 2), (1, 4, 2), (2, 5, 2), (3, 4, 1), (3, 6, 6), (4, 2, 1), (4, 6, 7), (5, 4, 1), (5, 6, 3)}, onde os trios (u, v, l) indicam os vrtice de partida, de chegada e a distncia do arco. e a 1

(a) Aplique o algoritmo de Ford-Bellman (Correo de Rtulos) para encontrar os ca o c.m.c.s do vrtice 1 aos demais. e (b) Aplique o algoritmo de Dijkstra para encontrar os c.m.c.s do vrtice 1 aos demais. e (c) Suponha agora que os arcos no tem orientaao, ou seja se existe o arco (u, v, l), a c tambm existe o arco (v, u, l), e aplique o algoritmo de Kruskal para encontrar a e Arvore Geradora M nima de G. (d) Ainda supondo que os arcos no tem orientao, aplique o algoritmo de Prim para a ca encontrar a Arvore Geradora M nima de G. (e) Ainda supondo que os arcos no tem orientaao, aplique o algoritmo de Floyda c Warshall para encontrar os c.m.c.s entre todos os pares de vrtices. e 8. Considere o algoritmo de Dijkstra para encontrar o caminho mais curto entre um vrtice e fonte e os demais vrtices de um grafo orientado G = (V, E) onde a distncia associada e a a um arco e E dada por le = lvw onde v e w so o vrtice de partida e de chegada e a e do arco e, respectivamente. (As complexidades devem ser obtidas em funo de n = |V | ca e m = |E|). Algoritmo Dijkstra (s - fonte) Passo 0: Inicializao ca Seja S o conjunto de vrtices com caminho mais curto a partir de s determinado, e e S seu complemento (S = V S). S d(i) + i V ; d(s) 0; pred(s) 0; Passo 1: Iterao ca Enquanto S V faa c 1.1 Encontre v S t.q. d(v) = min d(w)
wS

1.2 S S {v}; S S \ {v}; 1.3 Para todo w + (v) Se d(v) + lvw < d(w) ento d(w) d(v) + lvw ; pred(w) v; a Responda aos itens abaixo: (a) Considere que o passo 1.1 realizado atravs do uso de um vetor que armazena os e e valores d(i), i = 1, . . . , n. Qual a complexidade desta implementao do algoritmo ca de Dijkstra ? (b) Qual a complexidade global do passo 1.1 ? E do item 1.3 ? (c) A implementao que utiliza uma d-Heap para armazenar d(i) faz uso das operaremove ca topo(H) no passo 1.1 e reduz chave(H, posicao(v), novo valor) no passo 1.3. Reescreva estes passos utilizando estas operae analise a complexidade global do algoritmo. 2

(d) Considere agora que todas as distncias lvw so inteiros e que C = max(v,w)E lvw a a (qual a maior distncia poss em um caminho ?). Observe que a distncia d(v) a vel a do vrtice selecionado no passo 1.1 a cada iterao maior ou igual a do vrtice e ca e ` e selecionado na iteraao anterior. Considere que buckets (ou caixas) so criadas para c a os valores de 0 a nC. Cada bucket utiliza uma lista duplamente encadeada para armazenar os vrtices v tais que d(v) tem o valor correspondente ao bucket. Um e vetor (d) utilizado para indicar em que bucket est armazenado. e a i. Escreva os passos 1.1 e 1.3 utilizando a estrutura descrita acima. ii. Analise a complexidade deste algoritmo. Qual seria a complexidade deste algoritmo quando as distncias so dadas pelo nmero de arestas no caminho ? a a u 9. Considere o problema de encontrar o caminho-mais-curto entre todos os pares de vrtices e onde os arcos do grafo orientado G = (V, E) podem assumir valores negativos. (a) Proponha um algoritmo para determinar se o grafo possui ciclo negativo. Analise sua complexidade. (b) Proponha um algoritmo que, nos casos em que um ou mais ciclos negativos esto a presentes em G, indique os pares de vrtices que possuem caminhos-mais-curtos e entre eles em G, ou seja cmcs que no passam pelos ciclos negativos. a 10. Prove que verdade ou que falso (nesse caso apresentando um contra-exemplo). e e (a) Se todas as distncias dos arcos so diferentes, ento a rvore de c.m.c. (de s aos a a a a outros vrtices do grafo) unica. e e (b) Considere a distncia dos c.m.c. de s aos outros vrtices do grafo. Se a distncia a e a de cada arco aumentada de k unidades (ou seja luv luv + k para todo arco e e = (u, v) E), as distncias dos c.m.c. aumentam de um mltiplo de k. a u (c) Se forem retiradas a orientaoes dos arcos de um grafo orientado G (i.e. passa ser c poss passar nos dois sentidos), as distncias dos c.m.c.s permanecem as mesmas. vel a (d) Entre todos os c.m.c.s existentes entre dois vrtices em um grafo, o algoritmo de e Dijkstra sempre acha o c.m.c. que possui o menor nmero de arestas. u 11. Considere o c.m.c. entre um par de vrtices em um grafo orientado G = (V, E), s e t por e exemplo. Um arco vital com respeito a esse c.m.c. um arco que, se retirado do grafo, e a distncia do c.m.c. de s a t aumenta. O arco mais vital aquele cuja retirada causa o a e maior aumento. Proponha um algoritmo para encontrar o arco mais vital dados G = (V, E), s e t. Analise a complexidade do seu algoritmo. 12. Seja G = (V, E) um grafo orientado e ac clico, com distncias le para e E , e s um a vrtice a partir do qual existe caminho para todos os demais vrtices do grafo. Proponha e e um algoritmo com complexidade O(m), m = |E|, para encontrar os c.m.c.s de s aos outros vrtices do grafo. (Dica: use ordenao topolgica.) e ca o

13. Suponha que foram obtidos os c.m.c.s de s aos outros vrtices de G e a rvore de c.m.c. e a conhecida. Suponha agora que as distncias de todos os arcos deve ser aumentada de k e a unidades (ou seja luv luv + k para todo arco e = (u, v) E). Proponha um algoritmo O(m) para obter os novos c.m.c.s. 14. Seja G = (V, E) um grafo conexo e no-orientado. O dimetro de um grafo o tamanho a a e do maior caminho-mais-curto (em quantidade de arestas) entre dois de seus vrtices. e (a) Elabore um algoritmo de complexidade O(n.(m + n)) que determine o dimetro de a G. (b) Considere que G ac e clico. Elabore um algoritmo de complexidade O(n) que determine o dimetro de G. a 15. Considere o problema de determinar o Fluxo Mximo de um vrtice s a um vrtice t em a e e um grafo orientado G = (V, E) onde os arcos e E tm capacidade igual ce . Lembre que e uma rede residual associada a um uxo f = (fe , e E) possui para cada arco e = (u, v) um arco (u, v) com capacidade ce fe se ce fe > 0 e um arco (v, u) com capacidade fe se fe > 0. Considere agora o algoritmo para encontrar o uxo mximo de s para t em a um grafo, abaixo:
Algoritmo FluxoMaximo (s - fonte, t - sumidouro) Passo 0: Inicializao ca Seja f = (f1 , . . . , fm ) o uxo corrente nos arcos de E, |E| = m. Seja R(f ) a rede residual do grafo G = (V, E) dado o uxo corrente f . f (0, . . . , 0) Passo 1: Iterao ca Enquanto existe caminho de s a t em R(f ) faa c 1.1 Encontre o caminho mais curto (em nmero de arcos) de s a t em R(f ). Seja p1, . . . , pk u esse caminho (que tem k arcos). 1.2 Seja q = min r(e) onde r(e) a capacidade do arco e na rede residual R(f ). e
e=p1,...,pk

1.3 Atualizao de f R(f ): Para e = p1, . . . , pk faa fe fe +q; Atualize R(f ). ca c

(a) Seja o grafo G = (V, E) onde V = {1, 2, 3, 4, 5, 6} e E = { (1, 2, 3), (1, 3, 3), (1, 4, 2), (2, 5, 4), (3, 4, 1), (3, 6, 2), (4, 2, 1), (4, 6, 2), (5, 4, 1), (5, 6, 1)}, onde os trios (u, v, c) indicam os vrtices de partida e de chegada e a capacidade do arco. Deseja-se e encontrar o uxo mximo de 1 para 6. a (b) Considere que todos os arcos do grafo G possuem capacidade unitria (ce = 1, para a todo e E). Sabendo que o uxo mximo no pode, neste caso, exceder m, mostre a a que a complexidade do algoritmo F luxoM aximo O(m2 ). e 16. Um grafo G = (V, E dito bi-partido se o seu conjunto de vrtices pode ser particionado e e em dois conjuntos V1 e V2 (V1 V2 = V e V1 V2 = ) tal que no existem arestas entre a vrtices de V1 nem entre vrtices de V2 , e todas as arestas de G ligam vrtices de V1 a e e e vrtices de V2 . Apresente um algoritmo de complexidade linear para determinar se G e e bi-partido ou no. a 4

17. Um emparelhamento (matching) um conjunto de arestas onde nenhum vrtice incide e e ( um dos vrtices da aresta) em mais de uma aresta neste conjunto. Considere eme e parelhamentos em um grafo bi-partido G = (V, W, E). Como se aplica o algoritmo de Fluxo Mximo acima para se encontrar o emparelhamento M , M E, de cardinalidade a mxima em G ? Apresente a anlise da complexidade do algoritmo proposto. a a 18. Uma oresta um grafo sem ciclos. Seja um grafo G = (V, E), no-orientado, onde e a os pesos das arestas e E so dados por we . Seja o problema de uma oresta com k a arestas, K n 1, de peso total m nimo, e o seguinte algoritmo:
Algoritmo K-Floresta M nima Passo 0: Inicializao ca Seja E = (e1 , . . . , em ) as arestas de G = (V, E), |E| = m. Seja S um conjunto de arestas. S Seja Gc = (V c , E(V c )) o grafo obtido pela contrao das arestas em S. ca V c obtido contraindo as arestas em S, isto , tornando os vrtices unidos pelas arestas de e e e S um s; o E(V c ) obtido determinando para cada (u, v) em V c a aresta de menor peso em E que e liga um vrtice contraido em u com um vrtice contraido em v, se existir uma tal aresta. e e Os vrtices de V que no foram contra e a dos aparecem em V c como antes, sozinhos. Se, por exemplo, tiver arestas ligadas a dois vrtices que se tornaram um s, apenas a aresta de e o menor peso aparecer em E(V c ). a Passo 1: Iterao ca Enquanto |S| < K faa c 1.1 Encontre as (K |S|)2 menores arestas em E(V c ). Seja A este conjunto de arestas. 1.2 Ordene A e inclua, em ordem crescente, as arestas em S sem que um ciclo seja formado em GS = (V, S) (o grafo s com as arestas em S). o 1.3 Atualizao: Obtenha o grafo Gc = (V c , E(V c )) ca Passo 2: Soluo ca Selecione as K menores arestas de S.

(a) Analise a complexidade do algoritmo acima. 19. Seja G = (V, E) um grafo orientado, com custos positivos e/ou negativos em seus arcos. Assuma que G = (V, E) no possui ciclo de custo negativo. Seja (u, v) o custo (soma a dos custos das arestas) do menor caminho existente entre dois vrtices u, v V . Seja e (u) = min (u, v). Caso no exista caminho entre u e v considere que (u, v) = +. a
vV

(a) Considere o grafo da gura abaixo, assuma que existem arcos em ambas as direoes. c Encontre (1) e (5). Modique os custos do arcos de modo que o vrtice mais e prximo do vrtice 1 no seja adjacente a ele. o e a (b) Elabore um algoritmo que determine (u) para todo u V de complexidade O(n2 .m) (c) Reduza esta complexidade para O(n.m) (d) Considere que todos os custos so positivos. Projete um algoritmo O(m). a

15

10

11 4

12

20. Seja G = (V, E) um grafo conexo, no-orientado, com pesos positivos e distintos em seus a arcos. Seja e uma aresta de G. Denote por T (e) a arvore geradora de G com custo m nimo dentre todas as arvore geradoras de G que contm e. e (a) Para o grafo do item 4.a, encontre T ((1, 2)), T ((2, 7)) e T ((3, 6)). (b) Projete um algoritmo que determine T (e) para todo e E de complexidade (n3 ) (c) Reduza a complexidade do algoritmo anterior para O(n.m). (d) Esta complexidade pode ainda ser reduzida para O(n2 ) como este algoritmo procede ? 21. Seja G = (N, A) um grafo orientado e ac clico. Um caminho hamiltoniano em G e um caminho que visita todos os vrtices de um grafo exatamente uma vez. Elabore e um algoritmo de complexidade O(n + m) que determine se um grafo orientado ac clico possui um caminho hamiltoniano. Dica: Quando uma ordenao topolgica implica na ca o existncia de um caminho Hamitoniano ? e

Anda mungkin juga menyukai