quarta-feira, 14 de março de 2012

Exercícios Estrutura de Dados - Resolvidos


Lista de Exercícios




  1. Dê o conceito de:
    1. Algoritmo
      R:
      É uma sequencia de ações executáveis para obtenção de uma solução para um determinado problema.
    2. Tipo de dados
      R:
      Conjunto de valores a que uma constante pertence, ou podem ser assumidos por uma variável ou expressão a que podem ser gerados por uma função.
    3. Tipo abstrato de dados
      R:
      Pode ser visto como um modelo matemático, acompanhado das operações definidas sobre um modelo.

  2. Qual a descrição de algoritmos segundo Dijkstra?
    R:
    descreve como uma descrição de um padrão de comportamento, expresso em termos de um conjunto finito de ações.

  3. Descreva o conceito de programar para estrutura de dados.
    R:
    consiste em estruturar dados e construir algoritmos, sendo formulações concretas de algoritmos abstratos, baseados em representações e estruturas específicas de dados, representando uma classe especial de algoritmos capazes de serem seguidos por computadores

  4. Cite os tipos de operações que podem ser definidas sobre uma lista.
    R:
    Criar lista, Retirar, inserir, alterar.

  5. Comente sobre os tipos de problemas distintos apresentado por Knuth.
    R:
    Análise de um algoritmo particular: custo ao usar um dado algoritmo para resolver um problema específico, investigar características importantes do algoritmo em questão devem ser investigadas.
Análise de uma classe de algoritmos: qual o algoritmo de menor custo possível para resolver um problema particular? Neste caso, deve ser investigado toda família de algoritmos para resolver um problema específico com a finalidade de identificar o melhor possível, colocando limites à complexidade computacional dos algoritmos pertencentes à classe
  1. Comente sobre as formas de medir os custos de utilização de um algoritmo e levando em consideração que os resultados não devem ser generalizados.
    R:
    Obtendo as medidas desta forma são inadequadas e seus resultados não devem ser generalizados, devido as seguintes objeções: (i) Os resultados dependem do compilador que pode favorecer algumas construções em detrimento de outras; (ii) os resultados dependem do hardware; (iii) quando grandes memória são utilizados, as medidas de tempo dependem deste aspecto.

  2. Cite e comente os três cenários distintos relacionados ao tempo de execução de um algoritmo.
    R:
    Melhor caso(Encontrar o registro rapidamente)
    médio caso(o mais difícil de se precisar) e pior caso(Percorrer todo o arquivo em busca de um registro.

  3. Cite as principais classes de problemas e suas funções de complexidade.
    R:
    As principais classes de problemas possuem as funções de complexidade são descritas abaixo.
f(n) = O(1). Algoritmos de complexidade O(1) são ditos complexidade constante.
  • f(n) = O(log n). Um algoritmo de complexidade O(log n) é dito ter complexidade logarítmica, onde a execução ocorre tipicamente em algoritmos que resolvem um problema transformando-o em problema menores.f(n) = O(n). Algoritmo de complexidade O(n) é dito ter complexidade linear, realizando um pequeno trabalho sobre cada elemento de entrada.
  • f(n) = O(n log n). Este tempo de execução ocorre tipicamente em algoritmos que resolver um problema quebrando–o em problema menores, resolvendo cada um deles independentemente e depois ajuntando as soluções.
  • f(n) = O(n2). Algoritmo de complexidade O(n2) é dito ter complexidade quadrática, são processados aos pares, sendo muitas vezes um anel dentro do outro.f(n) = O(n3). Algoritmo de complexidade O(n3) é dito ter complexidade cúbica e são úteis para resolver pequenos problemas.
f(n) = O(2n). Algoritmo de complexidade O(2n) é dito ter complexidade exponencial e geralmente não são úteis sob ponto de vista prático. São usados em algoritmos de força bruta.
  1. O que caracteriza programas considerados resolvidos e os não resolvidos?
    R:
    são os que existe um função polinomial para solucioná-los, enquanto problemas que não existem uma função polinomial para resolvê-lo é considerado intratável.

  1. Descreva sobre o problema do caixeiro viajante e apresente uma solução para o mesmo.
    R:
    Considere visitar as cidades de forma que sua viagem inicie e termine em uma mesma cidade e cada cidade seja vizitada uma única vez.

  2. Descreva sobre as técnicas de análise de algoritmos.
    R:
    Utiliza matemática discreta, envolvendo contagens ou enumerações dos elementos, envolvendo manipulações de operações.

  3. Cite os princípios a serem seguidos utilizando propriedade sobre notação O.
    R
    : O tempo de execução de um comando / O tempo de execução de uma seqüência de comandos / O tempo de execução de um comando de decisão/ O tempo para executar um anel /Quando o programa possui procedimentos não recursivos .
  1. Suponha dois algoritmos A e B, com funções de complexidade de tempo a(n) = n2 – n + 549 e b(n) = 49n + 49 respectivamente. Determine quais valores de n pertencentes ao conjunto de números naturais para os quais A leva menos tempo para executar do que B.
    R:
    Não exixte valores de n que satisfaça a condição.

6 comentários:

  1. Bom dia, Marcelo! Porque no exercício 13 não existe valores que satisfaçam a condição?

    Desde já, obrigado!

    ResponderExcluir
    Respostas
    1. Boa tarde mestre, e obrigado pelo acesso.
      Observe que pra qualquer valor que você atribuir a "n" ele nunca irá fazer A ser mais rápido, pelo fato de a função a(n) = n2 - n + 549. A sempre será maior que B, faça um teste pra você conferir.
      Abraço.

      Excluir
    2. Está errado.
      A entre 14 e 36.
      n^2 - n + 549 < 49n + 49
      n^2 - 50n + 500 < 0
      As raízes da equação correspondente, por Baskara:
      n = (50 +/- sqrt(502 - 4*1*500) )/2 =(50 +/- sqrt(2500-2000))/2 = (50 +/- 22.3)/2 . n1 =13.8
      e n2=36.1. Logo, a(n) < b(n) para 13 < n <37, considerando n, números naturais.

      Excluir
  2. para n de 14 a 36, A é mais rápido..

    ResponderExcluir
  3. Parabéns ao blog, muito interessante!!

    ResponderExcluir
  4. Lista 1 de Exercícios - Estrutura de Dados
    1. Construa um programa para ler Código, Descrição, Quantidade e Posição (Corredor, Quadra, Prateleira) de um produto. Use o conceito de estrutura.
    2. Faça uma cópia do programa anterior e altere-o para que possa ler e armazenar em memória 15 fichas de produtos.
    3. Construa uma rotina para receber como parâmetro o Código de um produto e retornar a sua localização quanto ao coredor(C), Quadra(Q) ou Prateleira(P).
    Ex: Localize("001","P") ===> 3 Significa Prateleira 3
    Localize("010","Q") ===> 2 Significa Quadra 2
    4. Construa somente uma rotina que receba o vetor de produtos acima e exiba-o com o seguinte formato:
    CÓDIGO - DESCRIÇÃO----------CORREDOR/QUADRA/PRATELEIRA
    XXXXXX - XXXXXXXXXXXXXX --9/9/9
    XXXXXX - XXXXXXXXXXXXXX --9/9/9
    XXXXXX - XXXXXXXXXXXXXX --9/9/9
    XXXXXX - XXXXXXXXXXXXXX --9/9/9

    5. Construa somente um procedimento que receba o vetor de produtos acima e devolva-o ordenado pelo Código.
    6. Construa rotinas para responder as seguintes questões após a leitura do vetor criado na questão 2:
    a. Quantos produtos tenho na prateleira X?
    b. Qual o total de produtos em Estoque?
    c. Que produto está presente na posição C,Q,P ?
    7. Construa uma rotina que receba o vetor de produtos já ordenado e o Código de um produto. A rotina deverá retornar o numero que indique em que posição o produto está localizado OU ZERO, caso o produto não seja encontrado. (usar o método de pesquisa BINÁRIA).

    ResponderExcluir