estrutura de dados e técnicas de programação

download estrutura de dados e técnicas de programação

of 89

Transcript of estrutura de dados e técnicas de programação

  • 7/31/2019 estrutura de dados e tcnicas de programao

    1/89

    Estruturas de Dados

    e

    Tecnicas de Programacao

    Tomasz Kowaltowski

    Instituto de ComputacaoUniversidade Estadual de Campinas

    www.ic.unicamp.br/tomaszc2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao 1

    Copyright c 2010 Tomasz Kowaltowski

    Instituto de Computacao

    Universidade Estadual de Campinas

    Algumas transparencias foram adaptadas da apostila Estruturas de Dadose Tecnicas de Programacao de autoria de Claudio L. Lucchesi e TomaszKowaltowski.

    Estas transparencias somente podem ser copiadas para uso pessoal dosdocentes e alunos das disciplinas oferecidas pelo Instituto de Computa caoda UNICAMP.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao 2

    Introducao

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Introducao 3

    Pre-requisito e objetivos

    Pre-requisito: curso basico de programacao em C

    Objetivos:

    Programacao em (relativamente) baixo nvel Tecnicas de programacao e estruturacao de dados Preparacao para:

    Analise de algoritmos Programacao de sistemas Programacao em geral Bancos de dados Engenharia de software . . .

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Introducao 4

  • 7/31/2019 estrutura de dados e tcnicas de programao

    2/89

    Programa Introducao a analise de algoritmos Estruturacao elementar de dados: matrizes, registros, apontadores Estruturas lineares: pilhas, filas, filas duplas Recursao e retro cesso Arvores binarias: representacao, percursos Arvores gerais: representacao, percursos

    Aplicacao de arvores:arvores de busca (AVL), filas de prioridade,arvores B, arvores digitais

    Listas generalizadas Espalhamento Processamento de cadeias de caracteres Gerenciamento de memoria Algoritmos de ordenacao Algoritmos em grafos

    Tipos abstratos de dados e orientacao a objetosc2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Introducao 5

    Bibliografia

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Bibliografia 6

    A. Drozdek.Estrutura de Dados e Algoritmos em C++.Thomson, 2002.

    J. L. Szwarcfiter e L. Markenzon.Estruturas de Dados e seus Algoritmos.

    LTC Editora, 1994.

    C. L. Lucchesi e T. Kowaltowski.Estruturas de Dados e Tecnicas de Programacao.Instituto de Computacao UNICAMP, 2003.

    P. Feofiloff.Algoritmos em Linguagem C.Elsevier Editora Ltda., 2009.

    G. H. Gonnet.

    Handbook of Algorithms and Data Structures.Addison-Wesley, 1984.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Bibliografia 7

    E. Horowitz and S. Sahni.Fundamentals of Data Structures in Pascal.Computer Science Press, 1984.

    D. E. Knuth.The Art of Computer Programming, volume I: Fundamental

    Algorithms.Addison-Wesley, 1978.

    E. M. Reingold and W. J. Hanson.Data Structures.Little Brown and Company, 1983.

    R. Sedgewick.Algorithms in C.Addison-Wesley, 1990.

    D. F. Stubbs and N. W. Webre.

    Data Structures with Abstract Data Types and Pascal.Brooks/Cole, 1985.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Bibliografia 8

  • 7/31/2019 estrutura de dados e tcnicas de programao

    3/89

    A. M. Tenenbaum and M. J. Augenstein.Data Structures using Pascal.Prentice-Hall, 1986.

    N. Wirth.

    Algorithms + Data Structures = Programs.Prentice-Hall, 1976.

    N. Ziviani.Projeto de Algoritmos (2a. ed.)Thomson, 2004.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Bibliografia 9

    Nocoes de Analise de Algoritmos

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Nocoes de Analise de Algoritmos 10

    Escolha da estrutura

    Importancia da escolha de estrutura de dados busca de um elementonuma sequencia:

    . . .x = a [ k ] ;. . .

    . . .p = a ; i = 0 ;w h i l e ( i prox ;i ++;

    }x = p> i n f o ;. . .

    (a) (b)

    (a) Numero de operacoes constante (vetor).(b) Numero de operacoes proporcional a k (lista ligada).

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Nocoes de Analise de Algoritmos 11

    Exemplo de analise de trechos de programas

    . . .x = a+b ;. . .

    . . .f o r ( i =0; i

  • 7/31/2019 estrutura de dados e tcnicas de programao

    4/89

    Significado intuitivo da notacao O()

    c = O(1) para qualquer constante c

    2 = O(1)

    5n + 2 = O(n)5n2 + 5n + 2 = O(n2)

    n2 = O(n3)

    nk = O(nk+1), k 0

    loga n = O(logb n), a, b > 0

    log2 n = O(log10 n)

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Nocoes de Analise de Algoritmos 13

    Exemplo de analise de um procedimento de ordenacao

    v o i d Ordena( i n t v [] , i n t n ) {i n t i , k , m, t ;f o r ( i =0; i

  • 7/31/2019 estrutura de dados e tcnicas de programao

    5/89

    Exemplo (cont.)

    n M1 M2

    16 16 400

    32 32 500

    64 64 600

    128 128 700

    256 256 800

    512 512 9001024 1024 1000

    2048 2048 1100

    . . . . . . . . .

    220 1.048.576 2000

    221 2.097.152 2100

    . . . . . . . . .

    230 1.073.741.824 3000

    Supondo que a unidade seja 1 microssegundo, 2.097.152s corresponde a 17 minutos e1.073.741.824s equivale a cerca de 12 horas.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Nocoes de Analise de Algoritmos 17

    Execucao de programas

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Execucao de programas 18

    Exemplo de funcoes simples

    v o i d g ( i n t x , i n t y ) { y = x ;

    } / g /

    v o i d f ( i n t z ) {i n t y ; c h a r b ;y = 2 3 5 ;g( y , z );

    } / f /

    i n t main () {i n t i ; c h a r c ;c h a r v [ 5 ] ;

    f ( & i ) ;r e t u r n 0 ;} / main /

    Pilha de execucao (supoe inteiros de dois bytes):

    i c v

    main

    z y b

    f

    235

    x y

    235

    g

    235

    Obs.: Na realidade, os inteiros sao armazenados sob a forma binaria.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Execucao d e pr ogramas 19

    Exemplo de funcoes com alocacao dinamica

    t y p e d ef c h ar Cad eia [ 5 ] ;t y p e d e f C a d e i a ApCadeia ;t y p ed e f s t r u c t {

    C a d e i a n om e ;i n t i d a d e ;

    } Reg , ApReg ;

    ApCadeia apc ;ApReg apr ;i n t a p i ;

    v o i d Aloca (ApCadeia c , ApReg r ) {a p i = m a l l o c ( s i z e o f ( i n t ) ) ; a p i = 1 0 ; c = m a l l o c ( s i z e o f ( C a d e i a ) ) ; r = m a l l o c ( s i z e o f ( R e g ) ) ;

    } / A l o c a /

    i n t main () {A l o c a (& ap c , & a p r ) ; f r e e ( a p c ) ;f r e e ( a p r ) ; f r e e ( a p i ) ;r e t u r n 0 ;

    } / main /

    memoria dinamica

    pilha de execucao

    apc apr api

    global main

    c r

    Aloca

    10

    10

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Execucao de programas 20

  • 7/31/2019 estrutura de dados e tcnicas de programao

    6/89

    Exemplo de funcao recursiva

    i n t main () {i n t m;

    m = f a t ( 4 ) ;r e t u r n 0 ;

    } / main /

    i n t f a t ( i n t n ) {i f (n==0)

    r e t u r n 1 ;e l s e

    r e t u r n n f a t ( n 1) ;} / f a t /

    m res n

    4

    res n

    3

    res n

    2

    res n

    1

    res n

    011262424

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Execucao d e pr ogramas 21

    Estruturas ligadas

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 22

    Listas ligadas simples

    p

    . . .

    Declaracoes (equivalentes):

    t y p e d e f

    s t r u c t R e g L i s t a L i s t a ;t y p e d e f

    s t r u c t R e g L i s t a {T i n f o ;L i s t a p r o x ;

    } R e g L i s t a ;

    t y p e d e f

    s t r u c t R e g L i s t a {T i n f o ;s t r u c t R e g L i s t a prox ;

    } R e g L i s t a , L i s t a ;

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 23

    Insercao e remocao com passagem por valor

    . . . x . . .

    p q

    v o i d I n s e r e ( L i s t a p , T x ) {L i s t a q =

    m a l l o c ( s i z e o f ( R e g L i s t a ) ) ;q>i n f o = x ;q>p r o x = p>prox ;p>p r o x = q ;

    }

    v o i d R em ov e ( L i s t a p , T x ) {L i s t a q = p>prox ; x = q> i n f o ;p>p r o x = q>prox ;f r e e ( q ) ;

    }

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 24

  • 7/31/2019 estrutura de dados e tcnicas de programao

    7/89

    Insercao e remocao com passagem por valor (cont.)

    . . . x . . .

    p q

    O argumento p e o apontador para o predecessor do no a ser inseridoou removido.

    A funcao Remove nao pode remover um no que e o unico da lista.

    A funcao Insere nao pode inserir um no no incio da lista, inclusivese ela for vazia.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 25

    Insercao e remocao com passagem por referencia

    . . . x . . .

    p q

    v o i d I n s e r e ( L i s t a p , T x ) {L i s t a q =

    m a l l o c ( s i z e o f ( R e g L i s t a ) ) ;q>i n f o = x ;q>p r o x = p ;p = q ;

    }

    v o i d Remove( Lis ta p , T x ) {L i st a q = p ; x = q> i n f o ;p = q>prox ;f r e e ( q ) ;

    }

    Esta convencao elimina os problemas da passagem por valor. Note-se queas variaveis p e q tem tip os diferentes.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 26

    Lista simples com no cabeca

    p

    . . .

    Lista vazia:

    p

    Esta convencao permite o uso de passagem por valor nas funcoes basicas.O campo de informacao do no cabeca pode ser aproveitado para guardaralguma informacao adicional (por exemplo, o comprimento da lista).

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 27

    Lista simples circular

    p

    . . .

    Problema: lista vazia?

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 28

  • 7/31/2019 estrutura de dados e tcnicas de programao

    8/89

    Lista circular com no cabeca

    p

    . . .

    Lista vazia:

    p

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 29

    Busca em lista circular com no cabeca sentinelas

    L i s t a B u s c aC i r c u l ar (L i s t a p , T x ) {

    / B us ca s em s e n t i n e l a /L i s t a q = p ;do {

    q = q>prox ;} w h i l e (( q!=p) &&

    ( q> i n f o != x ) ) ;i f ( q==p)

    r e t u r n NULL;e l s e

    r e t u r n q ;}

    L i s t a B u s c a C i r c u l a r (L i s t a p , T x ) {

    / B us ca com s e n t i n e l a /L i s t a q = p ;q> i n f o = x ;

    do {q = q>prox ;

    } w h i l e ( q>i n f o != x ) ;i f ( q==p)

    r e t u r n NULL;e l s e

    r e t u r n q ;}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 30

    Lista duplamente ligada com no cabeca

    p

    . . .

    Lista vazia:

    p

    E possvel percorrer os elementos nas duas direcoes, a partir de

    qualquer lugar da lista. E possvel remover o elemento apontado.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 31

    Operacoes sobre listas duplamente ligadas

    t y p e d e f

    s t r u c t R e g L i s t a D u p l a {T i n f o ;s t r u c t R e g L i s t a D u p l a esq , d i r ;

    } R e g L i s t a D u p l a , L i s t a D u p l a ;

    v o i d I n s e r e D u p l a E s q (L i s t a D u p l a p , T x ) {

    L i s t a D u p l a q =m a l l o c ( s i z e o f ( R e g L i s t a D u p l a ) ) ;

    q> i n f o = x ;q>e s q = p>esq ;q>d i r = p ;p>es q>d i r = q ;p>e s q = q ;

    }

    v o i d RemoveDupla(L i s t a D u p l a p , T x ) {

    p>es q>d i r = p>d i r ;p>d i r >e s q = p>esq ; x = p> i n f o ;f r e e ( p ) ;

    }

    A funcao RemoveDupla supoe que ha pelo menos um elemento na lista.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 32

  • 7/31/2019 estrutura de dados e tcnicas de programao

    9/89

    Exemplo: operacoes com polinomiosSeja um polinomio de grau n:

    P(x) = anxn + an1x

    n1 + . . . + a1x1 + a0x

    0

    onde an = 0, exceto possivelmente no caso n = 0.

    Representacao ligada omite os termos nao nulos. Por exemplo, ospolinomios:

    P1(x) = 5x20 3x5 + 7 e P2(x) = 0:

    podem ser representados por:

    -1p1 5 20 -3 5 7 0

    -1p2

    Por convencao, o expoente do no cabeca e -1.c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 33

    Exemplo de funcao: impressao

    t y pe d ef s t r u c t AuxPol {i n t expo ;f l o a t c o e f ;s t r u c t AuxPol prox ;

    } Termo , P o l i n o m i o ;

    v o i d I m p r i m e P o l i n o m i o ( P o l i n o m i o p ) {i f ( p>prox==p) {

    p r i n t f ( P o li n o m i o n u l o \n );r e t u r n ;

    }p = p>prox ;w h i l e ( p>expo!=1) {

    p r i n t f ( ( %2 d , % 5 . 1 f ) ,p>expo ,p>c o e f ) ;

    p = p>prox ;}p r i n t f ( \n );

    }

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 34

    Soma de polinomios: paradigma de intercalacao

    -1ppp0

    . . .pp

    -1qqq0

    . . .qq

    -1rrr0

    . . .rr

    As variaveis pp e qq representam os termos correntes dos polinomiosdentro da malha de repeticao e a variavel rr aponta para o ultimo termo jacalculado da soma; pp0, qq0 e rr0 sao os valores iniciais das variaveis pp,qq e rr.

    A implementacao das operacoes e um exerccio. Note-se que o produto dedois polinomios po de ser calculado como uma sequencia de somas deprodutos de um polinomio por um termo.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 35

    Matrizes esparsas

    Exemplo:

    50 0 0 0

    10 0 20 00 0 0 0

    30 0 60 5

    Dada uma matriz n n, quando o numero de elementos nao nulos e umapercentagem pequena de n2 (nao e o caso do exemplo!), pode serconveniente representar a matriz por meio de uma estrutura de listasortogonais.

    Suporemos, neste exemplo, que as linhas e as colunas sao numeradas a

    partir de 1.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 36

  • 7/31/2019 estrutura de dados e tcnicas de programao

    10/89

    Matrizes esparsas: listas ortogonais

    50 0 0 010 0 20 0

    0 0 0 030 0 60 5

    4 -1

    3 -1

    2 -1

    1 -1

    -1 -1 -1 1 -1 2 -1 3 -1 4

    1 1

    50

    2 1

    10

    2 3

    20

    4 1

    -30

    4 3

    -60

    4 4

    5

    O acesso a matriz e feito a partir do no cabeca das listas das cabecas daslinhas e das colunas (super-cabeca!).

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 37

    Operacoes sobre matrizes esparsas

    Alguns exemplos:

    t y p e d e f

    s t r u c t R e g E s p a r s a {i n t l i n h a , c o l u n a ;d ou b l e v a l o r ;s t r u c t R e g E s p a r s a d i r e i t a , a b a i x o ;

    } RegEsparsa , M a t r i z ;

    v o i d I n i c i a l i z a M a t r i z ( M a tr i z a , i n t m, i n t n ) ;v o i d L i b e r a M a t r i z ( M a t r i z a ) ;d ou b l e E l e m e n t o M a t r i z ( M a t r i z a , i n t i , i n t j ) ;v o i d A t r i b u i M a t r i z ( M a t r iz a , i n t i , i n t j , d ou b l e x ) ;v o i d S o m aM a t ri z e s ( M a t r i z a , M a t r i z b , M a t r i z c ) ;v o i d M u l t i p l i c a M a t r i z e s ( M a t r iz a , M a t r iz b , M a t r iz c ) ;

    E importante notar os casos em que a passagem do argumento do tipoMatriz e feita por referencia. (Nas duas ultimas operacoes, a variavel crecebe o resultado.)

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas ligadas 38

    Estruturas lineares

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 39

    Estruturas lineares em geral: operacoes tpicas

    selecionar e modificar o k-esimo elemento;

    inserir um novo elemento entre as posicoes k e k + 1;

    remover o k-esimo elemento;

    concatenar duas sequencias;

    desdobrar uma sequencia;

    copiar uma sequencia;

    determinar o tamanho de uma sequencia;

    buscar um elemento que satisfaz uma propriedade;

    ordenar uma sequencia;

    aplicar um procedimento a todos os elementos de uma sequencia;

    . . .

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 40

  • 7/31/2019 estrutura de dados e tcnicas de programao

    11/89

    Estruturas lineares particulares

    Pilha (stack): insercao e remocao na mesma extremidade da estrutura

    Fila (queue): insercao numa extremidade (fim) e remocao na outraextremidade (incio)

    Fila dupla (double ended queue): insercao e remocao em ambasextremidades da estrutura

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 41

    Pilha: implementacao sequencial

    . . .. . .0

    topo

    empilha (insere)

    desempilha (remove)

    Pilha vazia:

    . . .0

    topo(-1)

    Inicialmente: topo=-1.c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 42

    Pilha: implementacao sequencial (cont.)

    . . .. . .0

    topo

    empilha (insere)

    desempilha (remove)

    t y p e d e f

    s t r u c t {i n t topo ;

    T el eme nt os [TAM MAX] ;} P i l h a ;

    v o i d E m p i l h a ( P i l h a p , T x ) {i f ( ( p ) . t op o==(TAM MAX1) )

    T r a t aE r r o ( P i l h a c h e i a ) ;( p ). t opo++;( ( p ) . e l e m e n t o s ) [ ( p ) . t o p o ] = x ;

    }

    Exerccio: a funcao Desempilha.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 43

    Pilha: implementacao ligada

    topo

    . . .

    Pilha vazia:

    topo

    (Uma lista ligada simples.)

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 44

  • 7/31/2019 estrutura de dados e tcnicas de programao

    12/89

    Pilha: implementacao ligada (cont.)

    topo

    . . .

    t y pe d ef s t r u c t E l e m P i l h a {T i n f o ;s t r u c t E l e m P i l h a prox ;

    } E l e m P i l h a , P i l h a ;

    v o i d E m p i l h a ( P i l h a p , T x ) {P i l ha q =

    m a l l o c ( s i z e o f ( E l e m P i l h a ) ) ;i f ( q==NULL )

    T r a t a E r r o ( F a l t a m emoria );q> i n f o = x ;qP r o x = p ;p = q ;

    }

    Exerccio: a funcao Desempilha.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 45

    Fila: implementacao sequencial

    . . . . . . . . .

    frente fim

    remove insere

    Convencao: frente precede o primeiro elemento da fila; consequentemente,

    o tamanho da fila e dado por fimfrente.

    Fila vazia:

    . . . . . .

    frentefim

    Condicao de fila vazia: frente== fim.Inicialmente: frente= fim = 1.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 46

    Fila: implementacao ligada circular

    fila

    frente

    . . .fim

    Fila vazia:

    fila

    frentefim

    A fila pode ser representada por uma unica variavel (fila) ou um par devariaveis (frente e fim).

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 47

    Fila: implementacao sequencial circular

    n-1 0 12

    3

    ... frente

    ...

    fim

    ...

    Convencao: frente precede o primeiro elemento da fila; consequentemente,

    o tamanho da fila e dado por (fimfrente+ n)%n.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 48

  • 7/31/2019 estrutura de dados e tcnicas de programao

    13/89

    Fila: implementacao sequencial circular (cont.)

    n-1 0 12

    3

    ... frente

    ...

    fim

    ...

    Condicoes:

    Inicial: frente== fim == 0 (ou qualquer outro valor) Fila vazia: frente== fim Fila cheia: frente== fim (a mesma condicao!) Solucao 1: sacrificar uma posicao do vetor; a condicao de fila cheia

    fica: frente== (fim + 1)%n. Solucao 2: uma variavel adicional inteira com o tamanho da fila ou

    booleana indicando se a fila esta vazia.c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 49

    Fila: implementacao sequencial circular (cont.)

    n-1 0 1 23

    ... frente

    ...

    fim

    ...

    # d e f i n e TAM MAX FILA 100 0

    t y p ed e f s t r u c t {i n t f r e n t e , f i m ;T el eme nt os [TAM MAX FILA ] ;

    } F i l a ;

    v o i d I n s e r e F i l a ( F i l a f , T x ) {i f ( ( f ) . f r e n t e = =( (( f ) . fi m+1)%TAM MAX FILA))

    T r a t aE r r o ( F i l a c h e i a ) ;( f ) . f i m = ( ( f ) . fi m+1)%TAM MAX FILA;( f ) . e l e m e n t o s [ ( f ) . f i m ] = x ;

    }

    Exerccio: a funcao RemoveFila.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Estruturas lineares 50

    Aplicacoes de pilhas

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Aplicacoes de pilhas 51

    Aplicacoes de pilhas

    Processamento de linguagens parenteticas:

    linguagens de programacao XML

    Implementacao da recursao

    Percurso de estruturas hierarquicas (arvores)

    Avaliacao expressoes em notacao pos-fixa (notacao polonesa reversa)

    Transformacao entre notacoes

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Aplicacoes de pilhas 52

  • 7/31/2019 estrutura de dados e tcnicas de programao

    14/89

    Exemplo de aplicacao simples: balanceamento de parenteses

    Correto Incorreto

    (

    () )[()] [)

    []()[()[]] ()()[

    ((([[[]]]))) )(

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Aplicacoes de pilhas 53

    Balanceamento de parenteses (cont.)

    Pilha Resto da sequenciaVazia ([([][()])])( [([][()])])

    ([ ([][()])])

    ([( [][()])])

    ([([ ][()])])

    ([( [()])])

    ([([ ()])])

    ([([( )])])

    ([([ ])])

    ([( )])

    ([ ])

    ( )

    Vazia

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Aplicacoes de pilhas 54

    Notacoes para expressoes aritmeticas

    Infixa: um operador unario precede o operando um operador binario separa os dois operandos parenteses indicam prioridades

    Pos-fixa: os operadores seguem os operandos

    Pre-fixa: os operadores precedem os operandos

    Exemplos:

    infixa p os-fixa pre-fixa

    a a aa + b ab+ +aba + b c abc + +a bc

    (a + b) c ab + c + abc

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Aplicacoes de pilhas 55

    Exemplo: avaliacao de expressoes sob forma pos-fixa

    Notacao infixa: (3 + 5) 2 (10 3)/2

    Notacao pos-fixa: 3 5 + 2 10 3 2/

    Estados consecutivos da pilha:

    Pilha EntradaVazia 3 5 + 2 10 3 2/3 5 + 2 10 3 2/3 5 +2 10 3 2/8 2 10 3 2/8 2 10 3 2/16 10 3 2/16 10 3 2/16 10 3 2/16 7 2/1 6 7 2 /

    16 3 13 Vazia

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Aplicacoes de pilhas 56

  • 7/31/2019 estrutura de dados e tcnicas de programao

    15/89

    Exemplo: transformacao de notacao infixa para pos-fixa

    a b + c d e/f g h

    Entrada infixa: a b+c de / fg h

    Sada pos-fixa: a b c d ef/+g h

    As varaveis sao copiadas diretamente para a sada.

    Os operadores precisam ser lembrados numa pilha.

    Um operador e copiado da pilha para a sada somente quando aparecena entrada um operador de prioridade menor ou igual.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Aplicacoes de pilhas 57

    Transformacao de notacao infixa para pos-fixa (cont.)

    Sada Pilha Entradaa b + c d e/f g h

    a b + c d e/f g ha b + c d e/f g hab + c d e/f g hab + c d e/f g h

    ab + c d e/f g hab c + d e/f g hab c + d e/f g hab cd + e/f g hab cd + e/f g hab cde + /f g hab cde + /f g h

    (continua)

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Aplicacoes de pilhas 58

    Transformacao de notacao infixa para pos-fixa (cont.)

    Sada Pilha Entradaab cde + /f g hab cde +/ f g h

    ab cde f +/ g hab cde f / + g hab cde f /+ g hab cde f /+ g hab cde f / + g hab cde f / + g hab cde f / + gh ab cde f / + gh ab cde f / + gh

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Aplicacoes de pilhas 59

    Exemplos de recursao

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de recursao 60

  • 7/31/2019 estrutura de dados e tcnicas de programao

    16/89

    Exemplo 1: funcao fatorial

    i n t f a t o r i a l ( i n t n ) {i f (n==0)

    r e t u r n 1 ;

    e l s er e t u r n n f a t o r i a l (n 1) ;

    }

    i n t f a t o r i a l ( i n t n ) {i n t i , f =1;f o r ( i =1; i

  • 7/31/2019 estrutura de dados e tcnicas de programao

    17/89

    Torres de Hanoi: movimento do maior disco

    X Y Z

    . .. .. .

    N-1

    Move X para Y

    X Y Z

    . .. .. .

    N-1

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de recursao 65

    Torres de Hanoi: transferencia recursiva final de N-1 discos

    X Y Z

    . .. .. .

    N-1

    Hanoi(Z,Y,X,N-1)

    X Y

    . .. .. .

    N

    Z

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de recursao 66

    Torres de Hanoi: funcao Hanoi

    v o i d H a n o i ( c h a r org , c h a r d e s t , c h a r aux , i n t n ) {i f ( n>0) {

    H a no i ( o r g , a ux , d e s t , n 1) ;p r i n t f ( Mova d e %c p a r a % c\n , o r g , d e s t ) ;H a no i ( a u x , d e s t , o r g , n 1) ;

    }}

    Chamada inicial: Hanoi(A,B,C,64).

    Numero de movimentos: 2N 1 (prova por inducao).

    Este e o numero mnimo.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de recursao 67

    Torres de Hanoi: exemplos de sada

    N=1: N=3:

    Mova de A p a r a B Mova de A p a r a BM o v a d e A p a r a CM o v a d e B p a r a C

    N=2: Mova de A p a r a BM o v a d e C p a r a A

    Mova de A p a r a C Mova de C p a r a BMova de A p a r a B Mova de A p a r a BM o v a d e C p a r a B

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de recursao 68

  • 7/31/2019 estrutura de dados e tcnicas de programao

    18/89

    Torres de Hanoi: exemplos de sada (cont.)

    N=4

    Mova de A pa ra C Mova de C pa ra BMova de A pa ra B Mova de C pa ra A

    Mova de C pa ra B Mova de B pa ra AMova de A pa ra C Mova de C pa ra BMova de B pa ra A Mova de A pa ra CMova de B pa ra C Mova de A pa ra BMova de A pa ra C Mova de C pa ra BM o v a d e A p a r a B

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de recursao 69

    Exemplo 4: geracao de permutacoes

    Problema: Gerar todas as permutacoes dos m elementos de um vetor.

    . . .

    0 k-1 k m-1

    . . .

    Suponha uma funcao Permuta(k,m) que gera (imprime) todas aspermutacoes dos elementos de 0 a k-1, seguidas dos elementos de k am-1.

    A chamada inicial Permuta(m,m) resolveria o problema.

    A solucao consistira em trocar o elemento de ndice k-1consecutivamente com todos os elementos que o precedem e aplicar afuncao recursivamente.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de recursao 70

    Geracao das permutacoes (cont.)

    Passo recursivo: i=k-1, ..., 0

    . . .

    0 k-1 k m-1

    . . . . . .

    i

    Troca(i,k-1)

    . . .

    0 k-1 k m-1

    . . . . . .

    i

    . . .

    0 k-1 k m-1

    . . . . . .

    i

    Permuta(k-1,m)

    Troca(i,k-1)

    . . .

    0 k-1 k m-1

    . . . . . .

    i

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de recursao 71

    Geracao das permutacoes (cont.)

    . . .

    0 k-1 k m-1

    . . .Funcao Permuta:

    v o i d Permuta( i n t k , i n t m) {i f ( k==0)

    Imprime (m);

    e l s e {i n t i ;f o r ( i=k 1; i >=0; i ) {

    T r o c a ( i , k 1) ;Permuta(k 1,m);T r o c a ( i , k 1) ;

    }}

    }

    A funcao Imprime imprime os m elementos do vetor.

    Chamada inicial: Permuta(m,m).

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de recursao 72

  • 7/31/2019 estrutura de dados e tcnicas de programao

    19/89

    Geracao das permutacoes (cont.)

    Sada de Permuta(2,3)

    1 2 32 1 31 3 23 1 23 2 1

    2 3 1

    Desafio: imprimir em ordem lexicografica:

    1 2 31 3 22 1 32 3 13 1 23 2 1

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de recursao 73

    Exemplos de retrocesso

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de retrocesso 74

    Exemplo 1: movimentos do cavalo

    Movimentos p ossveis do cavalo no jogo de xadrez:

    -2

    -2

    -1

    -1

    0

    0

    1

    1

    2

    2

    0

    12

    3

    4

    5 6

    7

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de retrocesso 75

    Movimentos do cavalo (cont.)

    Um percurso da posicao (0,0) ate (4,4) (existem 27.419 solucoes).

    0

    0

    1

    1

    2

    2

    3

    3

    4

    4

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de retrocesso 76

  • 7/31/2019 estrutura de dados e tcnicas de programao

    20/89

    Movimentos do cavalo (cont.)

    Um percurso da posicao (0,0) ate (4,4) cobrindo todas as posicoes:

    0

    0

    1

    1

    2

    2

    3

    3

    4

    4

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    Obs.: Nao existe solucao para o tabuleiro da transparencia anterior(provar!).

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de retrocesso 77

    Movimentos do cavalo (cont.)

    Tipos de solucao:

    1. Achar uma solucao

    2. Achar uma solucao que cobre todas as posicoes livres3. Enumerar todas as solucoes

    Observacao: Esta nao e a melhor maneira de resolver este problema masilustra bem o mecanismo geral de retrocesso.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de retrocesso 78

    Movimentos do cavalo (cont.)

    -2

    -2

    -1

    -1

    0

    0

    1

    1

    2

    2

    0

    12

    3

    4

    5 6

    7

    # d e f i n e TAM MAX 20# d e f i n e NUM MOV 8typ e d e f enum { f a l s e , t r ue } Boolean ;i n t t a b [ TAM MAX ] [ TAM MAX ] ;i n t d l [NUM MOV] = { 1, 2, 2, 1, 1 , 2 , 2 , 1 } ;

    i n t dc [NUM MOV] = { 2 , 1 , 1, 2, 2, 1, 1 , 2 } ;

    v o i d ImprimeT ab( i n t tam) {i n t i , j ;f o r ( i =0; i

  • 7/31/2019 estrutura de dados e tcnicas de programao

    21/89

    Movimentos do cavalo: exemplo de entrada e sada0

    0

    1

    1

    2

    2

    3

    3

    4

    4

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    E n t ra d a S a d a

    5 1 4 9 12 10 0 10 13 6 3 04 4 5 2 11 8 00 4 0 7 14 0 13 4 1 0 0 0 154 0

    1 1c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de retrocesso 81

    Movimentos do cavalo: achar uma solucao completaB o o l e a n T e nt a M ov i m en t o ( i n t tam , i n t num, i n t l i n ,

    i n t c o l , i n t l d , i n t cd , i n t n o c ) {i n t k , l p , cp ;B oo le an r e s = f a l s e ;i f ((0

  • 7/31/2019 estrutura de dados e tcnicas de programao

    22/89

    Distancia de edicao: funcao Distancia

    i n t D i s t a n c i a ( c h a r t e s t e , c h a r c o r r e t a ) {i n t dIns , dRem, dSub ;i f ( ( ( t e st e)==NUL CHAR) && (( correta)==NUL CHAR))

    r e t u r n 0 ;dI ns = dRem = dSub = INT MAX;i f ( ( ( te st e )!=NUL CHAR) && (( co rr et a )!=NUL CHAR) &&

    ( ( t e s t e ) = = ( c o r r e t a ) ) )r e t u r n D i s t a n c i a ( t e s t e + 1, c o r r e t a + 1) ;

    i f ( ( ( te st e )!=NUL CHAR) && (( co rr et a )!=NUL CHAR) )d Su b = c u s t o S u b+ D i s t a n c i a ( t e s t e + 1 , c o r r e t a +1 ) ;

    i f ( ( teste )!=NUL CHAR)dRem = c u st o R em+ D i s t a n c i a ( t e s t e + 1 , c o r r e t a ) ;

    i f ( ( co rr et a )!=NUL CHAR)d I n s = c u s t o I n s + D i s t a n c i a ( t e s t e , c o r r e t a + 1 );

    r e t u r n m i n ( d I n s , m i n ( dRem , d Su b ) ) ;}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de retrocesso 85

    Distancia de edicao: desafios

    Melhorar o desempenho do algoritmo: o algoritmo e exp onencial naosendo viavel, sob esta forma, em aplicacoes praticas

    Imprimir o numero de operacoes de cada tipo (avanco, insercao,remocao e substituicao) para obter a solucao

    Imprimir a sequencia de operacoes para obter a solucao

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Exemplos de retrocesso 86

    Eliminacao da recursao

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 87

    Esquema de funcao recursiva

    v o i d E x em p l o ( T1 x 1 , T2 x 2 , . . . ) {S 1 y 1 ; S 2 y 2 ; . . . ;Ci ; / Comandos i n i c i a i s /i f (E ( . . . ) ) {

    C0 ; / C as o b a s e /} e l s e { / C ha ma da s r e c u r s i v a s /

    C1; Exemplo(e11 , e12 , . . . ) ;C2; Exemplo(e21 , e22 , . . . ) ;C3; Exemplo(e31 , e32 , . . . ) ;. . . ;

    Cm; Exemplo (em1, em2 , . . . ) ;Cf ;

    }}

    Os smbolos Ci, C0, C1, . . ., Cm e Cf representam sequencias,possivelmente vazias, de comandos.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 88

  • 7/31/2019 estrutura de dados e tcnicas de programao

    23/89

    Esquema de eliminacao da recursao

    v o i d E x e m p lo( T1 x 1 , T2 x 2 , . . . ) {S 1 y 1 ; S 2 y 2 ; . . . ;Ci ; / Comandos i n i c i a i s /i f (E ( . . . ) ) {

    C0 ; / C a s o b a s e /} e l s e {

    / C ha ma da s r e c u r s i v a s /C 1; E x e m p lo( e 11 , e 12 , . . . ) ;C 2; E x e m p lo( e 21 , e 22 , . . . ) ;C 3; E x e m p lo( e 31 , e 32 , . . . ) ;. . . ;

    Cm; Exemplo( em1, em2 , . . . ) ;Cf ;

    }}

    typ e d e f enum { chamada1 , chamada2 , chamada3 , . . . } Chamadas ;typ e d e f enum { e n t ra d a , s a i d a , r e t o r n o } Acoes ;

    v o i d E x em p l o ( T1 x 1 , T2 x 2 , . . . ) {S 1 y 1 ; S 2 y 2 ; . . . ; / v a r i a v e i s l o c a i s o r i g i n a i s /T1 t 1 , T2 t 2 , . . . ; / v a r i a v e i s t e m p o r a r i a s /P i l h a f ; C ha ma da s c h ; A c oe s a c ao ;I n i c i a l i z a P i l h a (&f ) ; acao = en tr ad a ;

    do {s w i t c h ( acao ) {

    c a se ( e n t r a d a ) : . . . b re a k ;c a se ( r e t o r n o ) : . . . b re a k ;c a se ( s a i d a ) : b re a k ;

    }} w h i l e ( a c a o ! = s a i d a ) ;

    }

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 89

    Esquema de eliminacao da recursao (cont.)

    v o i d E x e m p lo( T1 x 1 , T2 x 2 , . . . ) {S 1 y 1 ; S 2 y 2 ; . . . ;Ci ; / Comandos i n i c i a i s /i f (E ( . . . ) ) {

    C0 ; / C a s o b a s e /} e l s e {

    / C ha ma da s r e c u r s i v a s /C 1; E x e m pl o( e 11 , e12 , . . . ) ;C 2; E x e m pl o( e 21 , e22 , . . . ) ;C 3; E x e m pl o( e 31 , e32 , . . . ) ;. . . ;

    Cm; Exemplo(em1, em2 , . . . ) ;Cf ;

    }}

    c a se ( e n t r a d a ) :Ci ; / Comandos i n i c i a i s /i f (E ( . . . ) ) {

    C0 ; a ca o = r e t o r n o ; / C as o b a s e /} e l s e { / P r i m e i r a c ha ma da r e c u r s i v a /

    C1; Emp il ha ( f , x1 , x2 , . . . , y1 , y2 , . . . , chamada1 );t 1 = e 1 1 ; t 2 = e 1 2 ; . . . ;x1 = t 1 ; x2 = t 2 ; . . . ; / R e c a l c u l a a r g u me n t o s /

    }b re a k ;

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 90

    Esquema de eliminacao da recursao (cont.)

    v o i d E x e m p lo( T1 x 1 , T2 x 2 , . . . ) {S 1 y 1 ; S 2 y 2 ; . . . ;Ci ; / Comandos i n i c i a i s /i f (E ( . . . ) ) {

    C0 ; / C a s o b a s e /} e l s e {

    / C ha ma da s r e c u r s i v a s /C 1; E x e m p lo( e 11 , e 12 , . . . ) ;C 2; E x e m p lo( e 21 , e 22 , . . . ) ;C 3; E x e m p lo( e 31 , e 32 , . . . ) ;

    . . . ;Cm; Exemplo( em1, em2 , . . . ) ;Cf ;

    }}

    c a se ( r e t o r n o ) :i f ( P i l h a V a z i a ( f ) ) a c ao = s a i d a ;e l s e {

    Desempil ha ( f ,&x1,&x2 , . . . , & y1,&y2 , . . . , & ch );s w i t c h ( c h ) {

    c a se (chamada1 ):C2; Emp il ha ( f , x1 , x2 , . . . , y1 , y2 , . . . , chamada2 );t 1 = e 2 1 ; t 2 = e 2 2 ; . . . ;x 1 = t 1 ; x 2 = t 2 ; . . . ;a c a o = e n t r a d a ; b re a k ;

    c a se (chamada2 ):C3; Emp il ha ( f , x1 , x2 , . . . , y1 , y2 , . . . , chamada3 );t 1 = e 3 1 ; t 2 = e 3 2 ; . . . ;x 1 = t 1 ; x 2 = t 2 ; . . . ;a c a o = e n t r a d a ; b re a k ;

    . . . ;c a se (chamadam ) :

    Cf ; b re a k ;} / s w i tc h ( c h ) /

    }b re a k ;

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 91

    Exemplo 1: funcao fatorial

    i n t f a t o r i a l ( i n t n ) {i f (n==0)

    r e t u r n 1 ;e l s e

    r e t u r n n f a t o r i a l ( n 1) ;}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 92

  • 7/31/2019 estrutura de dados e tcnicas de programao

    24/89

    Funcao fatorial (cont.)

    i n t f a t o r i a l ( i n t n) {i f (n==0)

    r e t u r n 1 ;e l s e

    r e t u r n n f a t o r i a l ( n 1);}

    typ e d e f enum { chamada1 } Chamadas ;typ e d e f enum { e n t ra d a , s a i d a , r e t o r n o } Acoes ;

    i n t f a t o r i a l ( i n t n ) {i n t r e s , t 1 ;P i l h a f ; C ha ma da s c h ; A c oe s a c ao ;I n i c i a l i z a P i l h a (&f ) ; acao = en tr ad a ;

    do {s w i t c h ( acao ) {c a se ( e n t r a d a ) : . . . b re a k ;c a se ( r e t o r n o ) : . . . b re a k ;c a se ( s a i d a ) : b re a k ;

    }} w h i l e ( a c a o ! = s a i d a ) ;r e t u r n r e s ;

    } / f a t o r i a l /

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 93

    Funcao fatorial (cont.)

    i n t f a t o r i a l ( i n t n) {

    i f (n==0)r e t u r n 1 ;

    e l s er e t u r n n f a t o r i a l ( n 1);

    }

    c a se ( e n t r a d a ) :i f (n==0) {

    r e s = 1 ; a ca o = r et o rn o ;} e l s e {

    Empil ha ( f , n , chamada1 );t 1 = n ; n = t 1 1;

    }b re a k ;

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 94

    Funcao fatorial (cont.)

    i n t f a t o r i a l ( i n t n) {i f

    (n==0)r e t u r n 1 ;e l s e

    r e t u r n n f a t o r i a l ( n 1);}

    c a se ( r e t o r n o ) :i f ( P i l h a V a z i a ( f ) ) a c a o = s a i d a ;e l s e {

    Desempi lha ( f ,&n,&ch );s w i t c h ( c h ) {

    c a se (chamada1 ):r e s = n r e s ;b re a k ;

    }b re a k ;

    Obs.: Note como neste caso a variavel res e usada para guardar oresultado da funcao.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 95

    Exemplo 2: funcao Hanoi

    v o i d H a n o i ( c h a r org , c h a r d e s t , c h a r aux , i n t n ) {

    i f ( ! ( n >0) );

    e l s e {H a n o i ( o r g , a u x , d e s t , n 1) ;p r i n t f ( Mova d e %c p a r a % c\n , o r g , d e s t ) ;H a n o i ( a u x , d e s t , o r g , n 1) ;

    }}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 96

  • 7/31/2019 estrutura de dados e tcnicas de programao

    25/89

    Funcao Hanoi (cont.)

    v o i d Ha n oi ( c h a r org , c h a r d e s t , c h a r aux , i n t n ) {i f ( ! ( n >0))

    ;e l s e {

    Ha n oi ( or g , a u x , d e s t , n 1);p r i n t f ( Mo va d e % c p a r a % c\n , o r g , d e s t ) ;Ha n oi ( a u x , d e s t , or g , n1);

    }}

    typ e d e f enum { chamada1 , chamada2 } ;typ e d e f enum { e n t ra d a , s a i d a , r e t o r n o } Acoes ;v o i d H a n o i ( c h a r org , c h a r d e s t , c h a r aux , i n t n ) {

    c h a r t 1 ; c h a r t 2 ; c h a r t 3 ; i n t t 4 ;P i l h a f ; C ha ma da s c h ; A c oe s a c ao ;I n i c i a l i z a P i l h a (&f ) ; acao = en tr ad a ;

    do {s w i t c h ( acao ) {

    c a se ( e n t r a d a ) : . . . ; b re a k ;c a se ( r e t o r n o ) : . . . ; b re a k ;c a se ( s a i d a ) : b re a k ;

    }} w h i l e ( a c a o ! = s a i d a ) ;

    }

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 97

    Funcao Hanoi (cont.)

    v o i d Ha n oi ( c h a r org , c h a r d e s t , c h a r aux , i n t n ) {i f ( ! ( n >0))

    ;e l s e {

    Ha n oi ( or g , a u x , d e s t , n 1);p r i n t f ( Mo va d e % c p a r a % c\n , o r g , d e s t ) ;Ha n oi ( a u x , d e s t , or g , n1);

    }}

    c a se ( e n t r a d a ) :i f ( ! ( n >0) ) {

    a ca o = r e t o r n o ;} e l s e {

    Empil ha ( f , org , dest , aux ,n , chamada1 ) ;t 1 = o r g ; t 2 = a u x ; t 3 = d e s t ; t 4 = n 1;o r g = t 1 ; d e s t = t 2 ; a ux = t 3 ; n = t 4 ;

    }b re a k ;

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 98

    Funcao Hanoi (cont.)

    v o i d Ha n oi ( c h a r org , c h a r d e s t , c h a r aux , i n t n ) {i f ( ! ( n >0))

    ;e l s e {

    Ha n oi ( or g , a u x , d e s t , n 1);p r i n t f ( Mo va d e % c p a r a % c\n , o r g , d e s t ) ;Ha n oi ( a u x , d e s t , or g , n1);

    }}

    c a se ( r e t o r n o ) :i f ( P i l h a V a z i a ( f ) )

    a c a o = s a i d a ;e l s e {

    Desempil ha ( f ,&org ,&de st ,&aux,&n,&ch );s w i t c h ( c h ) {

    c a se (chamada1 ):p r i n t f ( Mova d e %c p a r a % c\n , o r g , d e s t ) ;Empil ha ( f , org , dest , aux ,n , chamada2 ) ;t 1 = a u x ; t 2 = d e s t ; t 3 = o r g ; t 4 = n 1;o rg = t 1 ; d e s t = t 2 ; a ux = t 3 ; n = t 4 ;a c a o = e n t r a d a ;b re a k ;

    c a se (chamada2 ):b re a k ;

    }b re a k ;

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 99

    Exemplo de eliminacao da recursao caudalAplicavel quando a ultima acao dentro do corpo da funcao e umachamada recursiva: reaproveita o mesmo registro de ativacao da funcao,mudando os valores dos argumentos.

    v o i d H a n o i ( c h a r org , c h a r d e s t , c h a r aux , i n t n ) {i f ( n>0) {

    H a no i ( o r g , a ux , d e s t , n 1) ;p r i n t f ( Mova d e %c p a r a % c\n , o r g , d e s t ) ;H a no i ( a u x , d e s t , o r g , n 1) ;

    }}

    v o i d H a n o i ( c h a r org , c h a r d e s t , c h a r aux , i n t n ) {c h a r t ;w h i l e ( n>0) {

    H a n o i ( o r g , a u x , d e s t , n 1) ;p r i n t f ( Mova d e %c p a r a % c\n , o r g , d e s t ) ;

    t = o r g ; o rg = a ux ; au x = t ;}}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Eliminacao da recursao 100

  • 7/31/2019 estrutura de dados e tcnicas de programao

    26/89

    Recursao m utua: Analise sintatica

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 101

    Exemplo simples de recursao mutua

    i n t g ( i n t n ) ;

    i n t f ( i n t n ) {

    i f (n==0)r e t u r n 0 ;

    e l s e

    r e t u r n g ( n 1) ;}

    i n t g ( i n t n ) {i f (n==0)

    r e t u r n 1 ;e l s e

    r e t u r n f ( n 1) ;}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 102

    Analise de expressoes

    Expressoes com operadores binarios +, , , / e parenteses ( e ):

    e = t1 t2 tn, n 1

    t = f1 f2 fn, n 1

    f = x ou f = ( e )

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 103

    Programa de traducao de infixa para pos-fixa:

    c h a r en tr ad a [TAM MAX] ;c h a r pe ;

    v o i d E x p r e s s a o ( ) ;v o i d Termo ( ) ;v o i d F a t o r ( ) ;

    v o i d InPos () {pe = &ent rad a [ 0 ] ;E x p r e s s a o ( ) ;i f ( ( pe)!= \0 )

    E r r o ( ) ;}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 104

  • 7/31/2019 estrutura de dados e tcnicas de programao

    27/89

    Fator

    f = x ou f = ( e )

    v o i d F a t o r ( ) {c h a r c o r r e n t e = pe ;s w i t c h ( c o r r e n t e ) {

    c a se a : c a se b : . . . : c a se z :S a i ( c o r r e n t e ) ; p e++; b re a k ;

    c a se ( :pe++;E x p r e s s a o ( ) ;i f ( ( pe)== ) )

    pe++;e l s e

    E r r o ( ) ;b re a k ;

    d e f a u l t :E r r o ( ) ;

    }}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 105

    Termo

    t = f1 f2 fn, n 1

    v o i d Termo() {c h a r op ;F a t o r ( ) ;do {

    op = pe ;i f ( ( op== ) | | ( op== / )) {

    pe++;F a t o r ( ) ;Sai (op );

    } e l s eb re a k ; / do /

    } w h i l e ( t r u e ) ;}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 106

    Expressao

    e = t1 t2 tn, n 1

    v o i d E x p r e s s a o ( ) {c h a r op ;Termo () ;do {

    op = pe ;i f (( op==+ ) | | ( op== ) ) {

    pe++;Termo () ;Sai (op );

    } e l s eb re a k ; / do /

    } w h i l e ( t r u e ) ;}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 107

    Operador de exponenciacao

    Fator redefinido:

    f = p1 p2 pn, n 1Primario:

    p = x ou p = ( e )

    Prioridade? Solucao:

    f = p ou f = p f

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 108

  • 7/31/2019 estrutura de dados e tcnicas de programao

    28/89

    Fator redefinido

    f = p ou f = p f

    v o i d F a t o r ( ) {P r i m a r i o ( ) ;

    i f ( ( pe)== ) {pe++;F a t o r ( ) ;Sai ( ) ;

    }}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 109

    Primario

    p = x ou p = ( e )

    v o i d P r i m a r i o ( ) {c o r r e n t e = pe ;s w i t c h ( c o r r e n t e ) {

    c a se a : c a se b : . . . : c a se z :S a i ( c o r r e n t e ) ; p e++; b re a k ;

    c a se ( :pe++;E x p r e s s a o ( ) ;i f ( ( pe)== ) )

    pe++;e l s e

    E r r o ( ) ;b re a k ;

    d e f a u l t :E r r o ( ) ;

    }}

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 110

    Analogia para expressoes e termos

    e = t ou e = e t

    t = f ou t = t f

    Problemas:

    como distinguir as alternativas

    repeticao infinita no segundo caso (recursao esquerda)

    v o i d E x p r e s s a o ( ) {. . . ;

    i f ( ? ? ? )Termo ( ) ;

    e l s e

    E x p r e s s a o ( ) ;. . .

    }

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Recursao mutua: Analise sintatica 111

    Arvores binarias

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 112

  • 7/31/2019 estrutura de dados e tcnicas de programao

    29/89

    E l d l 3 D fi i d bi i

  • 7/31/2019 estrutura de dados e tcnicas de programao

    30/89

    Exemplo de arvore geral 3: organograma

    UNICAMP

    IC

    DSC DSI DTC

    IMECC

    DE DM DMA

    FEEC

    DCA DEB DT

    FCM

    DAP DAN DTO

    . . .

    . . . . . .

    Obs.: A UNICAMP tem 21 unidades academicas. Algumas unidades temmais de 10 departamentos.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 117

    Definicao de arvore binaria

    Uma arvore binaria e um conjunto de nos que:

    ou e vazio (arvore bin aria vazia)

    ou contem um no especial denominado raiz da arvore e o resto doconjunto esta particionado em duas arvores binarias disjuntas(possivelmente vazias), denominadas subarvore esquerda e subarvoredireita.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 118

    Representacao grafica, convencoes e conceitos

    nvel 1

    nvel 2

    nvel 3

    nvel 4

    A

    B

    D E

    G

    C

    F

    H

    Raiz da arvore: AFilho esquerdo de A: B Filho direito de A: CPai de F: C Irmao de E: DDescendentes de B: B, D, E e G Antepassados de H: H, F, C e AFolhas: D, G e H Nos internos: todos exceto as folhasNveis: indicados na figura Altura (profundidade) nvel maximo: 4

    Subarvores binarias vazias: 9 Subarvores binarias nao vazias: 7Obs.: Alguns autores comecam a numeracao dos nveis a partir de zero.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 119

    Fatos sobre arvores binarias

    Uma arvore binaria com n nos tem:

    altura maxima n altura mnima log2(n + 1) subarvores vazias: n + 1 subarvores nao vazias: n 1 (se n > 0)

    Uma arvore binaria de altura h tem:

    no mnimo h nos no maximo 2h 1 nos

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 120

    R li d R li d d

  • 7/31/2019 estrutura de dados e tcnicas de programao

    31/89

    Representacao ligada comum

    p

    A

    B C

    D E F

    G H

    O acesso a todos os nos da arvore pode ser realizado atraves de umapontador para a raiz.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 121

    Representacao ligada com tres apontadores

    p

    A

    B

    D E

    G

    C

    F

    H

    O terceiro apontador possibilita descer e subir pela estrutura,analogamente as listas duplamente ligadas.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 122

    Representacao com o campo pai apenas

    A

    B C

    D E F

    G H

    Problemas:

    E necessario haver acesso (apontadores) pelo menos a todas as folhas.

    Nao e possvel distinguir entre os filhos esquerdos e direitos.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 123

    Representacao sequencial: arvores binarias completas

    A

    B

    C

    D E

    F

    G H

    I

    J

    K L

    M

    N O

    0

    1 2

    3 4 5 6

    7 8 9 10 11 12 13 14

    No n:

    filho esquerdo: 2n + 1 (n 0)filho direito: 2n + 2 (n 0)pai: (n 1)/2 (n > 0)

    A0

    B1

    I2

    C3

    F4

    J5

    M6

    D7

    E8

    G9

    H10

    K11

    L12

    N13

    O14

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 124

    R t i l bi i l t P f did d

  • 7/31/2019 estrutura de dados e tcnicas de programao

    32/89

    Representacao sequencial: arvores binarias quase completas

    A

    B

    C

    D E

    F

    G H

    I

    J

    K

    M

    0

    1 2

    3 4 5 6

    7 8 9 10 11

    A

    0

    B

    1

    I

    2

    C

    3

    F

    4

    J

    5

    M

    6

    D

    7

    E

    8

    G

    9

    H

    10

    K

    11

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 125

    Percursos em profundidade

    Pre-ordem:Visitar a raiz

    Percorrer a subarvore esquerda em pre-ordem

    Percorrer a subarvore direita em pre-ordem

    Pos-ordem:

    Percorrer a subarvore esquerda em pos-ordem

    Percorrer a subarvore direita em pos-ordem

    Visitar a raiz

    Inordem (ou ordem simetrica):

    Percorrer a subarvore esquerda em inordem

    Visitar a raiz

    Percorrer a subarvore direita em inordem

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 126

    Exemplos de percurso em profundidade

    A

    B

    D E

    G

    C

    F

    H

    Pre-ordem: A,B,D,E,G,C,F,H

    Pos-ordem: D,G,E,B,H,F,C,A

    Inordem: D,B,G,E,A,F,H,C

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 127

    Percurso em largura

    Percurso p or nveis, da esquerda para a direita:

    nvel 1

    nvel 2

    nvel 3

    nvel 4

    A

    B

    D E

    G

    C

    F

    H

    Percurso: A,B,C,D,E,F,G,H

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 128

    I l t i d Eli i d d l

  • 7/31/2019 estrutura de dados e tcnicas de programao

    33/89

    Implementacao recursiva de percursos

    t y pe d ef s t r u c t NoArvBin {T i n f o ;s t r u c t NoArvBin esq , d i r ;

    } NoArvBin , ArvBin ;

    v o i d PreOrdem( ArvBin p) {i f (p!=NULL) {

    V i s i t a ( p ) ;PreOrdem(p>e s q ) ;PreOrdem(p>d i r ) ;

    }} / PreOrdem /

    v o i d InOrdem( ArvBin p) {i f (p!=NULL) {

    InOrdem(p>e s q ) ;V i s i t a ( p ) ;InOrdem(p>d i r ) ;

    }} / InOrdem /

    v o i d PosOrdem( ArvBin p) {i f (p!=NULL) {

    PosOrdem(p>e s q ) ;PosOrdem(p>d i r ) ;V i s i t a ( p ) ;

    }} / PosOrdem /

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 129

    Eliminacao da recursao caudal

    v o i d PreOrdem( ArvBin p) {i f (p!=NULL) {

    V i s i t a ( p ) ;PreOrdem(p>e s q ) ;

    PreOrdem(p>d i r ) ;}

    } / PreOrdem /

    v o i d PreOrdem( ArvBin p) {w h i l e (p!=NULL) {

    V i s i t a ( p ) ;PreOrdem(p>e s q ) ;

    p = p>d i r ;}

    } / PreOrdem /

    Transformacao analoga pode ser feita para a inordem.

    E a pos-ordem?

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 130

    Percurso em pre-ordem, usando uma pilha explcita

    A figura indica a situacao inicial e final do percurso de uma arvorearbitraria (p ode ser vazia). Inicialmente, o ap ontador para a arvore deveestar no topo da pilha. Terminado o percurso, a pilha tera um elemento amenos.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 131

    Percurso em pre-ordem, usando uma pilha explcita (cont.)

    X

    E D

    Visita X Percorre E Percorre D

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 132

    Perc rso em pre ordem sando ma pilha (cont ) Perc rso em larg ra sando ma fila

  • 7/31/2019 estrutura de dados e tcnicas de programao

    34/89

    Percurso em pre-ordem, usando uma pilha (cont.)

    v o i d PreOrdem( ArvBin p) {P i l h a p l ;I n i c i a l i z a P i l h a (& p l ) ;Empilha(&pl , p );do {

    Desempil ha(&pl ,&p );i f (p!=NULL) {

    V i s i t a ( p ) ;E m p i l h a (& p l , p>d i r ) ;E m p i l h a (& p l , p>e s q ) ;

    }} w h i l e ( ! P i l h a V a z i a ( p l ) ) ;

    } / PreOrdem /

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 133

    Percurso em largura, usando uma fila

    Os nos da arvore a serem visitados sao guardados numa fila.

    X

    E D

    nv el k

    nv el k+1

    Visita X

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 134

    Percurso em largura, usando uma fila (cont.)

    v o i d L a r g u r a ( A r v B i n p ) {F i l a f l ;

    I n i c i a l i z a F i l a (& f l ) ;I n s e r e F i l a (& f l , p ) ;do {

    R e m o v e F i l a (& f l , & p ) ;i f (p!=NULL) {

    V i s i t a ( p ) ;I n s e r e F i l a (& f l , p>e s q ) ;I n s e r e F i l a (& f l , p>d i r ) ;

    }} w h i l e ( ! F i l a V a z i a ( f l ) ) ;

    } / L a r g u r a /

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 135

    Comparacao dos percursos em pre-ordem e em largura

    v o i d PreOrdem( ArvBin p) {P i l h a p l ;I n i c i a l i z a P i l h a (&p l ) ;Empilha(&pl , p );do {

    Desempi lha(&pl ,&p );i f (p!=NULL) {

    V i s i t a ( p ) ;E m p i l h a (& p l , p>d i r ) ;E m p i l h a (& p l , p>e s q ) ;

    }} w h i l e ( ! P i l h a V a z i a ( p l ) ) ;

    } / PreOrdem /

    v o i d L a r g u r a ( A r v B i n p ) {F i l a f l ;I n i c i a l i z a F i l a (& f l ) ;I n s e r e F i l a (& f l , p ) ;do {

    R e m o v e F i l a (& f l , & p ) ;i f (p!=NULL) {

    V i s i t a ( p ) ;I n s e r e F i l a (& f l , p>e s q ) ;I n s e r e F i l a (& f l , p>d i r ) ;

    }} w h i l e ( ! F i l a V a z i a ( f l ) ) ;

    } / L a r g u r a /

    Quase identicos, exceto a troca de esquerda pela direita!

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 136

    Preordem com pilha otimizada Pre ordem com pilha embutida: Deutsch Schorr e Waite

  • 7/31/2019 estrutura de dados e tcnicas de programao

    35/89

    Preordem com pilha otimizada

    v o i d PreOrdem( ArvBin p) {P i l h a p l ;B o ol e an f i m = f a l s e ;I n i c i a l i z a P i l h a (& p l ) ;do {

    i f (p!=NULL) {

    V i s i t a ( p ) ;i f ( p>d i r !=NULL)

    Empilha ( pl , p>d i r ) ;p = p>esq ;

    } e l s e i f ( P i l h a V a z i a ( p l ) )f i m = t r u e

    e l s e

    Desempi lha ( pl ,&p );} w h i l e ( ! f i m ) ;

    } / PreOrdem /

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 137

    Pre-ordem com pilha embutida: Deutsch, Schorr e Waite

    ... ...

    . .. . .. . .. . ..

    ... ...

    ... ...

    t p

    NULL

    A variavel p aponta para a subarvore a ser percorrida. A variavel t aponta para o topo de uma pilha formada pelos n os que

    levam ao no p (apontadores invertidos). Cada no devera conter uma marca indicando qual dos dois

    apontadores esta invertido. A funcao seguinte implementa os tres percursos em profundidade.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 138

    Pre-ordem com pilha embutida (cont.)v o i d DSW( Arv Bin p) {

    A rv Bi n t = NULL ; A rv Bi n q ; B oo l ea n s o be ;do {

    w h i l e (p!=NULL) { / a es qu er da /P r e V i s i t a ( p ) ; p>m a rc a = M a rc a Es q ; q = p>esq ;p>e sq = t ; t = p ; p = q ;

    }s o be = t r u e ;w h i l e ( sob e && ( t !=NULL) ) {

    s w i t c h ( t>marca) {c a se MarcaEsq : / a d i r e i t a /

    I n V i s i t a ( t ) ; s ob e = f a l s e ; t>marca = MarcaDir ;q = p ; p = t >d i r ; t>d i r = t>e s q ; t>e s q = q ;b re a k ;

    c a se MarcaDir : / s o b e /P o s V i s i t a ( t ) ; q = t>d i r ; t>d i r = p ; p = t ; t = q ;b re a k ;

    }

    }} w h i l e ( t !=NULL) ;

    }

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 139

    Desafios:

    melhorar a pre-ordem com pilha otimizada

    inordem com pilha otimizada

    pos-ordem com pilha otimizada

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 140

    Reconstrucao de arvores binarias Reconstrucao de arvores binarias (cont )

  • 7/31/2019 estrutura de dados e tcnicas de programao

    36/89

    Reconstrucao de arvores binarias

    Pre-ordem AB:A

    B

    A

    B

    Inordem AB:B

    A

    A

    B

    Pos-ordem AB:B

    A

    B

    A

    Pre-ordem AB e pos-ordem BA:A

    B

    A

    B

    Conclusao: uma unica ordem e a combinacao de pre- e pos-ordens naodeterminam a arvore de maneira unica.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 141

    Reconstrucao de arvores binarias (cont.)

    Verifica-se facilmente que a pre-ordem (ou a pos-ordem) combinada com ainordem determinam, de maneira unica, a forma da arvore. No caso dapre-ordem e inordem, pode-se seguir o seguinte algoritmo:

    a partir da pre-ordem, determine a raiz da arvore

    dada a raiz, ela separa a inordem em inordens das suas subarvoresesquerda e direita

    a partir da pre-ordem, sao determinadas as pre-ordens das subarvoresque tem os mesmos comprimentos das respectivas inordens

    recursivamente sao reconstrudas as subarvores

    O caso da pos-ordem e analogo.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 142

    Representacoes externas de arvores binariasA

    B

    D E

    G

    C

    F

    H

    percursos canonicos: inordem e pre (ou pos)-ordem (ja visto):

    DBGEAFHCABDEGCFH

    percurso canonico com indicadores de subarvores (pre-ordem):

    A11B11D00E10G00C10F01H00

    O ndice 0 indica a ausencia e 1 indica a existencia de filho esquerdoou direito.

    descricao parentetica (inordem):

    (((()D())B((()G())E()))A((()F(()H()))C()))

    () representa uma arvore vazia; (X) representa uma arvore de raizX e subarvores descritas pelas cadeias e .

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias 143

    Arvores binarias de busca

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 144

    Exemplo de arvore de busca: numeros Exemplo de arvore de busca: nomes

  • 7/31/2019 estrutura de dados e tcnicas de programao

    37/89

    Exemplo de arvore de busca: numeros

    16

    8

    5 15

    10

    27

    21

    25

    Para qualquer no da arvore, os elementos da sua subarvore esquerda(direita) sao menores ou iguais (maiores ou iguais) do que o elemento dono.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 145

    Exemplo de arvore de busca: nomes

    jul

    fev

    ago

    abr dez

    jan

    set

    mai

    jun mar

    nov

    out

    Para qualquer no da arvore, os elementos da sua subarvore esquerda(direita) precedem (seguem) em ordem alfabetica o elemento do no.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 146

    Insercao em arvore de busca

    A insercao de um valor X cria uma nova folha em lugar de uma subarvorevazia. O ponto de insercao e determinado pelo percurso da arvore usandoa propriedade de arvores de busca.

    Y

    X < Y

    Y

    X

    Y

    X > Y

    Y

    X

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 147

    Insercao recursivaB o o l e a n I n s e r e A r v B u s c a ( A r v B i n p , T x ) {

    / V e r s a o r e c u r s i v a /i f ( ( p)==NULL) {

    p = m a l l o c ( s i z e o f (NoArvBin ));( p)>e s q = ( p)> d i r = N ULL ;( p)> i n f o = x ;r e t u r n t r u e ;

    } e l s e {T i n f o = ( p)> i n f o ;i f ( xes q ) , x );e ls e i f ( x>i n f o )

    r e t u r n I n s e r e A r v B u s c a ( & ( ( p)> di r ) , x );e l s e

    r e t u r n f a l s e ;}

    }

    Note-se o uso de passagem de parametro p por referencia. Esta versao apresenta somente recursao caudal que p ode ser

    facilmente eliminada.c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 148

    Insercao iterativa Remocao em arvore de busca

  • 7/31/2019 estrutura de dados e tcnicas de programao

    38/89

    Insercao iterativa

    B o o l e a n I n s e r e A r v B u s c a ( A r v B i n p , T x ) {/ V e r s a o i t e r a t i v a /T i n f o ;w h i l e ( ( p)!=NULL) {

    i n f o = ( p)> i n f o ;i f ( xe s q ) ;

    e ls e i f ( x>i n f o )p = & ( ( p)> d i r ) ;e l s e

    r e t u r n f a l s e ;}p = m a l l o c ( s i z e o f (NoArvBin ));( p)>e sq = ( p)> di r = NULL;( p)> i n f o = x ;r e t u r n t r u e ;

    }

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 149

    Remocao em arvore de buscaCaso 1: pelo menos uma das subarvores e vazia:

    p

    X

    p e o endereco do campo ou da variavel que contem o apontador parao no com a informacao X.

    O caso de ambas as subarvores vazias tambem esta coberto. O caso de subarvore esquerda vazia mas direita nao vazia e analogo. O no com a informacao X pode ser liberado.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 150

    Remocao em arvore de busca (cont.)Caso 2: as duas subarvores sao nao vazias

    p

    X

    Y

    p

    X

    Y

    Y

    Substituir a informacao X por Y o valor maximo contido nasubarvore esquerda (ou mnimo na subarvore direita).

    Remover o no que originalmente continha Y (sua subarvore direita evazia aplica-se o caso 1).

    Implementacao: exerccio.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 151

    Insercoes e remocoes em arvores binarias de busca

    Problema: a altura da arvore pode crescer muito ja que numa arvorecom n nos:

    altura maxima n altura mnima log2(n + 1)

    Se n 1.000: altura maxima 1.000 altura mnima 10

    Se n 1.000.000: altura maxima 1.000.000 altura mnima 20

    O pior caso ocorre, por exemplo, quando a insercao e feita em ordem(crescente ou descrescente)

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 152

    Balanceamento de arvores Arvores de altura balanceada (AVL)

  • 7/31/2019 estrutura de dados e tcnicas de programao

    39/89

    Balanceamento de arvores

    Algoritmo obvio nao garante balanceamento Balanceamento perfeito (altura mnima):

    eficiencia de busca: O(log n)

    eficiencia de insercao: O(n) inaceitavel Balanceamento aproximado:

    arvores AVL eficiencia de busca, insercao e remocao: O(log n) arvores rubro-negras eficiencia de busca, insercao e remocao:

    O(log n)

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 153

    Arvores de altura balanceada (AVL)

    Autores: G. M. Adelson-Velski e E. M. Landis (1962)

    Uma arvore binaria de busca e do tipo AVL se ela e vazia, ou entao,

    se para todos os seus nos a diferenca de alturas entre as subarvoresesquerda e direita e no maximo 1, em valor absoluto.

    A diferenca entre as alturas direita e esquerda e chamada fator debalanceamento.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 154

    Exemplos de arvores AVL

    0

    0 0

    +

    + 0 0

    0

    Note-se que a primeira arvore e de altura mnima enquanto que a segundanao e.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 155

    Pior caso de desbalanceamento: arvores de Fibonacci

    F0NULL

    F10

    F2

    0

    F3

    0

    F4

    0 0

    0

    Forma geral altura h 2:Fh

    Fh1 Fh2

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 156

    Arvores de Fibonacci: propriedades Insercao em arvores AVL

  • 7/31/2019 estrutura de dados e tcnicas de programao

    40/89

    Arvores de Fibonacci: propriedades

    Fh1 Fh2

    Para uma dada altura h, a arvore contem o numero mnimo de nospossvel preservando ainda a propriedade AVL.

    Qualquer outra arvore AVL com o mesmo numero de nos tem alturamenor ou igual este e o pior caso.

    Numero de nos de Fh: N(h) = N(h 1) + N(h 2) + 1, h 2

    Demonstra-se por inducao: N(h) = fh+2 1, onde fi e o i-esimonumero de Fibonacci.

    Usando a aproximacao fi ((1 +

    (5))/2)i/

    (5) obtem-se:h 1, 44log2(n + 2) (no maximo).

    Operacao de busca usara O(log n) operacoes.

    A ser visto: insercao e remocao tambem usarao O(log n) operacoes.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 157

    Insercao em arvores AVLA explicacao a seguir supoe que a insercao e realizada por uma funcaorecursiva cujo cabecalho e:

    B o o l e a n B u s c a I n s e r e ( A rv AV L p , T x , B o o l ea n a l t ) ;

    onde

    p: endereco da variavel que contem o apontador para a arvore x: valor a ser inserido de algum tipo T conveniente

    alt: endereco da variavel na qual e devolvida a informacao que indicase a arvore aumentou ou nao de altura

    se nao houver aumento de altura numa chamada recursiva, o resto daarvore nao sofre mudanca

    conforme sera visto, o aumento da altura sera no maximo de um epode acontecer somente numa arvore vazia ou entao cuja raiz temfator de balanceamento igual a zero; neste caso, o fator resultantesera diferente de zero, exceto quando a arvore era vazia.

    O valor devolvido pela funcao indica se a insercao foi efetivamenterealizada ou se o elemento x ja pertencia a arvore.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 158

    Insercao em arvores AVL (cont.)

    Explicacao geral: caso de chamada recursiva sem aumento de altura

    p

    h

    x alt: ? p

    h

    x ? a lt : f al se

    Neste caso, nao havera mais modificacoes na arvore.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 159

    Insercao em arvores AVL (cont.)

    Explicacao geral: caso de chamada recursiva com aumento de altura

    p

    h

    x alt: ? p

    h+1

    x ? al t: true

    Neste caso, havera modificacao no no corrente com possvel propagacaopara as chamadas anteriores.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 160

    Insercao em arvores AVL (cont ) Insercao em arvores AVL (cont )

  • 7/31/2019 estrutura de dados e tcnicas de programao

    41/89

    Insercao em arvores AVL (cont.)

    Caso 1: Insercao em arvore vazia:

    NULL

    h = 0

    X0

    h = 1

    Neste caso a altura h aumenta. Este fato sera propagado no retorno dafuncao atraves de valor verdadeiro da variavel alt.

    Nos casos seguintes, sera suposto sempre que a insercao foi realizada nasubarvore esquerda; o caso da insercao do lado direito e analogo.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 161

    Insercao em arvores AVL (cont.)

    Caso 2: Insercao do lado mais baixo:

    +

    h

    +

    x

    h

    alt: true

    0

    x

    h

    alt: false

    O conteudo do retangulo representa o resultado da chamada recursiva. Ofator de balanceamento sera modificado somente se a arvore esquerdaaumentou de tamanho.

    Neste caso a altura permanece inalterada. Este fato sera propagado noretorno da funcao atraves de valor falso da variavel alt. Comoconsequencia, o processo de insercao para (exceto os retornos).

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 162

    Insercao em arvores AVL (cont.)

    Caso 3: Insercao quando as duas alturas sao iguais

    0

    h

    0

    x

    h+1

    alt: true

    x

    h+1

    alt: true

    Neste caso, se houve aumento de altura na chamada recursiva, a alturatotal tambem aumentara. Este fato sera propagado no retorno da funcaoatraves de valor verdadeiro da variavel alt.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 163

    Insercao em arvores AVL (cont.)

    Caso 4: Insercao do lado mais alto

    h

    x

    h-1 h+1

    alt: true

    Neste caso, se houve aumento de altura na chamada recursiva, a arvoredeixara de ser do tipo AVL. Havera entao dois subcasos, dependendo dolado da subarvore esquerda em que houve insercao. A identificacao dosubcaso sera feita pelo valor do fator de balanceamento final da subarvoreque aumentou de altura durante a chamada recursiva.

    Nos dois casos havera rearranjos convenientes mas locais da arvore.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 164

    Insercao em arvores AVL (cont.) Insercao em arvores AVL (cont.)

  • 7/31/2019 estrutura de dados e tcnicas de programao

    42/89

    Insercao em arvores AVL (cont.)Caso 4a: insercao do lado esquerdo da subarvore (rotacao LL)

    x

    h-1 h+1

    alt: true

    A

    B

    x

    h-2

    h-1 h-2T1 T2

    T3

    0

    0

    B

    A

    x h-2

    h-1

    h-2

    T1

    T2 T3

    0B

    x

    h

    alt: false

    Neste caso e realizada uma transformacao denominada rotacao simples LL(esquerda, esquerda). A altura final permanece inalterada e a variavel alt

    recebe valor falso.c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 165

    Insercao em arvores AVL (cont.)Caso 4b: insercao do lado direito da subarvore (rotacao LR)

    x

    h-1 h+1

    alt: true

    +

    +0

    A

    B

    C

    x x

    T1T2 T3

    T4h-2

    h-2h-2/h-3

    AB

    C0

    /0 0/+

    h-2/h-3

    T1

    T2 T3T4x x

    h-2 h-2

    0 C

    x

    h

    alt: false

    Neste caso, a insercao pode ter sido realizada na subarvore esquerda oudireita do lado que cresceu, ou entao no proprio no C quando h = 2. Osfatores de balanceamento finais dependem disto, mas o da raiz sera 0. Atransformacao e denominada rotacao dupla LR (esquerda, direita). Aaltura final permanece inalterada e a variavel alt recebe valor falso.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 166

    Funcao de insercao em arvores AVL

    B o o l e a n B u s c a I n s e r e ( A rv AV L p , T x , B o o l ea n a l t ) {/ D e v o l v e t r u e o u f a l s e c o n f or m e h o uv e o u n a o i n s e r c a o ;

    s e h ou ve i n s e r c a o , a l t i n d i c a s e h ou ve au me nt o d a a l t u r a ./

    i f ( p==NULL) {p = m a l l o c ( s i z e o f (NoArvAVL ) ) ;( p)>e s q = ( p)> d i r = NULL ; ( p)> i n f o = x ;( p)> b a l = z e r o ; a l t = t r u e ;r e t u r n t r u e ;

    } e l s e {T i n f o = ( p)> i n f o ;i f (x==in fo )

    r e t u r n f a l s e ;e ls e i f ( xe s q ) , x , a l t ) ;i f ( ! r e s )

    r e t u r n f a l s e ;

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 167

    Funcao de insercao em arvores AVL (cont.)

    i f ( a l t ) { / a um en to d e a l t u r a /ArvAVL p1 , p2 ;s w i t c h ( ( p)> b a l ) {

    c a se m a i s : ( p)> b a l = z e r o ; a l t = f a l s e ; b re a k ;c a se z e r o : ( p)> bal = menos ; b re a k ;c a se menos :

    p 1 = ( p)>esq ;i f ( p1>bal==menos) {

    / Rotac a o s i m p l e s L L /} e l s e {

    / Rotac ao dup la LR /}p1>b a l = z e r o ; a l t = f a l s e ;b re a k ;

    }}r e t u r n t r u e ;

    } e l s e {

    / d e sc e a d i r e i t a an al og o /}

    }c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 168

    Exemplos de insercao em arvores AVL Exemplos de insercao em arvores AVL (cont.)

  • 7/31/2019 estrutura de dados e tcnicas de programao

    43/89

    e p os de se cao e a o es

    Insercao de 33:

    50

    25 65

    20 35 55

    6010 30 45

    70

    4033

    +

    +

    0 0

    0

    +

    0

    0

    50

    25 65

    20 35 55

    6010 30 45

    70

    4033

    +

    +

    0 +

    00

    0

    0

    0

    Neste caso, houve uma insercao simples e a mudanca de fatores debalanceamento afetou os nos marcados.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 169

    e p os de se cao e a o es (co t )

    Insercao de 63:

    50

    25 65

    20 35 55

    6010 30 45

    70

    40 63

    +

    +

    0 0

    0

    +

    0

    0

    50

    25 65

    20 35 60

    6310 30 45

    70

    40

    55

    +

    0

    0 0

    0

    0

    +

    0

    0

    Neste caso, a insercao causou uma rotacao simples do tipo RR, afetandoos nos marcados.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 170

    Exemplos de insercao em arvores AVL (cont.)

    Insercao de 41:

    50

    25 65

    20 35 55

    6010 30 45

    70

    40

    41

    +

    +

    0 0

    0

    +

    0

    0

    50

    25 65

    20 35 55

    6010 30 41

    70

    40 45

    +

    +

    0 0

    0

    +

    00

    0

    0

    Neste caso, a insercao causou uma rotacao dupla do tipo LR, afetando os

    nos marcados.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 171

    Remocao em arvores AVL

    1. Transformacao em remocao de uma folha - tres casos: o no tem grau zero: ja e uma folha o no tem grau um: pela propriedade AVL, a sua unica subarvore e

    necessariamente constituda por uma folha, cujo valor e copiado para ono pai; o no a ser eliminado e a folha da subarvore

    o no tem grau dois: o seu valor e substit do p elo maior valor contido nasua subarvore esquerda (ou o menor valor contido na sua subarvoredireita); o no que continha o menor (ou maior) valor copiado temnecessariamente grau zero ou um, recaindo num dos casos anteriores.

    2. Remocao propriamente dita.

    3. O algoritmo de remocao sera apresentado novamente como umafuncao recursiva que indica se houve diminuicao da altura da arvoreapos a remocao. Serao estudados apenas os casos de remocao dolado esquerdo; os outros sao analogos.

    4. A implementacao do algoritmo e um exerccio.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 172

    Remocao em arvores AVL (cont.) Remocao em arvores AVL (cont.)

  • 7/31/2019 estrutura de dados e tcnicas de programao

    44/89

    ( )

    Caso 1: Remocao de uma folha

    X0

    h = 1

    NULL

    h = 0

    Neste caso a altura h diminui. Este fato sera propagado no retorno dafuncao atraves de valor verdadeiro da variavel alt.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 173

    ( )

    Caso 2: Remocao quando as duas alturas sao iguais

    0

    x

    h

    0

    h

    alt: true

    +

    h

    alt: false

    O conteudo do retangulo representa o resultado da chamada recursiva. Ofator de balanceamento sera modificado somente se a arvore esquerdadiminuiu de tamanho.

    Neste caso, mesmo que haja diminuicao de altura na chamada recursiva, aaltura total permanece a mesma. Este fato sera propagado no retorno dafuncao atraves de valor falso da variavel alt.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 174

    Remocao em arvores AVL (cont.)

    Caso 3: Remocao do lado mais alto

    x

    h

    alt: true

    h-1

    0

    alt: true

    h-1

    Neste caso, se a chamada recursiva indica diminuicao da altura dasubarvore, a altura final da arvore tambem diminui e o processo continua.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 175

    Remocao em arvores AVL (cont.)

    Caso 4: Remocao do lado mais baixo

    +

    x

    h

    +

    alt: true

    h h-2

    Caso a subarvore esquerda tenha sua altura diminuda, a arvore deixa deser do tipo AVL. Ha tres subcasos, dependendo do fator de balanceamentodo filho direito da raiz.Note-se que, neste caso, tem-se h 3.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 176

    Remocao em arvores AVL (cont.) Remocao em arvores AVL (cont.)

  • 7/31/2019 estrutura de dados e tcnicas de programao

    45/89

    ( )

    Caso 4a: Fator de balanceamento 0 (rotacao RR)+

    alt: true

    h h-2

    +

    0

    A

    B

    h-2

    h-3

    h-2

    T1

    T2 T3

    +

    B

    A

    h-2

    h-3

    h-2

    T1T2

    T3

    B

    h

    alt: false

    Neste caso e realizada uma transformacao denominada rotacao simples RR(direita, direita). A altura final permanece inalterada e a variavel altrecebe valor falso. O processo de ajuste da arvore para.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 177

    ( )

    Caso 4b: Fator de balanceamento +1 (rotacao RR)

    +

    alt: true

    h h-2

    +

    +

    A

    B

    h-2

    h-3

    h-3

    T1

    T2T3

    0

    0

    B

    A

    h-2

    h-3 h-3T1 T2

    T3

    h-1

    0B

    h-1

    alt: true

    Neste caso tambem e realizada a transformacao denominadarotacao simples RR (direita, direita). A altura final diminui e a vari avel altrecebe o valor verdadeiro. O processo de ajuste da arvore continua.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 178

    Remocao em arvores AVL (cont.)

    Caso 4c: Fator de balanceamento -1 (rotacao RL)

    +

    alt: true

    h h-2

    +

    +0

    A

    B

    CT1

    T2 T3

    T4

    h-3

    h-3h-3/h-4

    C

    A B

    0

    /0 0/+

    h-3/h-4

    T1

    T2 T3T4

    h-3 h-3

    0C

    h-1

    alt: true

    Neste caso tambem e realizada uma transformacao denominada

    rotacao dupla RL (direita, esquerda). A altura final diminui e a variavelalt recebe o valor verdadeiro. O processo de ajuste da arvore continua.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 179

    Exemplos de remocao em arvores AVL

    Remocao de 40:

    50

    25 65

    20 35 55

    6010 30 45

    70

    40

    +

    +

    0 0

    0

    +

    0

    0

    50

    25 65

    20 35 55

    6010 30 45

    70

    0

    0

    +

    0 0

    0

    00

    0

    Neste caso, houve uma remocao s imples e a mudanca de fatores debalanceamento afetou os nos marcados.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 180

    Exemplos de remocao em arvores AVL (cont.)

  • 7/31/2019 estrutura de dados e tcnicas de programao

    46/89

    p ( )

    Remocao de 60:

    50

    25 65

    20 35 55

    6010 30 45

    70

    40

    +

    +

    0 0

    0

    +

    0

    0

    35

    25 50

    20 30 45 65

    10 40 55 70

    0

    0 0 0

    +

    0 0

    0

    Neste caso, a remocao causou, apos a volta da chamada com a raizoriginal, uma rotacao dupla do tip o LR, afetando os nos marcados.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores binarias de busca 181

    Arvores do tipo B

    (B trees)

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores do tipo B 182

    Discos magneticos

    Esboco esquematico do corte vertical de uma unidade com quatro discos(oito superfcies):

    0

    1

    2

    3

    4

    5

    6

    7

    cabecas leitoras/gravadoras

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores do tipo B 183

    Discos magneticos (cont.)Esboco esquematico de uma superfcie de um disco:

    .

    ..

    uma trilha um cilindro(trilhas iguais)

    setores

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores do tipo B 184

    Discos magneticos (cont.) Arvores B

  • 7/31/2019 estrutura de dados e tcnicas de programao

    47/89

    ( )Dados para um disco fictcio de 40 gigabytes:

    10 cabecas leitoras/gravadoras

    20.000 trilhas (2.000 por superfcie)

    400 setores por trilha

    512 bytes por setor (unidade mnima de enderecamento)

    tempo medio de busca da trilha enderecada (seek): S(10 milissegundos)

    tempo medio de latencia esp era pelo setor enderecado: L(10 milissegundos)

    tempo de transferencia de dados: T (60 megabytes/segundo)

    Estes tempos sao varias ordens de grandeza maiores do que tempo deacesso a memoria RAM (tipicamente 100.000 vezes).

    Numero de acessos: altura da arvore log2 n nao e mais aceitavel

    Solucao: logk n, com k >> 2

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores do tipo B 185

    Autores: Rudolf Bayer e Ed McCreight (1971) T e uma arvore B de ordem b 2 se:

    1. todas as folhas de T tem o mesmo nvel;2. cada no interno tem um numero variavel r de registros de informacao e

    r+1 de filhos, onde

    b/2 r b se no = raiz

    1 r b se no = raiz

    3. cada folha tem um numero variavel r de registros obedecendo a mesmarestricao do item anterior;

    4. os campos de informacao contidos nos registros obedecem apropriedade de arvores de busca.

    Alguns autores definem de maneira diferente o conceito de ordem. Pode-se provar que a altura maxima h de uma arvore B de ordem b

    que contem n registros e dada por:

    logb/2(n + 1)/2.

    c2010 T. Kowaltowski Estruturas de Dados e Tecnicas de Programacao Arvores do tipo B 186

    Exemplo de arvore B de ordem 3

    Neste caso, cada no tem no mnimo um e no maximo tres registros deinformacao.

    3 5 20 35 48 51 80 85 150 205

    17 50 83 203

    125

    c2010