Escolar Documentos
Profissional Documentos
Cultura Documentos
- Listas
- Conceitos Gerais
- Uma lista � uma estrutura de dados que agrupa informa��es
referentes a um conjunto de elementos que de
alguma forma se relacionam entre si. (Ela oferece uma forma
simples de interligar os elementos
do conjunto)
- Cada n� da lista � formado por diversos atributos. Geralmente
um desses atributos atua como
identificador do n�. (Uma lista linear cada n� � formado
por campos que armazenam as
caracteristicas distintas dos elementos da lista, al�m
disso, cada n� da lista possui um
identificador. Por exemplo um aluno tem nome, matricula,
telefone, etc.)
- As listas podem ser mantidas na mem�ria do computador das
seguintes formas:
- Aloca��o sequencial
- Aloca��o encadeada
- Aloca��o Sequencial (Forma mais simples de manter os elementos de uma
lista na mem�ria)
- Na aloca��o sequencial, os elementos da lista ficam dispostos
de forma cont�gua na mem�ria.
- A implementa��o da aloca��o sequencial � geralmente realizada
com a reserva pr�via de mem�ria
(por isso a aloca��o sequencial � considerada uma aloca��o
est�tica).
- Possibilita acesso imediato a um elemento da lista. (Aloca��o
sequencial permite isso).
- Ex: os vetores auxiliam a implementa��o de uma lista
sequencial.
- Representa��o de uma lista com aloca��o sequencial
|N� 1|N� 2|N� 3|N� 4|N� 5|N� 6|N� 7|
Cada n� com campos |Matricula|Nome|Endere�o|
Aqui temos 7 alunos com seus atributos. Matricula seria o
atributo identificador dos n�s.
-Busca sequencial
-Busca bin�ria
ultimo = 56;
- Aloca��o Encadeada:
- Na aloca��o encadeada, os n�s da lista s�o alocados/desalocados
de acordo com a necessidade (aloca��o
din�mica). Diferente da sequencial que o espa�o �
previamente alocado, aqui n�o sabemos com
antecedencia a quantidade de elementos da lista, conforme a
necessidade aloca-se espa�o.
- Os n�s da lista ficam dispostos aleatoriamente na mem�ria. Os
mesmos s�o interligados pela refer�ncia
que um n� faz ao seu sucessor.
- Quando comparado com a aloca��o sequencial, esses atributos
extras fazem com que essa estrutura tenha
um consumo maior de mem�ria. (Como cada n� deve saber o seu
sucessor temos que ter mais um
atributo para referenci�-lo)
- Estrutura m�nima de um n� na linguagem java: (um n� tem que ter
minimamente um id que o diferencia dos
demais e uma referencia para o pr�ximo)
class No {
private int id;
private No proximo;
//outros atributos
interface IListaEncadeada {
void insere(No elementoAnterior, No
novoElemento);
No busca(int idProcurado);
void remove(int idNoRemovido);
}
return item;
}
- Lista Circular
- Uma lista circular tem como particularidade seu �ltimo n�
referenciar o primeiro n� da lista.
(Agora o ultimo n� referencia o primeiro elemento e n�o
mais null)
- A lista circular pode ser simplesmente encadeada ou
duplamente encadeada. (abaixo a simplesmente
encadeada. Se fosse duplamente encadeada ter�amos que
apontar para o anterior, e o primeiro n�
tb referenciaria o �ltimo).
|N� 1| | -> |N� 2| | -> |N� 3| | -> |N� 4| |
^ |
|_______________________________________|
- Pilhas
- Conceitos Gerais
- A pilha � uma estrutura de dados onde as inser��es e as
remo��es s�o realizadas em apenas um extremo.
(� como uma pilha de pratos, onde empilha-se e desempilha na
extremidade superior)
- O primeiro objeto a ser inserido na pilha � o �ltimo a ser
removido. Por trabalhar com essa pol�tica,
essa estrutura � conhecida como LIFO (last-in, first-out) -
ultimo incluido � o primeiro a ser retirado.
- Essa estrutura usa uma vari�vel de controle comumente chamada
de topo que referencia o �ltimo elemento
inserido na pilha.
- Principais opera��es de uma pilha
- Defini��o das principais opera��es.
interface IPilha {
public boolean isPilhaVazia(); //verifica se h� elem
na pilha, true ou false
public void push(Object elemento); //inclui novo
elemento no topo da pilha
public Object pop(); //remove um elemento do topo da
pilha
public Object peak(); //consulta o elemento que est�
no topo da pilha retorna o elem
//do topo (diferente da anterior
que remove o que est� no topo)
}
- Opera��o isPilhaVazia
- Essa opera��o verifica se a pilha esta vazia.
- Implementa��o em java: (t�cnica de aloca��o sequencial
que se utiliza um vetor)
public boolean isPilhaVazia() {
return topo == -1; //topo aponta para o indice,
esse indice � invalido
}
- Opera��o push
- Essa opera��o insere um elemento no topo da pilha.
- Implementa��o em java:
public void push(Object elemento) {
//COMPRIMENTO_PILHA � o tamanho da pilha, faz
-1 por causa do indice 0
if (topo != COMPRIMENTO_PILHA-1) { //verifica
se a estrutura nao esta cheia
elementos[++topo] = elemento;
//incrementa o topo e armazena nesse indice
//do array o
elemento
} else {
System.out.println("Estouro de pilha:
OverFlow")
}
}
- Opera��o pop
- Essa opera��o remove o elemento do topo da pilha.
- Implementa��o em java:
public Object pop() {
if (!isPilhaVazia()) {
Object object = elementos[topo]; //pega
quem est� no topo
elementos[topo--] = null; //tira o
elemento do topo e decremento o topo
return object;
} else { //pilha vazia, tentou retirar elemento
de uma pilha sem elem
System.out.println("Estouro de pilha:
Underflow");
return null;
}
}
_______
|_______|
|___56__| <--topo
|___01__|
|___30__|
|___10__|
|___2___|
return null;
}
- Filas
- Conceitos gerais
- � uma estrutura de dados onde as inser��es s�o realizadas em um
extremo e as remo��es em outro.
(Semelhante a uma fila de um Banco, quem chega vai pro final da
fila e quem chegou primeiro ser�
atendido primeiro.)
- O primeiro objeto a ser inserido na fila � o primeiro a ser
removido da mesma. Por trabalhar com essa
pol�tica, essa estrutura � conhecida como FIFO (first-in,
first-out).
- Essa estrutura usa duas vari�veis de controle para referenciar
o inicio e o fim da fila.
- Principais opera��es de uma fila
- Defini��o das principais opera��es em java.
interface IFila {
public boolean isFilaVazia();
public void enfileirar(Object elemento); //inclui
elemento no fim da fila
public Object desenfileirar(); //remove elemento do
inicio da fila
}
- Opera��o isFilaVazia
- Essa opera��o verifica se a fila esta vazia.
- Implementa��o em java:
public boolean isFilaVazia() {
return (inicio == fim) && (fim == 0)
}
- Opera��o enfileirar
- Essa opera��o insere um elemento na fila.
- Implementa��o em java: (estrutura sequencial circular)
public void enfileirar(Object elemento) {
int posicao = (fim % COMPRIMENTO) + 1;
//posicao que devemos inserir o elem.
//poderiamos
simplesmente pegar o fim + 1 para
//inserir no fim da fila
o elemento. Mas como
//ela tem carater
circular fazemos esse calculo.
//Ex: | |10|30|01|56|
fazendo o calculo
//5%5=0(resto) + 1 = 1;
Insere na pos 1.
- Opera��o desenfileirar
- Essa opera��o remove um elemento da fila.
- Implementa��o em java:
public Object desenfileirar() {
Object elementoRecuperado = null;
if (!isFilaVazia()) {
elementoRecuperado = elementos[inicio];
elementos[inicio] = null;
return elementoRecuperado;
}
I. Pilha: (topo) 10 - 29 - 18 - 8 - 50 - 25 - 14 - 23 - 12
- 11
II. Fila: (come�o) 11 - 12 - 23 - 14 - 25 - 50 - 8 - 18 -
29 - 10 (fim)
III. Fila: (come�o) 10 - 29 - 18 - 8 - 50 - 25 - 14 - 23 -
12 - 11 (fim)
IV. Pilha: (topo) 11 - 12 - 23 - 14 - 25 - 50 - 8 - 18 - 29
- 10
V. A fila mostrada fica com os elementos em ordem invertida
dos dados de entrada
- Opera��o removerPrimeiro
- Remove e retorna o primeiro elemento do deque.
- Como ficaria o deque abaixo ap�s a execu��o da opera��o
removerPrimeiro duas vezes?
|30| -> |10| -> |02| -> |04| -> |06|
Assim ap�s executar a fun��o removerPrimeiro ter�a-se
|10| -> |02| -> |04| -> |06|
- Opera��o removerUltimo
- Remove e retorna o �ltimo elemento do deque.
- Obs: Uma fila duplamente terminada, isto �, uma estrutura linear que
permite inserir e remover de ambos os
extremos � chamada
A) �rvore.
B) Shift-and.
C) Aut�mato.
D) Deque. (CORRETA)
E) Boyer-Moore
- �rvores Bin�rias (Em uma �rvore bin�ria cada n� pode ter no m�ximo
dois elementos)
- � uma �rvore que possui um n� especial chamado raiz e outros
dois n�s denominados sub�rvore esquerda e
sub�rvore direita.
- Classifica��o de �rvores bin�rias:
- �rvore estritamente bin�ria - � uma �rvore bin�ria em que
cada n� possui 0 ou 2 filhos. (Ou
teremos n�s folhas ou n�s com dois elementos)
/ |A| \
/ |B| \ |C|
/ |D| \ |E|
|F| |G|
- �rvore bin�ria completa � � uma �rvore bin�ria onde
somente os n�s do �ltimo ou do pen�ltimo
n�vel da �rvore podem ter uma sub�rvore vazia. Sempre
possui altura m�nima.
/ |A| \
/ |B| \ / |C| \
/ |D| \ |E| |F| |G|
|H| |I|
Os n�s F, G, H, e I possuem n�s folha, mas s� �
permitido nesses n�veis.
- �rvore bin�ria cheia � � uma �rvore bin�ria onde somente
o �ltimo n�vel pode ter uma sub�rvore
vazia. Sempre possui altura m�nima. Toda �rvore bin�ria
cheia � completa e estritamente bin�ria.
(Isso pq ela atende �s exigencias das outras �rvores)
/ |A| \
/ |B| \ / |C| \
/ |D| \ |E| |F| |G|
- �rvore ziguezague � s�o �rvores bin�rias que possuem
altura m�xima. Seus n�s interiores possuem
exatamente uma sub�rvore vazia. (Parece uma lista
encadeada)
|A|
\
|B|
\
|C|
\
|D|
\
|E|
emOrdem(no.subarvoreEsquerda);
visitar(no);
emOrdem(no.subarvoreDireta);
}
}
Percurso Em ordem:
Primeiramente dado o elemento A entramos
no m�todo e de imediato
executamos o A.subarvoreEsquerda que � B.
Depois volta para o m�todo
e chamados o D que �
no.subarvoreEsquerda. Como D � folha e n�o tem filho
pulamos para a linha visitar(no) que � o
n� D e assim � o n� visitado de
fato, � o primeiro de fato visitado. Ap�s
isso, vamos para a pr�xima
execu��o que �
emOrdem(no.subarvoreDireita) que � folha, D n�o tem filho.
Portanto, voltamos na pilha para o
elemento B e seguindo o fluxo vamos
para a linha visitar(no) onde de fato
visitamos o elemento. Esse ent�o
� o segundo elemento visitado de fato.
Agora na linha
emOrdem(no.subarvoreDireita) tem-se que F
ser� passado. Assim, gera-se
mais um fluxo de execu��o e vamos de novo
para a execu��o do m�todo, por�m
este tamb�m � um n� folha, pula-se a
primeira linha e vai para o visitar
onde visitamos mais um elemento de fato.
Com isso como emOrdem que recebe
no.subarvoreEsquerda n�o tem elemento
voltamos na pilha de execu��o para B
que parou na linha
emOrdem(no.subarvoreDireita). Mais uma vez voltamos no
fluxo de execu��o e vamos para o A que
continua na linha visitar(no),
visto que toda subarvore esquerda j� foi
visitada. Assim, ap�s visitar
de fato A vamos para
emOrdem(no.subarvoreDireita) que possui C. Ap�s
isso, voltamos novamente ao topo do
m�todo e tem-se a chamada
emOrdem(no.subarvoreEsquerda) que tem G e
que gera uma nova chamada ao
m�todo. Como G � folha ele vai para o
visitar que visita de fato o
elemento. Ap�s isso, elimina ele no fluxo
visto que n�o tem elemento na
direita. Volta para C e visitamos ele tb,
que de fato o visita. Como C
tb n�o tem direita encerramentos aqui a
execu��o.
Assim, a execu��o foi D B F A G C.
- Percursos em �rvores bin�rias � Pr�-ordem
- O percurso pr�-ordem segue recursivamente os
seguintes passos para cada
sub�rvore da �rvore:
- Visitar a raiz
- Percorrer a sub�rvore esquerda em pr�-
ordem
- Percorrer a sub�rvore direita em pr�-
ordem
- Implementa��o em java:
public void preOrdem(ArvoreBinaria no) {
if (no != null) {
visitar(no);
preOrdem(no.subarvoreEsquerda);
preOrdem(no.subarvoreDireita);
}
}
Percurso Em ordem:
Primeiramente dado o elemento A entramos
no m�todo e de imediato visita
o n� de fato, assim imprime A, depois
passa para a linha preOrdem passando
a subarvoreEsquerda, volta a execu��o do
m�todo e de cara visita(no) que
tamb�m imprime B. Depois, novamente chama
a subarvore da esquerda que
volta a execu��o do m�todo e de cara
novamente imprime D. Como D � n�
folha e n�o tem subarvore direita nem
esquerda volta o fluxo de execu��o
em B. Como j� visitamos B e j� chamamos
preOrdem(no.subarvoreEsquerda)
chamamos preOrdem(no.subarvoreDireita)
que executa o topo do m�todo
de novo e visita F de cara. Como F tamb�m
� folha voltamos na pilha de
execu��o para B que j� chamou tudo, ent�o
volta para A que tamb�m j�
foi visitado e j� chamou a parte da
subarvore esquerda e agora chama a
subarvore da direita. Assim, chama o
preOrdem(no.subarvoreDireita) que
� C que volta no todo do m�todo e de cara
chama visitar(no) e imprime
na tela C e chama
preOrdem(no.subarvoreEsquerda) que chama o m�todo de
novo e de cara imprime G. Como G � folha
volta na pilha de execu��o
para C que continua do
preOrdem(no.subarvoreDireita) que n�o tem nada
ent�o tamb�m volta-se na pilha de
execu��o para A que j� executou tudo
e assim finaliza a execu��o.
Assim a execu��o foi A B D F C G.
- Percursos em �rvores bin�rias � P�s-ordem
- O percurso p�s-ordem segue recursivamente os
seguintes passos para cada
sub�rvore da �rvore:
- Percorrer a sub�rvore esquerda em p�s-
ordem
- Percorrer a sub�rvore direita em p�s-
ordem
- Visitar a raiz
- Implementa��o em java:
public void posOrdem(ArvoreBinaria no) {
if (no != null) {
posOrdem(no.subarvoreEsquerda);
posOrdem(no.subarvoreDireita);
visitar(no);
}
}
Percurso Em ordem:
Primeiramente dado o elemento A entramos
no m�todo e de imediato chama
posOrdem(no.subarvoreEsquerda) para A que
d� B e chamamos tamb�m o
m�todo posOrdem(no.subarvoreEsquerda)
para D. Como D n�o tem subarvore
esquerda nem direita ele vai para o
visitar(no) que imprime de fato D.
Ap�s isso, sobe na pilha de execu��o para
B e como j� executou o m�todo
posOrdem(no.subarvoreEsquerda) ele
executa posOrdem(no.subarvoreDireita)
em que passa F e chama novamente o m�todo
atual, como F � folha ele
vai acabar executanto visitar para F,
assim imprime F. Ap�s isso retira
o fluxo de F da pilha que j� executou,
volta para B que tamb�m j� executou
o seu fluxo e volta para A que parou no
posOrdem(no.subarvoreEsquerda),
assim agora A executa
posOrdem(no.subarvoreDireita) que passa C e executa
novamente o m�todo que por sua vez vai
chamar o m�todo
posOrdem(no.subarvoreEsquerda) passando
ent�o G. Novamente � chamado
o m�todo mas G � folha ent�o vai executar
visitar imprimindo de fato
o G na tela. Com isso volta na pilha de
execu��o para C que parou no
posOrdem(no.subarvoreEsquerda) e como ele
n�o tem nada na direita vai
executar visitar() que imprime seu valor
na tela. Como C terminou volta
na pilha de execu��o para A que executa o
visitar e por fim ele tb j�
executou tudo e assim termina o fluxo de
execu��o.
Assim a ordem de visita foi D F B G C A
- �rvores Balanceadas
- As �rvores balanceadas objetivam manter o custo de suas
opera��es em O (log n). (O(n) no pior caso)
- O custo das opera��es deve se manter durante toda manipula��o
da �rvore. (tanto para inserir qto remover)
- Para alcan�ar essa meta, a estrutura deve ser frequentemente
alterada de forma a se moldar aos novos
dados. (independente da ordem de inser��o dos elementos eles ir�o
se estruturar para n�o termos o
problema de formar aquela �rvore ziguezague como ocorreu antes).
- Uma estrutura que opera com essas caracter�sticas � denominada
balanceada.
- O conceito de balanceamento
- As �rvores completas minimizam o n�mero de compara��es
efetuadas no pior caso para uma busca.
(isso se deve pq essas �rvores completas tem altura m�nima
e como os elementos est�o bem
distribuidos teremos menos compara��es, diferente da
ziguezague que tem uma altura maior e
como consequencia mais compara��es)
- O objetivo � ter uma �rvore cuja altura seja da mesma
ordem de grandeza de uma �rvore completa
com o mesmo n�mero de n�s.
- Uma �rvore que satisfa�a essa condi��o � denominada
�rvore balanceada.
- �rvore AVL
- Uma �rvore bin�ria T � denominada AVL quando todos os
seus n�s est�o regulados. (mas como
saber se os seus n�s est�o regulados ou nao? abaixo a
resposta)
- O n� de uma �rvore bin�ria � considerado regulado quando
as alturas de suas sub�rvores esquerda
e direita diferem em at� uma unidade. Caso contr�rio,
consideramos que o n� esta desregulado.
- A diferen�a entre as duas sub�rvores de um mesmo n� �
chamado fator de balanceamento ou
simplesmente balan�o.
- Um n� regulado tem fator de balanceamento igual a: -1, 0
ou 1. (esses s�o os valores validos
para o balan�o de um n� que compoe uma �rvore balanceada.
Abaixo tem como calculamos esse fator
de balanceamento.)
- Calculando o fator de balanceamento de um n� v:
- balan�o( v ) = hSD ( v ) � hSE ( v ) (� a alguma da
subarvore de V menos a altura da
subarvore esquerda de V)
- Para aumentar o desempenho das opera��es realizadas sobre
a estrutura, o valor do fator de
balanceamento � pr�-calculado e mantido nos n�s
correspondentes. Esses valores s�o atualizados
durante a realiza��o das opera��es de inser��o e remo��o.
(ent�o esse c�lculo do balan�o �
calculado e armazenado em cada n�.)
- �rvore AVL � Principais opera��es
- Defini��o das principais opera��es: (similar a
arvore binaria de busca)
interface IArvoreAVL {
No busca(char id);
void inserir(No elemento);
No remove(char id);
}
- As opera��es realizadas nas �rvores AVL seguem os
mesmos princ�pios das opera��es
realizadas nas �rvores bin�rias de busca, com as
seguintes varia��es: (toda mecanica
das arvores de busca se aplica nas arvores avl, mas
na avl temos a preocupa��o de deixar
os nos regulados a todo momento atraves das rota��es)
- Ap�s inserir ou remover um elemento na
�rvore, deve-se garantir que todos os
n�s da �rvore continuem regulados.
- Para garantir essa propriedade, rota��es s�o
executadas na estrutura.
- �rvores AVL - Rota��es
- Rota��es s�o transforma��es aplicadas na
estrutura da �rvore de forma a manter
a mesma regulada.
- Tipos de rota��es:
- Rota��o � direita
- Rota��o � esquerda
- Rota��o dupla � direita
- Rota��o dupla � esquerda
- �rvores AVL � Rota��o � direita
|C|
/
|B|
/
|A|
balan�o(c) = hSubarvoreDireita(C) -
h(SubarvoreEsquerda)
balan�o(c) = 1-3=-2 (n�o esta entre os
valores -1, 0 ou 1)
Podemos verificar que os demais n�s est�o
balanceados. Assim aplicaremos
a rota��o � direta para C.
/ |B| \
|A| |C|
A sub�rvore direta de B passou a ser a
subarvore esquerda de C.
- �rvores AVL � Rota��o � esquerda
- balan�o( c ) = hSD ( c ) � hSE ( c )
- balan�o( c ) = 3 � 1 = 2
|A|
\
|B|
\
|C|
- �rvore B
- A �rvore B � uma estrutura balanceada e largamente
utilizada como forma de armazenamento
secund�rio. Ela minimiza o tempo de acesso para
buscas, inser��es e remo��es. (�s
vezes o volume de dados � muito grande inviabilizando
de mante-la na mem�ria principal.
Por isso uma alternativa � a manipula��o dos dados na
mem�ria secund�ria que � mais
lenta, por isso a arvore B minimiza essas opera��es)
- Um n� de uma �rvore B � denominado p�gina.
- � poss�vel manter mais de uma chave em cada p�gina da
estrutura.
- Uma �rvore B de ordem d � uma �rvore ordenada que �
vazia, ou satisfaz as seguintes condi��es:
- Cada p�gina possui entre d e 2d chaves, exceto a
p�gina raiz que possui entre 1 e
2d chaves; (Podemos pegar como exemplo uma p�gina de
ordem 2, cada p�gina deveria ter
entre 2 e 4 chaves, exceto a raiz que teria um
intervalo de chaves variando entre 1 e 4.)
- Seja m o n�mero de chaves em uma p�gina P, ent�o:
- P tem m + 1 ponteiros para filhos;
- Se P for uma folha, todos os ponteiros
apontam para NULL.
- Se P n�o for uma folha, todos os ponteiros
referenciam uma p�gina.
(Assim, o numero de chaves de uma p�gina
determina a qtdade de filhos das
mesmas).
- Todas as folhas est�o no mesmo n�vel.
- Ex: 20 � a raiz e tem um filho na esq que � |3 10|
e um na direita que � |30 60|.
O |3 10| tem 3 filhos |1 2| |7 10| e |11 18
19|. Por fim, |30 60| tem mais tres
filhos que s�o |21 25| |45 55| e |90 99|.
Cada ret�ngulo � uma p�gina da �rvore e cada
elemento dentro � uma chave. No
topo temos a p�gina raiz que � a chave 20. Na
base temos as folhas que est�o
todos no mesmo n�vel.
Como essa �rvore tem ordem 2 podemos afirmar
que a quantidade de chaves por p�gina
vai variar de 2 at� 4. A raiz pode ter de uma
at� 4 chaves nesse caso.
A quantidade de ponteiros para filhos �
determinada pela quantidade de chaves.
Logo, se a p�gina tem 1 elementos ela deve ter
2 ponteiros para filhos como a raiz.
Se a p�gina tem dois filhos ela ter� 3
ponteiros para filhos como nas p�ginas
descendentes diretos da raiz. As folhas apontam
para null.
/ |20| \
|3 10| |30
60|
/ \ \ \ \
\ \
|1 2| |7 8| |11 18 19| |21
25| |45 55| |90 99|
- Principais opera��es de uma �rvore B
- Defini��o das principais opera��es:
interface IArvoreB {
Elemento busca(int chave);
void inserir(Elemento elemento);
Elemento remove(int chave);
}
- �rvore B � Opera��o busca
- Passos para buscar um elemento em uma �rvore
B:
(A busca inicia pela p�gina raiz)
Passo 1: Busca-se o n� na p�gina corrente.
(binaria ou sequencial)
Passo 2: Caso o valor seja encontrado, a
opera��o � encerrada.
Passo 3: Caso contr�rio, identificamos a
pr�xima p�gina a ser pesquisada e
voltamos para o passo 1. (Como temos
v�rios filhos, esse passo sera
respons�vel por decidir quem ele deve
mandar para o passo 1)
Essa opera��o tem complexidade O( logd n), onde
d � a ordem da �rvore.
- Como localizar o elemento cuja chave � 18?
/ |20| \
|3 10| |30
60|
/ \ \ \ \
\ \
|1 2| |7 8| |11 18 19| |21
25| |45 55| |90 99|
Iniciamos pela raiz e a primeira
compara��o � a chave 20 que � maior que
18, assim vamos para o ponteiro esquerdo
da chave 20.
Entao vamos a busca pela nova p�gina e
verificamos que 3 n�o � a chave
procurada, assim vamos para a chave 10
que tamb�m n�o � a procurada
e assim como o 3 tb � inferior ao
procurado, dessa forma vamos continua
a busca no ponteiro direito da chave 10.
Verificamos a p�gina das chaves
|11 18 19| e verificamos que 11 n�o � a
chave, mas 18 que � a pr�xima
p�gina verificada � o elemento que
estamos procurando. Assim, achamos.
- �rvore B � Opera��o inser��o
- Para inserir um elemento em uma �rvore B
devemos, inicialmente, identificar
onde o elemento deve ser inclu�do. A
opera��o busca auxilia nessa tarefa.
(Se o elemento n�o estiver na �rvore, a
opera��o busca indica a p�gina
e a posi��o que este elemento deve ser
inclu�do).
- A seguir inclu�mos o elemento na posi��o
apropriada.
- Se ap�s a inser��o uma p�gina ficar com 2d +
1 elementos, ent�o ser� necess�rio
realizar uma cis�o. (Vimos que cada
p�gina, fora a raiz, deve ter a
quantidade de chaves compreendida entre d
e 2d. Se ap�s a inclusao
tivermos uma quantidade superior, ou
seja, com 2d + 1 elementos devemos
tomar uma providencia para manter a
consistencia da estrutura).
- Como ficaria uma �rvore B (ordem 2) ap�s a
inclus�o dos seguintes elementos:
60, 90, 30, 55, 99, 45, 10, 29, 7, 3, 20, 18,
11, 25, 8, 2, 1 e 19?
- Opera��o Inser��o
- Passos a serem executados:
1� passo: Computar a fun��o hash a partir da chave do
elemento. (Identifica o bucket
onde o elemento deve ser inserido)
2� passo: Inclui elemento na lista encadeada. (Na
lista que representa o bucket)
- Opera��o Busca
- Passos a serem executados:
1� passo: Computar a fun��o hash a partir da chave do
elemento. (Identifica o bucket)
2� passo: Busca elemento na lista encadeada.
- Opera��o Remo��o
- Passos a serem executados:
1� passo: Computar a fun��o hash a partir da chave do
elemento. (Identifica o bucket)
2� passo: Busca elemento na lista encadeada.
(Identifica o elemento dentro do bucket)
3� passo: Remove o elemento da lista encadeada.
- Obs: Com rela��o a m�todos de pesquisa de dados, julgue os itens
subsecutivos. Listas encadeadas n�o s�o
utilizadas na busca que emprega tabelas hash. (ERRADA, eles
implementam os buckets das tab hash)
- Obs: A busca que utiliza uma tabela hash realiza compara��o das
chaves para encontrar a posi��o do elemento que
est� sendo buscado. (Para identifica o bucket basta computar a
fun��o hash e n�o ficar comparando
elementos).
- Obs: As colis�es ocorrem na utiliza��o de tabela hash porque v�rias
chaves podem resultar na mesma posi��o.
(CORRETA)
- Obs: No uso de estruturas de transforma��o de chave (hashing), a
solu��o de colis�es usando encadeamento tem
como principal caracter�stica o fato de nunca transbordar.
Adicionalmente, o tempo de busca na lista
ligada pode ser reduzido se uma lista duplamente encadeada for
utilizada. (INCORRETA, as listas encadeadas
e duplamente encadeadas tem a mesma complexidade temporal nas
buscas.)