Transcript
  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    1/21

    Recursividade Recursividade é um princípio que permite obter a

    solução de um problema P, a partir das soluções desubproblemas de P, que são similares ao próprio P.

     Resolução de um problema decompondo-o em

    subproblemas cada vez mais simples, até quetenhamos apenas subproblemas triviais.

     Os subproblemas triviais são resolvidos diretamente

    sem a necessidade de decomposições, e osresultados obtidos são usados para compor asolução do problema original.

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    2/21

    RecursividadeR$ 1.500,00

    R$ 700,00 R$ 700,00

    R$ 300,00R$ 300,00 R$ 300,00R$ 300,00

    R$ 100,00 R$ 100,00 R$ 100,00 R$ 100,00

    R$ 100,00 R$ 100,00

    R$ 100,00 R$ 100,00

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    3/21

    Recursividade Algorítmos recursivos Para resolver um problema P, um algoritmo recursivo

    deve ser capaz de classificar cada uma de suasinstâncias como trivial ou não trivial.

    Uma instância trivial deve ser resolvida diretamente, jáque não pode ser reduzida à outra mais simples

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    4/21

    Recursividade Algorítmos recursivos

    Uma instância não trivial pode ser resolvida,recursivamente, do seguinte modo: Reduzimos a instância P(I) à outra mais simples P(I’) e, em

    seguida usamos a solução de P(I’) para compor a solução

    de P(I). Um algoritmo recursivo é composto de duas partes

    importantes:

    Base de recursão, que resolve instâncias triviais diretamente Passo de recursão, que resolve instâncias não triviais

    recursivamente.

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    5/21

    Recursividade

    Instância original de P(I)

    Instância mais simples P(I’) Solução de P(I’)

    Solução de P(I)

    Reduz

    Obtém

    Usa

    Reduzimos a instância P(I) à outra mais simples P(I’) e, em seguida usamos asolução de P(I’) para compor a solução de P(I).

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    6/21

    Recursividade Implementação de Recursão

    Cálculo do Fatorial Base de recursão: se n=0, a instância n! é trivial e sua

    solução é 1.

    Passo de recursão: se n>0, a instância n! é não trivial e suasolução é n*(n – 1)!

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    7/21

    Recursividade

    4!

    3!   6

    24

    Reduz

    Obtém

    *4

    Reduzimos a instância P(I) à outra mais simples P(I’) e, em seguida usamos asolução de P(I’) para compor a solução de P(I).

    n!

    (n-1)!   (n-1)!

    n * (n-1)!

    Reduz

    Obtém

    *n

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    8/21

    Recursividade Simulação – Cálculo do Fatorial

     A cada chamada recursiva, uma instância não trivial éreduzida à outra mais simples e uma operação demultiplicação fica pendente, aguardando a propagação dasolução dessa instância mais simples.

     É como se a execução ficasse congelada, aguardando otérmino da chamada recursiva para continuar executando.

    Fat(4)

    4 * fat(3) = 4 * 3 * fat(2) = 4 * 3 * 2 * fat(1) = 4 * 3 * 2 * 1 * fat(0) = 4 * 3 * 2 * 1 * 1 = 24

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    9/21

    Recursividade Cálculo do Fatorial

    Base de recursão: se n=0, a instância n! é trivial e suasolução é 1.

    Passo de recursão: se n>0, a instância n! é não trivial e suasolução é n*(n – 1)!

     public static int fat( int n)

    {

    int fatorial;

    if  (n==0)

    fatorial = 1;else

    fatorial = n * fat(n-1);

    return fatorial;

    }

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    10/21

    Recursividade Implementação de Recursão

    Cálculo de Potência Base de recursão: se n=0, a instância Xn é trivial e sua

    solução é 1.

    Passo de recursão: se n>0, a instância Xn

    é não trivial e suasolução é X * Xn - 1

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    11/21

    Recursividade

    23

    22 4

    8

    Reduz

    Obtém

    *2

    Reduzimos a instância P(I) à outra mais simples P(I’) e, em seguida usamos asolução de P(I’) para compor a solução de P(I).

    nx

    nx - 1 nx - 1

    n * nx - 1

    Reduz

    Obtém

    *n

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    12/21

    Recursividade Simulação – Cálculo de Potencia

     A cada chamada recursiva, uma instância não trivial éreduzida à outra mais simples e uma operação demultiplicação fica pendente, aguardando a propagação dasolução dessa instância mais simples.

     É como se a execução ficasse congelada, aguardando otérmino da chamada recursiva para continuar executando.

    pot(2,3) 2 * pot(2,2) = 2 * 2 * pot(2,1) = 2 * 2 * 2 * pot(2,0) = 2 * 2 * 2 * 1 = 8

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    13/21

    Recursividade Cálculo do Fatorial

    Base de recursão: se n=0, a instância Xn é trivial e suasolução é 1.

    Passo de recursão: se n>0, a instância Xn é não trivial e suasolução é X * Xn - 1

    public static int pot(int bas,int exp){

    int potencia;if (exp==0)

    potencia = 1;else

    potencia = bas * pot(bas,exp-1);return potencia;

    }

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    14/21

    Recursividade Exercício

    Crie uma função recursiva para calcular o terminal de umnúmero N, definido da seguinte maneira: 0 se N = 0;

     N+...+3+2+1 se N > 0;

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    15/21

    Recursividade Exercício

    Usando apenas subtração, crie uma função recursiva paracalcular o resto da divisão de um número M por outronúmero N.

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    16/21

    Árvores Uma árvore A é uma estrutura hierárquica composta por

    n>=0 nós. Se n=0, dizemos que a árvore é vazia; casocontrário: Existe um nó especial em A denominado raiz;

     Os demais nós de A são organizados em A1, A2,...,Ak estruturas

    de árvores disjuntas, denominadas subárvores de A. O número de filhos de um nó denomina-se grau, e um nó de

    grau 0 denomina-se folha.

     O grau de uma árvore A é o máximo entre os graus deseus nós.

     A altura de uma árvore é o máximo dos níveis de seus nós.

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    17/21

    Árvores Binárias Uma árvore binária é uma árvore de grau 2, isto é,

    uma árvore em que nenhum nó tem mais de 2 filhos. Percursos em Árvores Binárias: Um percurso é uma forma sistemática de visitar cada nó de

    uma árvore exatamente uma vez.

    Podemos percorrer uma árvore em profundidade ou emlargura.

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    18/21

    Árvores Binárias Percursos em profundidade:

    Em-ordem: visita recursivamente a subárvore da esquerda,depois visita a raiz da árvore e, finalmente, visita asubárvore da direita;

    Pré-ordem: visita primeiro a raiz, depois visita

    recursivamente suas subárvores esquerda e direita, nessaordem;

    Pós-ordem: visita recursivamente as subárvores esquerda e

    direita, nessa ordem, e depois visita a raiz da árvore.

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    19/21

    Árvores Binárias Percurso em largura:

    O percurso em largura, também denominado percurso em-nível, visita os nós de uma árvore por nível, de cima parabaixo e da esquerda para a direita.

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    20/21

    Árvores de Busca Binária Seja A uma árvore binária cuja raiz armazena um item r.

    Dizemos que A é uma árvore de busca binária, ouordenada, se e somente se: Todo item armazenado na subárvore esquerda de A é menor que

    r.

     Todo item armazenado na subárvore direita de A é maior ouigual a r.

     Cada subárvore de A também é uma árvore de busca binária.

     Uma consequência importante da propriedade de buscabinária é que a projeção de uma árvore de busca bináriaproduz uma sequência ordenada com todos os seus itens.

  • 8/17/2019 Estruturas de Dados - Recursividade e Arvores

    21/21

    Árvores de Busca Binária5

    3

    1   4

    7

    69

    0 2 8