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