Escolar Documentos
Profissional Documentos
Cultura Documentos
Unidade II
Pilha
B (b)
Topo
D (c) E
}
7
{ int v;
T_nodo *aux = ppilha->topo;
if (ppilha->topo == NULL)
{ printf("\n Pilha Vazia");
{ printf("\n %d",aux->info);
aux=aux->prox;
return(-1);
}
}
}
v = aux->info;
ppilha->topo=aux->prox;
free(aux);
return(v);
Recursividade
Definio
A recursividade pode ser considerada um mtodo eficaz para resolver um problema originalmente complexo, reduzindo-o em pequenas ocorrncias do problema principal. Assim, segue a idia de dividir para conquistar. Resolvendo, isoladamente, cada uma das pequenas partes, podemos obter a soluo do problema original como um todo.
Vantagens
Facilidade na resoluo de alguns tipos de problemas.
Desvantagens
Uso demasiado dos recursos computacionais de um computador.
9
Recursividade
#include <stdio.h> if ((op == 'l') || (op == 'L')) indice=busca_linear(numero,0); int busca_linear(int, int); else int busca_binaria(int,int, int); indice=busca_binaria(numero,0,total); int fat(int); if (indice == -1) printf("\n Elemento nao encontrado"); const total=10; else int vet[10]; printf("\n Encontrado no indice : %d",indice); numero=fat(numero); main() printf("\n O fatorial e : %d ",numero); { int i, numero, indice=-1; getchar(); char op; Programa que degetchar(); printf("\n Entre com 10 numeros \n "); monstra Busca Bin} for (i=0; i < total; i++) ria, Busca Linear e Clculo do Fatorial scanf("%d",&vet[i]); printf("\n Entre com o numero a pesquisar e calcular o fatorial \n "); de forma recursiva. scanf("%d",&numero); printf("\n Qual a pesquisa? (B)inaria ou (L)inear "); scanf("%c",&op); Para realizar a pesquisa Binria necessrio que o vetor esteja ordenado
10
Recursividade
int busca_linear(int n, int i) { if ((i < total) && (vet[i] != n)) return (busca_linear(n,i+1)); else { if (i == total) return(-1); else return(i); } }
Parmetros int fat(int n) { int res; Variveis locais if (n == 0) return 1; else Condio de parada { res = fat(n-1); res = res * n; Chamada da prpria funo return res; } }
int busca_binaria(int n, int inicio, int fim) { int meio; if (inicio <= fim) { meio = (inicio+fim)/2; if (vet[meio] == n) return meio; else if (vet[meio] < n) return busca_binaria(n,meio+1,fim); else return busca_binaria(n,inicio,meio-1); } else return -1; }
11
rvores
Definio:
Terminologia:
Cada n da rvore a raiz de uma Sub-rvore. O nmero de Sub-rvores de um n o grau daquele n. Um n de grau igual a zero denominado folha ou n terminal. A raiz da rvore tem nvel 0. Os demais ns: nvel = nmero de "linhas" que o liga raiz. Altura: nvel mais alto da rvore.
12
rvores
Representao Estrutural:
A B E C Grau = 3; Nvel =0 (raiz) D Grau = 1; Nvel = 1 Grau = 3; Nvel = 2 K Grau = 0; Nvel = 3
G I
H J
Grau = 0 (Folha)
13
rvores Binrias
Definio: Uma rvore binria uma estrutura de dados til quando precisam ser tomadas decises bidirecionais em cada ponto de um processo.
O Grau de cada n menor ou igual a 2 (Sub-rvores da esquerda e da direita).
rvores Binrias
Representao Estrutural:
rvore Estritamente Binria
5
8 6 9 7
A
2 1
Como construir uma rvore? Como percorrer uma rvore ? Aplicaes de rvores binrias Exemplos:
F
G 15
16
7 6
8
10
20 10 5 2 4
15 6 7 12 18 19
17
Pr-ordem: 20, 10, 5, 2, 4, 6, 7, 15, 12, 18, 17, 19 Em ordem: 2, 4, 5, 6, 7, 10, 12, 15, 17, 18, 19, 20 Ps-ordem: 4, 2, 7, 6, 5, 12, 17, 19, 18, 15, 10, 20
17
Exemplo
Exerccio:
Crie uma rvore com os seguintes ns: 14, 15, 4, 9, 7, 18, 2, 5, 16, 4, 20, 17, 9, 5.
18
T_arvore *inicializa_arvore() { T_arvore *nova_arvore; nova_arvore=(T_arvore *) malloc(sizeof(struct arvore)); if (nova_arvore == NULL) { printf("\n Memoria insuficiente para alocar estrutura"); exit(1); } nova_arvore->raiz=NULL; nova_arvore->qtd=0; return(nova_arvore); }
19
novo->info=n;
novo->pai=p;
novo->f_esq=NULL;
novo->f_dir=NULL;
novo->deletado='f';
return(novo);
21
} parvore->qtd++;
void ordem(T_nodo *sub_raiz) { if (sub_raiz != NULL) { ordem(sub_raiz->f_esq); if (sub_raiz->deletado == 'V') printf("\n *%d",sub_raiz->info); else printf("\n %d",sub_raiz->info); ordem(sub_raiz->f_dir); } }
22
p=parvore->raiz;
aux=parvore->raiz;
}
}
if (n < p->info)
aux = p->f_esq;
else
aux = p->f_dir;
}
if (n == p->info)
{ if (p->deletado != 'V')
printf("\n Informacao Existente"); else return(p); }
void pos_ordem(T_nodo *sub_raiz) { if (sub_raiz != NULL) { pos_ordem(sub_raiz->f_esq); pos_ordem(sub_raiz->f_dir); if (sub_raiz->deletado == 'V') printf("\n *%d",sub_raiz->info); else printf("\n %d",sub_raiz->info); } }
25
rvores AVL
Definio:
Uma rvore AVL uma rvore binria de busca construda de tal modo que a altura de sua Sub-rvore direita difere da altura da Sub-rvore esquerda de no mximo 1.
Fator de Balanceamento de um n:
a altura da Sub-rvore direita do n menos a altura da Sub-rvore esquerda do n . FB= altura direita - altura esquerda Se todos os FB forem [-1, 0, 1] a rvore est balanceada.
26
rvores AVL
Rebalanceamento:
Nos casos abaixo considere P como sendo o n raiz de uma Subrvore desbalanceada e U como sendo o n filho dessa raiz.
Caso 1: Altura Esquerda de P > Altura Direita de P Caso 1.1 : Altura Esquerda de U > Altura Direita de U Rotao a direita
rvores AVL
Caso 2: Altura Direita de P > Altura Esquerda de P Caso 1.2: Altura Direita de U > Altura Esquerda de U
Rotao a esquerda
28
rvores AVL
Exemplos de Rotaes ( Rotao simples a direita):
4
Rotao a Direita
1 0
29
rvores AVL
Exemplos de Rotaes (rotao simples a esquerda) :
1 0
Rotao a Esquerda
4
1 5
9 1 2
2 5 2 0
3 0
30
rvores - B
Definio:
a Construo e manuteno de rvores de busca de grandes dimenses. Ponteiros referem-se a reas de memria secundria, em vez de representarem endereos da memria principal. Busca: acesso a disco (com os inerentes atrasos de acesso). Sub-rvores representadas em unidades, do ponto de vista de acesso pginas Reduz o nmero de acessos ao disco. Necessita de esquema de crescimento controlado. Todo n, exceto a raiz, deve possuir entre n e 2n chaves, para uma dada constante n.
Caractersticas:
Cada pgina (n) contm no mximo, 2n elementos (chaves); cada pgina, exceto a que contm a raiz, contm no mnimo n chaves; os ns chamados folhas no tm descendentes e os demais(ns de derivao) possuem m + 1 descendentes, onde m a quantidade de chaves; todas as folhas tm o mesmo nvel.
31
rvores - B
Representao Estrutural:
K1 P0 P1
K2 P2
... ...
Km Pm-1 Pm
30 15 22 40 50
2689
17 18 20 21
27 29
36 38 39
42 45 48
51 53 55 56
32