Problemas para o 2º trabalho

Propaganda
Departamento de Electrónica, Telecomunicações e Informática da Universidade de Aveiro
Desenvolvimento e Análise de Algoritmos
2015/2016 — 1º Semestre
2º Trabalho — Divide-And-Conquer / Decrease-And-Conquer
Data limite de entrega: 7 de Dezembro de 2015
Divide-And-Conquer
Após escolher um dos problemas seguintes, desenvolva e teste um algoritmo baseado na estratégia
“dividir-para-reinar” para o resolver.
De seguida, analise o esforço computacional realizado pelo algoritmo desenvolvido. Para isso deve:
a) Analisar a complexidade do algoritmo desenvolvido.
b) Realizar uma sequência de testes com instâncias sucessivamente maiores do problema. E
registar e analisar: (1) o número de operações básicas efectuadas e (2) o tempo de execução.
c) Comparar os resultados obtidos nos dois passos anteriores.
d) Estimar o tempo de execução requerido para instâncias do problema de muito maior
dimensão.
e) Escrever um relatório sucinto (máx. 6 págs.).
1 – Dado um “array” com n elementos, efectuar a sua ordenação usando o algoritmo Mergesort.
2 – Dado um “array” com n elementos, efectuar a sua ordenação usando o algoritmo Quicksort.
3 – Dados dois números inteiros com um grande número de algarismos, efectuar a sua
multiplicação usando o Algoritmo de Karatsuba.
4 – Dadas duas matrizes quadradas de ordem n, com n = 2k, k=1,2,… , efectuar a sua multiplicação
usando o Algoritmo de Strassen.
5 – Dado um conjunto de n pontos 2D, determinar o (um dos) par(es) de pontos mais próximos.
6 – Dado um conjunto de n pontos 2D, determinar o seu casco convexo.
Decrease-And-Conquer
Pretende-se comparar o desempenho computacional de dois algoritmos distintos para um mesmo
problema.
v.s.f.f.
1
Assim, após escolher um dos temas de trabalho seguintes, desenvolva os dois algoritmos indicados
e compare o seu desempenho.
Para isso deve:
a) Analisar a complexidade dos algoritmos desenvolvidos.
b) Realizar uma sequência de testes com instâncias sucessivamente maiores do problema. E
registar e analisar: (1) o número de operações básicas efectuadas e (2) o tempo de execução.
c) Comparar os resultados obtidos nos dois passos anteriores.
d) Estimar o tempo de execução requerido para instâncias de muito maior dimensão.
e) Comparar os resultados obtidos para cada um dos algoritmos.
f) Escrever um relatório sucinto (máx. 5 págs.).
7 – Dado um “array” ordenado com n elementos inteiros, verificar se um dado valor lhe pertence,
usando Pesquisa Linear e Pesquisa Binária.
8 – Dado um “array” ordenado com n elementos inteiros, verificar se um dado valor lhe pertence,
usando Pesquisa Linear e Pesquisa Ternária.
9 – Dado um “array” ordenado com n elementos inteiros, verificar se um dado valor lhe pertence,
usando Pesquisa Linear e Pesquisa por Interpolação.
10 – Dado um “array” ordenado com n elementos inteiros, verificar se um dado valor lhe pertence,
usando Pesquisa Binária e Pesquisa Ternária.
11 – Dado um “array” ordenado com n elementos inteiros, verificar se um dado valor lhe pertence,
usando Pesquisa Binária e Pesquisa por Interpolação.
12 – Dado um “array” não ordenado com n elementos inteiros, determinar o seu k-ésimo
elemento, usando duas estratégias distintas: a) efectuando um passo inicial de ordenação ou b)
usando a estratégia de partição do algoritmo Quicksort.
J. Madeira, 3 de Novembro de 2015
2
Download