Período: 2009.2
23 de setembro de 2009
Horário: 2as-feiras e 4as-feiras de15 às 17 horas
ANÁLISE DE ALGORITMOS (INF 1721)

1o Trabalho de Implementação (T1)

Data de Entrega: 23 de novembro de 2009

Descrição

Este trabalho prático consiste em desenvolver códigos para diferentes algoritmos para resolver os problemas descritos abaixo e, principalmente, analisar o desempenho das implementações destes algoritmos com respeito ao tempo de CPU. O desenvolvimento destes códigos e a análise devem seguir os seguintes roteiros: A corretude código será testada sobre um conjunto de instâncias que será distribuido. O trabalho entregue deve conter:
0. Seleção

[K-esimo] Dados um conjunto de n números reais e um inteiro k, encontrar o k-ésimo menor elemento deste conjunto.

  1. Implemente o algoritmo da mediana da medianas;
  2. Argumente que sua complexidade é linear, i.e. O(n);
  3. Verifique sua complexidade experimentalmente nas instâncias disponibilizadas.
  4. Analise cuidadosamente, seguindo os passos descritos no início do trabalho, os resultados obtidos.
1. Ordenação

[ORD] Dado um conjunto de n números reais, coloque seus elementos em ordem não-decrescente.

  1. Implemente o algoritmo da QuickSort com as seguintes escolhas de pivot:
    1. Um elemento aleatório do conjunto considerado na iteração;
    2. A média do elementos no conjunto considerado na iteração;
    3. A mediana do conjunto considerado na iteração;
  2. Implemente o algoritmo Shell Sort. Devem ser implementadas duas versões deste algoritmo. Uma que utilize potência de dois para o cálculo dos intervalos e uma segunda versão que use alguma outra sequência (por exemplo, os números da sequência de Fibonacci (1, 2, 3, 5, 8, 13, ...)). Obtenha as suas respectivas comlexidades experimentais. Veja o capítulo 8 do livro Algorithms, R. Sedgewick, 1992.
  3. Verifique as complexidades experimentais destes 5 algoritmos nas instâncias disponibilizadas.
  4. Analise cuidadosamente, seguindo os passos descritos no início do trabalho, os resultados obtidos.
2. Problema da Mochila Fracionária (pode-se colocar parte de um objeto na mochila)

[KP-frac] Dado um conjunto de n objetos divisíveis com pesos positivos wj, j=1,...,n e valores também positivos vj, j=1,...,n. Sabendo que uma mochila tem a capacidade W, determinar os objetos que podem ser levados na mochila cuja soma dos valores é máxima.

  1. Implementar algoritmos para o problema da mochila fracionária com as seguintes complexidades teóricas em função do número n de itens candidatos a serem colocados na mochila:
    1. O(n log n)
    2. O(n)
    3. Considere que o seu algoritmo do item (b) utiliza particionamentos em sequencia com pivot calculado apropriadamente para garantir a complexidade O(n). Utilize agora como pivot o valor calculado pela expressão:
      pivot =
      1

      |K|
       
      å
      j Î K
      vj

      wj
      onde K é o conjunto de itens considerados.
      1. Prove que a complexidade (pior caso) do algoritmo resultante é O(n2).
      2. Estime sua complexidade sobre as intâncias testadas.
      3. Assim como para os itens (a) e (b) apresente experiências computacionais comparativas.
      4. Analise cuidadosamente, seguindo os passos descritos no início do trabalho, os resultados obtidos.

This document was translated from LATEX by HEVEA.