PUC-Rio
Departamento de Informática
Profs. Marcus Vinicius S. Poggi de Aragão
Período: 2002.2
12 de outubro de 2002
Horário: 2as-feiras e 4as-feiras de 16 às 18 horas
ANÁLISE DE ALGORITMOS (INF 1721)
2a Lista de Exercícios
-
Dado um grafo não-orientado G=(V,E) e pesos we, e Î
E, associados às arestas, proponha algoritmos, com suas respectivas
estruturas de dados, para as seguintes operações:
-
Dado um conjunto X Ì V, encontrar o valor do corte
definido por X: å(i,j)| i Î X j Î V-Xw(i,j).
Isto é, a soma dos pesos associados às arestas com uma extremidade em
X e outra em V-X.
- Calcular o novo valor de um corte quando um elemento, j, é
retirado do conjunto X. A complexidade deve ser O(n2). Explique
por que essa operação é W (n2).
- Obter o elemento (vértice) cuja retirada do conjunto X impõe a maior
redução sobre o valor do corte. Qual a complexidade de se obter
a variação no valor do corte para a saída de cada vértice.
- Dado que as variações estão disponíveis, antes da retirada de um
dado vértice, proponha um algoritmo O(n) para determinar as variações
(para todos os vértices) após a retirada do vértice dado.
- Proponha um algoritmo para fazer a retirada sucessiva de todos
elementos em X, a cada iteração retira-se sempre o que corresponde
à maior redução (ou menor aumento, caso não seja possível uma redução).
O algoritmo deve executar em O(n2).
- Repita os itens acima para a inclusão dos elementos que não
estão em X.
- Repita agora os itens acima para a inclusão dos elementos que não
estão em X e a exclusão dos que não estão.
- Apresente um algoritmo para transformar o problema (MC)
no problema (MS) em tempo linear.
Clique-Máximo (MC) - Dado um grafo não-orientado G=(V,A) e
uma constante K.
Pergunta-se se este grafo G possui um clique (isto é um sub-grafo
completo) de cardinalidade maior ou igual à K.
Estável-Máximo (MS) - Dado um grafo não-orientado G=(V,A)
e uma constante K.
Pergunta-se se este grafo G possui um conjunto de vértices
independentes (isto é, um conjunto de vértices onde não existe
aresta entre nenhum par do conjunto) de cardinalidade maior ou igual
à K.
- Apresente um algoritmo para transformar o problema (PART)
no problema (KP) em tempo linear.
(PART)
Instância: Dado um conjunto de elementos X={x1, x2, ..., xn}
e seu respectivos tamanhos T={t1, t2, ..., tn }.
Questão: Existe um subconjunto S de X tal que åxi Î S
Ti = åxi Î X-S Ti ?
(KP)
Instância: Dado um conjunto de elementos X={x1, x2, ..., xn},
seus respectivos tamanhos T={t1, t2, ..., tn } e seus
respectivos valores V={v1, v2, ..., vn }, e as constantes
T0 e V0.
Questão: Existe um subconjunto de S de X tal que a soma dos tamanhos dos
elementos em S seja menor ou igual a T0 e tal que a soma dos seus
respectivos valores seja superior ou igual a V0 ?
- Considere o algoritmo de Dijkstra para encontrar o caminho mais
curto entre um vértice fonte e os demais vértices de um grafo
orientado G=(V,E) onde a distância associada a um arco e Î E
é dada por le = lvw onde v e w são o vértice de partida
e de chegada do arco e, respectivamente. (As complexidades devem ser
obtidas em função de n=|V| e m=|E|).
Algoritmo Dijkstra (s - fonte)
-
Passo 0: Inicialização
Seja S o conjunto de vértices com caminho mais curto a partir de s
determinado, e S seu complemento (S = V - S).
S ¬ Ø
d(i) ¬ +¥ " i Î V;
d(s) ¬ 0; pred(s) ¬ 0;
- Passo 1: Iteração
-
Enquanto S Ì V faça
-
1.1 Encontre v Î S t.q. d(v) = minw Î S d(w)
- 1.2 S ¬ S È { v }; S ¬ S \ { v };
- 1.3 Para todo w Î G+ (v)
Se d(v) + lvw < d(w)
então d(w) ¬ d(v) + lvw; pred(w) ¬ v;
Responda aos itens abaixo:
-
Considere que o passo 1.1 é realizado através do uso de um vetor que
armazena os valores d(i), i=1,...,n. Qual a complexidade deste
passo (uma execução) ? Qual a complexidade total (soma de todas as
execuções) deste mesmo passo (1.1) ?
- Repita esta análise para os passos (1.2) e (1.3).
- Qual a complexidade global desta implementação do algoritmo de
Dijkstra ?
- Onde poderia ser usada uma heap ? Por que isso poderia ser
bom ?
- Sejam P1, P2 e P3 três problemas tais que
P1 an P2 an3logn P3 (i.e.,
P1 é redutível a P2 em tempo
linear e P2 a P3 em tempo n3 log n). Assuma a hipótese
de que P1 é W(n log n). Assuma também que você conhece um
algoritmo O (n3) para resolver P3.
Discuta as afirmações abaixo.
-
O que você pode dizer sobre a complexidade de resolução de
P2 ? Qual a complexidade do melhor algoritmo que você conhece
para P2 ?
- Todo algoritmo que resolve P2 tem que gastar pelo menos
tempo quadrático (P2 é W(n2)).
- W(n log n) é um limite inferior para a
complexidade de P3.
- P2 pode ser resolvido no pior caso em tempo O(n log n).
- Considere uma árvore T=(V,E) com distâncias de associadas
às arestas. Deseja-se construir uma matriz n × n contendo
as distâncias entre cada para de vértices sobre T. Considere
que T é dada no formato de lista de adjacência. Deseja-se um
algoritmo O(n2) para se construir a matriz de distâncias.
-
Suponha que 2n alunos querem entrar em n universidades.
Cada universidade vai receber no máximo 2 alunos e você conhece
a lista de universidades que aceitaram cada aluno.
Deseja-se alocar os alunos às universidades de modo que o máximo
de alunos ingressem nas universidades. Formule esse
problema como um problema de Alocação/Emparelhamento em um
grafo bi-partido. Lembre que você deve especificar uma instância
do problema de Alocação que resolve esse problema, isto é, definir
a matriz de custos de atribuição.
-
Considere o seguinte problema:
(CMG) Caminho de menor Gargalo: Dado um grafo não-orientado
G=(V,E) com distâncias de associadas
às arestas, e um vértice r, determinar os caminhos de
r a todos os demais vértices, cuja maior aresta é o menor
possível.
Transforme o problema de encontrar a Árvore Geradora Mínima
em grafo no problema (CMG).
-
Considere um grafo não-orientado
G=(V,E) com pesos we associados
às arestas.
Um conjunto F Í E é chamado de conjunto de arestas
de realimentação se todos os ciclos em G contém pelo menos
uma aresta de F. Deseja-se encontrar o conjunto F de menor
peso.
Transforme este problema no de encontrar a árvore geradora de peso
máximo (dê um algoritmo para esse problema).
Dica: Observe que o grafo obtido retirando as arestas em F
de G=(V,E) não pode conter ciclos (por que ?).
This document was translated from LATEX by HEVEA.