Universidade Federal do Rio de Janeiro
Escola Politécnica – MBA em Engenharia de Software
EEL 650 – Análise e Implementação de Algoritmos
Turma ENGSOFT32 – Prof. Heraldo L. S. Almeida
Trabalho Prático para Avaliação de Aproveitamento
Descrição do Trabalho:
1) Escolher e descrever um problema cuja resolução requeira a execução de algoritmos
computacionais que não sejam triviais.
2) Descrever um algoritmo que possa ser utilizado para resolver o problema.
3) Analisar o algoritmo escolhido em termos de complexidade de tempo (como o tempo de
execução aumenta em função com o tamanho do problema).
4) Implementar o algoritmo escolhido na linguagem de programação de sua preferência e
medir o tempo de execução para problemas de diferentes tamanhos, plotar um gráfico e
analisar os resultados obtidos, comparando a taxa de crescimento observada
experimentalmente com a previsão da análise teórica desenvolvida no item 3.
Regras:
• O trabalho poderá ser feito em grupos de até 5 alunos.
• Poderão ser escolhidos tanto problemas clássicos da literatura de ciência da computação (ver
lista de sugestões em anexo), quanto problemas práticos específicos, relacionados a
necessidades reais de pessoas ou de empresas com as quais o aluno se relacione.
• Cada grupo deve enviar um e-mail contendo o nome dos componentes do grupo e o tema
escolhido para o endereço eletrônico [email protected] até o dia 08/10/2018. No caso de tema
existente na lista de sugestões em anexo, basta mencionar o título do tema. Já no caso de um
tema proposto pelos próprios alunos, deve ser incluída uma descrição do problema escolhido
e dos tipos de algoritmos a serem investigados.
• Temas escolhidos pelos alunos estarão sujeitos à aprovação do professor.
• Dois grupos não podem escolher o mesmo tema, ou temas muito semelhantes. No caso de
conflito, o grupo que tiver se manifestado mais tarde deverá escolher outro tema.
• Os trabalhos finais deverão ser enviados em formato Word ou PDF, juntamente com o
código-fonte dos programas desenvolvidos, ao endereço eletrônico [email protected] até o
dia 23/10/2018.
• O professor estará à disposição para esclarecer dúvidas e ajudar no que for necessário,
podendo ser acessado, a qualquer tempo, até o prazo final de entrega do trabalho, no
endereço eletrônico acima.
1. Ordenação Topológica (topological sorting)
Formulação Teórica:
Dado um grafo orientado e acíclico com n vértices v1, v2, ... vn, ordenar os vértices de modo que,
para toda aresta (vi ; vj), o vértice vi anteceda o vértice vj.
Entrada: Saída:
→
Exemplo Prático:
A grade curricular de um curso universitário possui n disciplinas v1, v2, ... vn , sendo que algumas
dentre estas disciplinas podem ter uma ou várias dentre as outras disciplinas da grade como pré-
requisito.
O algoritmo deve determinar uma ordem válida em que um aluno possa cursar as n disciplinas da
grade sem violar nenhum pré-requisito.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Topological_sorting
• http://www.cs.sunysb.edu/~algorith/files/topological-sorting.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulo 22.
2. Árvore de Cobertura de Extensão Mínima
(minimum spanning tree)
Formulação Teórica:
Dado um grafo com n vértices v1, v2, ... vn e os custos cij para inserção de arestas interligando cada
par de vértices vi e vj, para i=1,2,...,n e j=1,2,...,n, determinar um conjunto de arestas de custo total
mínimo que forme uma árvore abrangendo todos os n vértices.
Entrada: Saída:
→
Exemplo Prático:
Uma empresa de telefonia precisa interligar n localidades v1, v2, ... vn por meio de fibras óticas,
sendo que o custo necessário para interligar diretamente duas localidades vi e vj é conhecido e dado
por cij, para i=1,2,...,n e j=1,2,...,n.
O algoritmo deve determinar uma solução de custo mínimo para implementar uma rede de fibra
ótica interligando todas as n localidades.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Minimum_spanning_tree
• http://www.cs.sunysb.edu/~algorith/files/minimum-spanning-tree.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulo 23.
3. Caminhos mínimos (shortest paths)
Formulação Teórica:
Dado um grafo orientado com n vértices v1, v2, ... vn , m arestas a1, a2, ... am e custos c1, c2, ... cm
associados a cada aresta, determinar:
• o caminho de menor custo entre um vértice-origem vi e um vértice-destino vj
• os caminhos de menor custo entre um vértice-origem vi e todos os demais vértices do grafo
• os caminhos de menor custo entre todos os demais vértices do grafo e um vértice-destino vj
• os caminhos de menor custo entre todos os pares de vértices do grafo
Entrada: Saída:
→
Exemplo Prático:
Em um país existem n cidades v1, v2, ... vn e as companhias aéreas oferecem m vôos a1, a2, ... am
interligando algumas dessas cidades, cujos custos são dados por c1, c2, ... cm.
Os algoritmos devem determinar:
• o roteiro aéreo de menor custo total entre uma cidade-origem vi e um cidade-destino vj
• os caminhos de menor custo entre um vértice-origem vi e todos os demais vértices do grafo
• os caminhos de menor custo entre todos os demais vértices do grafo e um vértice-destino vj
• os caminhos de menor custo entre todos os pares de vértices do grafo
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Shortest_path_problem
• http://www.cs.sunysb.edu/~algorith/files/shortest-path.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulos 23 e 24.
4. Inspeção de Rotas (route inspection)
Formulação Teórica:
Dado um grafo orientado com n vértices v1, v2, ... vn , m arestas a1, a2, ... am e custos c1, c2, ... cm
associados a cada aresta, determinar o roteiro de menor custo que percorre cada aresta pelo menos
uma vez.
Entrada: Saída:
→
Exemplo Prático:
Os caminhões de uma empresa de coleta de lixo precisam percorrer diariamente m ruas a1, a2, ... am,
cujos comprimentos são dados por c1, c2, ... cm, e que se interceptam em n esquinas.
Determinar um roteiro que minimize a quilometragem total rodada diariamente pelos caminhões da
empresa.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Route_inspection_problem
• http://www.cs.sunysb.edu/~algorith/files/eulerian-cycle.shtml
5. Fluxo Máximo em Redes (maximum network flow)
Formulação Teórica:
Dado um grafo orientado com n vértices v1, v2, ... vn , m arestas a1, a2, ... am e capacidades máximas
c1, c2, ... cm associadas a cada aresta, determinar fluxos f1, f2, ... fm tais que 0 fi ci , i=1,2,...,n em
cada aresta de modo que o fluxo total roteado de um vértice-origem vi para um vértice-destino vj
seja o máximo possível.
Entrada: Saída:
→
Exemplo Prático:
Seja uma rede de comunicação de dados com n roteadores v1, v2, ... vn interligados por m canais de
comunicação a1, a2, ... am, cujas capacidades máximas (em pacotes por segundo) disponíveis em um
dado momento sejam dadas por c1, c2, ... cm, respectivamente.
Determinar as quantidades de pacotes por segundo f1, f2, ... fm tais que 0 fi ci , i=1,2,...,n que
cada roteador deve transmitir por meio de cada canal de comunicação para que a taxa de
transmissão de dados de um roteador-origem vi para um roteador-destino vj seja a máxima possível.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Maximum_flow_problem
• http://www.cs.sunysb.edu/~algorith/files/network-flow.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulo 26.
6. Cobertura de Conjunto (set cover)
Formulação Teórica:
Dados m subconjuntos de um conjunto S composto de n elementos, determinar a menor quantidade
de subconjuntos que cobrem todos os elementos de S.
Entrada: Saída:
→
Exemplo Prático:
Uma empresa de assistência técnica tem contratos de manutenção cobrindo n tipos diferentes de
máquinas e possui em seu quadro de funcionários m técnicos. Cada técnico tem capacitação para
dar suporte a um ou mais dentre os n tipos de máquinas cobertos pela empresa.
Surgiu a necessidade de se reduzir ao mínimo possível a folha de pagamento da empresa, por meio
da demissão do maior número possível de técnicos.
Determinar uma equipe composta pelo menor número possível de técnicos que, conjuntamente,
sejam capazes de dar cobertura a todos os n tipos de máquinas cobertos pelos contratos de
manutenção em vigor.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Set_cover
• http://www.cs.sunysb.edu/~algorith/files/set-cover.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulo 35.
7. Empacotamento de Conjunto (set packing)
Formulação Teórica:
Dados m subconjuntos de um conjunto S composto de n elementos, determinar a maior quantidade
de subconjuntos que são disjuntos.
Entrada: Saída:
→
Exemplo Prático:
Uma linha de produção possui n máquinas diferentes e produz m produtos diferentes.
Cada produto requer a utilização de uma ou mais dentre as m máquinas disponíveis, sendo que
produtos que requerem uma mesma máquina não podem ser produzidos simultaneamente.
Determinar a quantidade máxima de produtos que podem ser produzidos simultaneamente.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Set_packing
• http://www.cs.sunysb.edu/~algorith/files/set-packing.shtml
8. Casamento de Sequências (string matching)
Formulação Teórica:
Dados
• um alfabeto composto por p caracteres (exemplos: ={a,b,c,...,z} para textos, ={0,1}
para sequências binárias ou ={A,C,G,T} para sequências genéticas)
• uma sequência s composta por n caracteres do alfabeto
• uma sequência r composta por m caracteres do alfabeto , tal que m n
localizar todas as subsequências de s que sejam exatamente iguais a r.
Entrada: Saída:
→
Exemplo Prático:
Localizar todas as ocorrências de uma string de m caracteres em um texto de n caracteres.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/String_matching
• http://www.cs.sunysb.edu/~algorith/files/string-matching.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulo 32.
9. Casamento Aproximado de Sequências
(approximate string matching)
Formulação Teórica:
Dados
• um alfabeto composto por p caracteres (exemplos: ={a,b,c,...,z} para textos, ={0,1}
para sequências binárias ou ={A,C,G,T} para sequências genéticas)
• uma sequência s composta por n caracteres do alfabeto
• uma sequência r composta por m caracteres do alfabeto
localizar todas as subsequências de s que possuam a mínima distância de edição de r, onde o
conceito de distância de edição corresponde ao número mínimo de operações elementares de
inserção, substituição e remoção de caracteres que precisam ser feitas para que a subsequência
original seja transformada em uma sequência exatamente igual a r.
Entrada: Saída:
→
Exemplos Práticos:
• Dada uma palavra inexistente em um dicionário, obter uma lista das palavras existentes
nesse dicionário que sejam mais parecidas com a palavra dada.
• Dada a sequência de m nucleotídeos de um gen específico em uma espécie animal, localizar
a sequência mais parecida que existir na sequência de n nucleotídeos correspondente ao
genoma humano (supõe-se que a sequência a ser encontrada no genoma humano
corresponda a um gen com a mesma função do gen localizado no animal, com pequenas
modificações evolutivas).
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Approximate_string_matching
• http://www.cs.sunysb.edu/~algorith/files/approximate-pattern-matching.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulo 32.
10. Compressão de Dados (data compression)
Formulação Teórica:
Dados
• um alfabeto composto por p caracteres (exemplos: ={a,b,c,...,z} para textos, ={0,1}
para sequências binárias ou ={A,C,G,T} para sequências genéticas)
• uma sequência s composta por n caracteres do alfabeto
determinar uma sequência r de comprimento mínimo tal que a sequência original s possa ser
recuperada a partir da sequência r.
Entrada: Saída:
→
Exemplo Prático:
Compactar um arquivo de tamanho n, codificado em um alfabeto composto por p símbolos distintos
em um arquivo de tamanho mínimo possível, que permita recuperar posteriormente o arquivo
original.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Data_compression
• http://www.cs.sunysb.edu/~algorith/files/text-compression.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulo 16.
11. Máxima Subsequência Comum
(longest common subsequence)
Formulação Teórica:
Dados
• um alfabeto composto por p caracteres (exemplos: ={a,b,c,...,z} para textos, ={0,1}
para sequências binárias ou ={A,C,G,T} para sequências genéticas)
• m sequências s1, s2,...,sm, cada uma composta por n caracteres do alfabeto
determinar a mais longa subsequência comum a todas as m sequências.
Entrada: Saída:
→
Exemplo Prático:
Determinar a mais longa subsequência comum entre gens similares de diferentes espécies, visando
identificar características funcionais básicas daquele gen que são comuns em todas as espécies
estudadas.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Longest_common_subsequence_problem
• http://www.cs.sunysb.edu/~algorith/files/longest-common-substring.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulo 15.
12. Programação de Linha de Montagem
(assembly line scheduling)
Formulação Teórica:
Dado um grafo orientado com n vértices v1, v2, ... vn , m arestas a1, a2, ... am e custos c1, c2, ... cm
associados a cada aresta, determinar o caminho de menor custo entre um vértice qualquer dentre um
subconjunto de possíveis vértices-origem e um vértice qualquer dentre um subconjunto de possíveis
vértices-destino.
Entrada: Saída:
→
Exemplo Prático:
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Job_Shop_Scheduling
• http://www.cs.sunysb.edu/~algorith/files/scheduling.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulo 15.
13. Problema do Encaixotamento (bin packing problem)
Formulação Teórica:
Dados
• n itens de d dimensões com medidas xi1,xi2,...,xid, pra i=1,2,...,n
• um número ilimitado de “caixotes” de d dimensões, todos do mesmo tamanho, com
dimensões xo1,xo2,...,xod
determinar o número mínimo de “caixotes” necessários para empacotar todos os n itens,
juntamente com a distribuição e organização dos itens no interior dos “caixotes”.
Entrada: Saída:
→
Exemplo Prático:
Acomodar n embalagens com dimensões (x1 ; y1 ; z1), (x2 ; y2 ; z2), ... , (xn ; yn ; zn) em containers com
dimensões (xo ; yo ; zo), utilizando o menor número possível de containers.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Bin_packing_problem
• http://www.cs.sunysb.edu/~algorith/files/bin-packing.shtml
14. Problema do Caixeiro Viajante
(travelling salesman problem)
Formulação Teórica:
Dado um grafo ponderado completo, com n vértices v1, v2, ... vn e custos cij, para i=1,2,...,n,
associados a cada aresta interligando os vértices vi e vj, encontrar um caminho fechado de custo
mínimo que percorra todos os n vértices.
Entrada: Saída:
→
Exemplo Prático:
Um braço de robô precisa soldar n pontos em uma placa de circuito impresso. As coordenadas das
posições de cada ponto de solda na superfície da placa são dadas por (x1 ; y1), (x2 ; y2), ... , (xn ; yn).
O braço do robô pode se mover em qualquer direção, sempre em velocidade constante.
Determine a ordem em que os n pontos de solda devem ser processados para que o tempo total de
soldagem da placa seja mínimo.
Dicas de Pesquisa:
• http://en.wikipedia.org/wiki/Travelling_salesman_problem
• http://www.cs.sunysb.edu/~algorith/files/traveling-salesman.shtml
• Livro Cormen, Leiserson, Rivest & Stein, “Algoritmos: Teoria e Prática”, capítulo 35.