Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Construção e Análise de Algoritmos - Lista de exercícios 3, Exercícios de Análise de Sistemas de Engenharia

Universidade Federal do Ceará Centro de Ciências Departamento de Computação Mestrado e Doutorado em Ciência da Computação

Tipologia: Exercícios

2010

Compartilhado em 14/02/2010

ednaldo-miranda-6
ednaldo-miranda-6 🇧🇷

4

(1)

38 documentos

1 / 2

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Universidade Federal do Cear´a
Centro de Ciˆencias
Departamento de Computa¸ao
Mestrado e Doutorado em Ciˆencia da Computa¸ao
Constru¸ao e An´alise de Algoritmos
Lista de exerc´ıcios 3
Algoritmos Gulosos
1. O problema da sele¸ao de atividades ´e o problema de encontrar, numa dada cole¸ao de intervalos, uma
subcole¸ao de tamanho aximo de intervalos dois a dois disjuntos. Nem todo algoritmo guloso resolve esse
problema. Mostre que nenhuma das trˆes id´eias a seguir resolve o problema. Id´eia 1: Escolha a atividade
de menor dura¸ao dentre as que ao compat´ıveis com as atividades a escolhidas. Id´eia 2: Escolha uma
atividade que seja compat´ıvel com as a escolhidas e intercepta o menor umero poss´ıvel de atividades ainda
ao escolhidas. Id´eia 3: Escolha a atividade compat´ıvel com as a selecionadas que tenha o menor instante
de in´ıcio.
2. Desenhe um grafo qualquer com pelo menos oito ertices (A at´e H) e quinze arestas com pesos diferentes
entre si. Mostre passo a passo a aplica¸ao dos algoritmos de Kruskal e de Prim sobre esse grafo. Mostre
ainda a aplica¸ao do algoritmo de Dijkstra para o ertice A.
3. Escreva um algoritmo que obtenha um odigo de Huffman tern´ario, ou seja, um odigo de Huffman em
que podemos codificar os ımbolos com 0, 1 e 2. Escreva agora um algoritmo que obtenha um odigo de
Huffman ao-contr´ario, ou seja, obtenha o pior odigo de prefixo poss´ıvel. Exemplifique esses dois algoritmos
e tamb´em o odigo de Huffman normal para o seguinte exemplo: um texto com 100.000 caracteres onde os
s´ımbolos ao A, B, C, D, E, F e G com frequˆencias 40%, 15%, 11%, 10%, 14%, 7% e 5%. Quantos bits
esse texto codificado ter´a nesses algoritmos? Quantos bits esse texto teria se us´assemos uma codifica¸ao de
tamanho fixo? Compare cada algoritmo: melhorou ou piorou?
4. Considere um conjunto de livros numerados de 1 a n. Suponha que o livro item peso pie que 0 < pi<1
para cada i. Problema: Dado ne os umeros p1, . . . , pn, acondicionar os livros no menor umero poss´ıvel
de envelopes de modo que cada envelope tenha no aximo 2 livros e o peso do conte´udo de cada envelope
seja no aximo 1. Escreva um algoritmo eficiente que resolva esse problema. Aplique seu algoritmo a um
exemplo interessante. Mostre que seu algoritmo est´a correto.
5. Escreva um algoritmo eficiente que receba como entrada um conjunto de vari´aveis x1, . . . , xne dois
conjuntos IeDde pares (xi, xj) de vari´aveis. Os pares (xi, xj) em Irepresentam restri¸oes de igualdade
xi=xje os pares (xa, xb) em Drepresentam restri¸oes de desigualdade xa6=xb. Seu algoritmo deve
responder se ´e poss´ıvel ou ao satisfazer todas as restri¸oes em Ie em D. Por exemplo, a seguinte entrada
ao ´e satisfat´ıvel: I={(x1, x2),(x2, x3),(x3, x4)}eD={(x1, x4)}.
6. Miguel deseja fazer uma festa e est´a decidindo quem deve chamar. Ele tem namigos para convidar e
tem uma lista dos pares de amigos que se conhecem. Ele quer que ningu´em se sinta deslocado, mas tamb´em
quer que a festa seja interessante e que pessoas que ao se conhecem fa¸cam amizade. Assim ele se colocou as
seguintes restri¸oes: Para cada convidado, devem existir pelo menos dez pessoas na festa que ele conhece e
dez pessoas na festa que ele ao conhece. Fca um algoritmo que receba uma lista com npessoas e uma lista
com os pares dessas pessoas que se conhecem e devolva o maior umero pessoas que poder˜ao ser convidadas
sob estas restri¸oes. (a) Descreva com palavras como ser´a o seu algoritmo. (b) Escreva o algoritmo em
pseudo-c´odigo.
pf2

Pré-visualização parcial do texto

Baixe Construção e Análise de Algoritmos - Lista de exercícios 3 e outras Exercícios em PDF para Análise de Sistemas de Engenharia, somente na Docsity!

Universidade Federal do Cear´a Centro de Ciˆencias Departamento de Computa¸c˜ao Mestrado e Doutorado em Ciˆencia da Computa¸c˜ao

Constru¸c˜ao e An´alise de Algoritmos

Lista de exerc´ıcios 3 Algoritmos Gulosos

  1. O problema da sele¸c˜ao de atividades ´e o problema de encontrar, numa dada cole¸c˜ao de intervalos, uma subcole¸c˜ao de tamanho m´aximo de intervalos dois a dois disjuntos. Nem todo algoritmo guloso resolve esse problema. Mostre que nenhuma das trˆes id´eias a seguir resolve o problema. Id´eia 1: Escolha a atividade de menor dura¸c˜ao dentre as que s˜ao compat´ıveis com as atividades j´a escolhidas. Id´eia 2: Escolha uma atividade que seja compat´ıvel com as j´a escolhidas e intercepta o menor n´umero poss´ıvel de atividades ainda n˜ao escolhidas. Id´eia 3: Escolha a atividade compat´ıvel com as j´a selecionadas que tenha o menor instante de in´ıcio.
  2. Desenhe um grafo qualquer com pelo menos oito v´ertices (A at´e H) e quinze arestas com pesos diferentes entre si. Mostre passo a passo a aplica¸c˜ao dos algoritmos de Kruskal e de Prim sobre esse grafo. Mostre ainda a aplica¸c˜ao do algoritmo de Dijkstra para o v´ertice A.
  3. Escreva um algoritmo que obtenha um c´odigo de Huffman tern´ario, ou seja, um c´odigo de Huffman em que podemos codificar os s´ımbolos com 0, 1 e 2. Escreva agora um algoritmo que obtenha um c´odigo de Huffman ao-contr´ario, ou seja, obtenha o pior c´odigo de prefixo poss´ıvel. Exemplifique esses dois algoritmos e tamb´em o c´odigo de Huffman normal para o seguinte exemplo: um texto com 100.000 caracteres onde os s´ımbolos s˜ao A, B, C, D, E, F e G com frequˆencias 40%, 15%, 11%, 10%, 14%, 7% e 5%. Quantos bits esse texto codificado ter´a nesses algoritmos? Quantos bits esse texto teria se us´assemos uma codifica¸c˜ao de tamanho fixo? Compare cada algoritmo: melhorou ou piorou?
  4. Considere um conjunto de livros numerados de 1 a n. Suponha que o livro i tem peso pi e que 0 < pi < 1 para cada i. Problema: Dado n e os n´umeros p 1 ,... , pn, acondicionar os livros no menor n´umero poss´ıvel de envelopes de modo que cada envelope tenha no m´aximo 2 livros e o peso do conte´udo de cada envelope seja no m´aximo 1. Escreva um algoritmo eficiente que resolva esse problema. Aplique seu algoritmo a um exemplo interessante. Mostre que seu algoritmo est´a correto.
  5. Escreva um algoritmo eficiente que receba como entrada um conjunto de vari´aveis x 1 ,... , xn e dois conjuntos I e D de pares (xi, xj ) de vari´aveis. Os pares (xi, xj ) em I representam restri¸c˜oes de igualdade xi = xj e os pares (xa, xb) em D representam restri¸c˜oes de desigualdade xa 6 = xb. Seu algoritmo deve responder se ´e poss´ıvel ou n˜ao satisfazer todas as restri¸c˜oes em I e em D. Por exemplo, a seguinte entrada n˜ao ´e satisfat´ıvel: I = {(x 1 , x 2 ), (x 2 , x 3 ), (x 3 , x 4 )} e D = {(x 1 , x 4 )}.
  6. Miguel deseja fazer uma festa e est´a decidindo quem deve chamar. Ele tem n amigos para convidar e tem uma lista dos pares de amigos que se conhecem. Ele quer que ningu´em se sinta deslocado, mas tamb´em quer que a festa seja interessante e que pessoas que n˜ao se conhecem fa¸cam amizade. Assim ele se colocou as seguintes restri¸c˜oes: Para cada convidado, devem existir pelo menos dez pessoas na festa que ele conhece e dez pessoas na festa que ele n˜ao conhece. Fa¸ca um algoritmo que receba uma lista com n pessoas e uma lista com os pares dessas pessoas que se conhecem e devolva o maior n´umero pessoas que poder˜ao ser convidadas sob estas restri¸c˜oes. (a) Descreva com palavras como ser´a o seu algoritmo. (b) Escreva o algoritmo em pseudo-c´odigo.
  1. Nesta quest˜ao, n´os construiremos um novo algoritmo para encontrar a ´arvore de custo m´ınimo. Ele ´e baseado na seguinte propriedade: Pegue um ciclo do grafo e seja (x, y) a aresta de maior custo nesse ciclo. Ent˜ao existe uma ´arvore de custo m´ınimo que n˜ao cont´em (x, y).

(a) Prove essa propriedade cuidadosamente

(b) Prove que o seguinte algoritmo est´a correto: Ordene as arestas de modo decrescente de acordo com os custos das arestas. Para cada aresta (x, y) nessa ordem: se (x, y) pertence a um ciclo do grafo, remova (x, y) do grafo. Retorne o grafo modificado.

(c) Em cada itera¸c˜ao, o algoritmo acima deve checar se existe um ciclo contendo uma certa aresta (x, y). Escreva um algoritmo O(m) para essa tarefa e justifique sua corre¸c˜ao, onde m ´e o n´umero de arestas.

(d) Calcule a complexidade de tempo do seu algoritmo em termos de m.

  1. Seja 1,... , n um conjunto de tarefas. Cada tarefa consome um dia de trabalho; durante um dia de trabalho somente uma das tarefas pode ser executada. Os dias de trabalho s˜ao numerados de 1 a n. A cada tarefa T est´a associado um prazo PT : a tarefa deveria ser executada em algum dia do intervalo 1,... , PT. A cada tarefa T est´a associada uma multa n˜ao-negativa MT. Se uma dada tarefa T ´e executada depois do prazo PT , sou obrigado a pagar a multa MT (mas a multa n˜ao depende do n´umero de dias de atraso). Problema: Programar as tarefas (ou seja, estabelecer uma bije¸c˜ao entre as tarefas e os dias de trabalho) de modo a minimizar a multa total. Escreva um algoritmo guloso para resolver o problema. Prove que seu algoritmo est´a correto. Analise o consumo de tempo.