PUC-Rio
Departamento de Informática
Prof. Marcus Vinicius S. Poggi de Aragão
Período: 2009.1
28 de abril de 2009
Horário: 3as-feiras e 5as-feiras de 17 às 19 horas
Estruturas Discretas (INF 1631)

1o Trabalho de Implementação

Descrição

Este trabalho prático consiste em desenvolver códigos para diferentes algoritmos e estruturas de dados 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:
  1. Considere o teorema abaixo e a sua prova.
    Teorema 1  : xn - yn é divisível por x - y para quaisquer x e y inteiros e todos o valores de n inteiros e maiores que zero.

    Prova 1   A prova é feita por indução matemática utilizando k como parâmetro de indução. O teorema 1 pode ser enunciado:
    Teorema 1  (k): xk - yk é divisível por x - y para quaisquer x e y inteiros e todos o valores de k inteiros e maiores que zero.



    Teorema do Caso Base: 1   Seja k=1 (o menor valor para o qual k tem que ser verdade). Nesse caso temos que provar que x - y é divisível por x - y para qualquer valor de x e y. O que é trivialmente verdade, sendo o quociente, q1, igual a 1.



    Teorema do Passo Indutivo: 1   Desejamos provar que se o teorema 1 é verdade para um k fixo, isto é, podemos assumir que:
    xk - yk = qk . (x - y)
    onde qk é um inteiro, então é possivel mostrar que
    xk+1 - yk+1 = qk+1 . (x - y)
    para qk+1 inteiro. Ou seja, temos que mostrar é verdade também para k+1. Isto é, que podemos obter qk+1 inteiro a partir de qk se o teorema 1 é verdade para k.

    Como:
    xk+1 - yk+1 = xk+1 - xk . y + xk . y - yk+1 = xk (x-y) + y (xk - yk)
    Como, pela hipótese indutiva, temos que xk - yk = qk . (x - y), podemos escrever:
    xk+1 - yk+1 = xk (x-y) + y (xk - yk) = xk (x-y) + y . qk . (x - y) = (xk + y . qk ) (x - y)
    Como x é inteiro, xk é inteiro. Como y e qk são inteiros seu produto também é inteiro. Portanto (xk + y . qk ) é inteiro e qk+1 = (xk + y . qk ) é inteiro, ou seja:
    xk+1 - yk+1 = (xk + y . qk ) (x - y) = qk+1 . (x - y)


    O teorema acima resolve o problema de determinar o quociente entre xk - yk e x - y. Assim deseja-se um algoritmo que dados x, y, e k inteiros determine esse quociente.
    1. Escreva o algoritmo resultante da prova acima.
    2. Implemente este algoritmo e teste para vários valores de x, y, e k.

  2. Considere o teorema abaixo:
    Teorema 2   o número de números inteiros cujos dígitos pertencem ao conjunto { 1, 2, ..., m} de K dígitos diferentes é dado pelo produto m.(m-1). .... . (m-k+1).
    1. Enuncie o teorema de que sabe-se enumerar todos estes números especificando seu parâmetro indutivo e prove-o por indução matemática (simples).
    2. Apresente o algoritmo resultante da sua prova, que enumera todos os m.(m-1). .... . (m-k+1) números (o que permite contá-los).
    3. Implemente este algoritmo e apresente os números inteiros (a sequência de dígitos, em especial para quando m é maior que nove) impressos para pequenos valores de n e m. Para valores maiores apresente o tempo de CPU e indique até que valores de m e k sua implementação (e computador) foi capaz de fazer a enumeração.

  3. Seja um grafo conexo G=(V,A), orientado, e a, para a Î A os pesos associados aos arcos de G. Seja o problema de encontrar o caminho mais curto (de menor peso nesse caso) entre todos os pares de vértices em V. Sejam os teoremas abaixo.


    Teorema 3  (K): Sabe-se encontrar o caminho mais curto entre u e w " u,w Î V (ou seja, entre todos os pares de vértices em V) que utiliza no máximo K arcos.



    Teorema 4  (K): Sabe-se encontrar o caminho mais curto entre u e w " u,w Î V (ou seja, entre todos os pares de vértices em V) que utiliza como vértices intermediários o conjunto {1,2,...,K }.


    1. Apresente a prova por indução matemática no parâmetro K (número máximo de arcos no caminho) do Teorema 3;
    2. Apresente o algoritmo correspondente à prova do Teorema 3 apresentada e a sua respectiva implementação.
    3. Apresente a prova por indução matemática no parâmetro K (índice máximo do vértice que pode estar no caminho de cada para de vértices) do Teorema 4;
    4. Apresente o algoritmo correspondente à prova do Teorema 4 apresentada e a sua respectiva implementação.
    5. Teste os algoritmos nas instâncias de caminho mais curto disponibilizadas na página do curso.

This document was translated from LATEX by HEVEA.