TRABALHO 2 – ORDENAÇÃO
A envoltória convexa de um conjunto Q de pontos de pontos, denotada por CH(Q), é o
menor polígono convexo P para o qual cada ponto em Q está no contorno de P ou em seu interior.
Figura: Envoltória Convexa
O algoritmo para calcular a CH de um conjunto de pontos é muito simples e depende
basicamente de uma ordenação particular destes pontos. A tarefa da equipe é determinar quais
algoritmos de ordenação, incluindo diferentes variantes, é mais adequado para diversos conjuntos
de pontos.
Envoltória Convexa
Uma breve explicação sobre um dos algoritmos (Graham Scan) para o cálculo da envoltória
convexa pode (deve) ser vista no YouTube:
https://youtu.be/0HZaRu5IupM
Outros materiais são facilmente encontrados usando as palavras-chave: convex hull,
computational geometry, graham scan.
Algoritmos de Ordenacao
Os algoritmos de ordenação a serem implementados são o quicksort, o mergesort e o
insertion sort.
O quicksort é um algoritmo, na prática, O(nlogn). Porém, seu desempenho, em pior caso, é
2
O(n ). Na literatura são descritas providências que minimizam grandemente a probabilidade de
ocorrer o pior caso, entre elas, o embaralhamento (shuffling) e a mediana de 3. Para tentar otimizar
o tempo de execução (mas, não o comportamento assintótico), pode-se substituir a recursão do
algoritmo por uma pilha. Espera-se que a equipe, portanto, faça 4 implementações do algoritmo
quicksort: (a) implementação básica, cujo o pivô é o primeiro elemento do vetor; (b) com
embaralhamento; (c) escolha do pivô determinado pela mediana de 3; (d) eliminação da recursão.
O mergesort é um algoritmo O(nlogn), porém, quando o subvetor a ser ordenado for
pequeno, pode ser que valha a pena usar o insertion sort para ordená-lo. Portanto, espera-se que a
equipe faça duas implementações: (a) a implementação padrão e (b) com utilização do insertion sort
para ordenar pequenos subvetores.
As implementações devem contar: (a) o número de comparações; (b) número de trocas; (c)
tempo de execução, a fim de que possam ser produzidos gráficos comparativos entre as diversas
implementações e diversos cenários de execução.
A Entrada
A entrada do algoritmo será basicamente um conjunto de pontos (em coordenadas
cartesianas). As coordenadas serão sempre valores inteiros e estarão contidas dentro da região
delimitada pelo retângulo (0,0), (xmax,ymax).
Figura: Retângulo que contém os pontos
O arquivo de entrada consistirá de uma sequência de pontos: um ponto por linha. Na primeira linha
serão colocados três números inteiros: o número de pontos no arquivo, xmax e ymax.
12 310 260
220 10
300 210
170 250
60 234
220 60
200 80
280 190
130 200
180 230
200 120
215 150
225 180
a001.pts
A Saída
O programa deverá produzir um arquivo .svg mostrando todos os pontos do arquivo de
entrada e a envoltória convexa. Existem várias ferramentas que renderizam arquivos .svg.
A figura abaixo mostra um exemplo de arquivo svg e sua respectiva renderização.
Figura: Arquivo .svg (fonte e renderizado)
O Programa
O nome do programa deve ser ch e aceitar dois parâmetros:
ch -f arq.pts -o dir
O primeiro parâmetro (-f ) especifica o nome de um arquivo de pontos e o segundo parâmetro (-o)
indica o diretório onde o arquivo de saída (arq.svg) deve ser colocado. Os eventuais arquivos
com os dados sobre execução do programa devem ser colocados no diretório dir/dat.
A Avaliação
Espera-se uma atitude pró-ativa para a aquisição dos conhecimentos (i.e., estudo) para
resolver o problema proposto. O principal problema a ser resolvido é determinar o melhor método
de ordenação para o cálculo da envoltória convexa de um conjunto de pontos. Outros problemas
menores também deverão ser resolvidos, entre eles: como implementar as diversas variações dos
algoritmos de ordenação, como medir e comparar o desempenho de cada um das variações;
determinar se alguma variante de ordenação é mais adequada para algum padrão de dados de
entrada.
A avaliação se baseará em três critérios: (a) avaliação de um artigo escrito pela equipe ; (b)
compilação e testes do executável (a equipe deve entregar os fontes); (c) apresentação do artigo
(max 30 minutos). Note que apenas algumas equipes apresentarão o trabalho (sorteio). Também
será sorteado qual membro da equipe fará a apresentação (ambos membros devem estar preparados
para fazer integralmente a apresentação).
O Que Entregar
Submeter a sala Moodle três arquivos:
•
nome1-nome2.zip: com os fontes do programa um makefile. Este makefile deve ter (pelo
menos) o target ch que deve produzir o arquivo executável.
•
nome1-nome2.pdf: artigo científico de 8 a 10 páginas descrevendo o problema, a solução
que a equipe adotou e as conclusões da equipe. Alguns destes artigos poderão ser
submetidos à Revista Eletrônica de Iniciação Científica da SBC (http://seer.ufrgs.br/reic).
Caso o artigo seja aceito pela revista antes do fechamento das notas da disciplina, os
membros da equipe obterão algum bônus em suas médias finais.
•
slides da apresentação: preferencialmente .pdf. Também são aceitos em .odp e .ppt.
Note que nome1-nome2 é alguma abreviatura do nome de cada um dos membros da equipe.
A abreviatura só deve conter letras (por exemplo, jlsilva-acoliveira, poderia se referir aos
alunos José Luís da Silva e Antônio Carlos Oliveira).
Download

Trabalho 2