You are on page 1of 45

Estruturas de Dados para Pesquisa e

Ordenao Pesquisa em Memria


Principal
Profa Brbara Quintela

barbaraquintela@pucminas.cesjf.br
Contedo
Introduo - Conceitos Bsicos
Pesquisa Sequencial
Pesquisa Binria
rvores de Pesquisa (rvores Binrias de Pesquisa
sem Balanceamento, rvores Binrias de Pesquisa com
Balanceamento, rvores SBB, Transformaes para
Manuteno da Propriedade SBB)
Pesquisa Digital (Trie, Patricia)
Transformao de Chave (Hashing), Funes de
Transformao, Listas Encadeadas, Endereamento
Aberto, Hashing Perfeito
Introduo
Estudo de como recuperar informao a partir
de uma grande massa de informao
previamente armazenada.

A informao dividida em registros.

Cada registro possui uma chave para ser


usada na pesquisa.
Introduo
Objetivo da pesquisa:
Encontrar uma ou mais ocorrncias de
registros com chaves chave de pesquisa.

Pesquisa com sucesso X Pesquisa sem


sucesso.
Conceitos
Tabelas
Conjunto de registros ou arquivos TABELAS
Tabela:
Associada a entidades de vida curta, criadas na
memria interna durante a execuo de um
programa.
Arquivo:
Geralmente associado a entidades de vida mais
longa, armazenadas em memria externa.
Conceitos
Distino no rgida:

Tabela: arquivo de ndices


Arquivo: tabela de valores de funes.
Escolha do
Mtodo de Pesquisa
Depende principalmente:
1. Quantidade dos dados envolvidos.
2. Arquivo estar sujeito a inseres e
retiradas frequentes.

Obs: Se contedo do arquivo praticamente


estvel importante minimizar o tempo de
pesquisa, sem preocupao com o tempo
necessrio para estruturar o arquivo.
Algoritmos de Pesquisa
importante considerar os algoritmos de
pesquisa como tipos abstratos de dados,
Com conjunto de operaes associado a uma
estrutura de dados
Para que exista uma independncia de
implementao para as operaes.
Operaes mais comuns
1. Inicializar a estrutura de dados.
2. Pesquisar um ou mais registros com
determinada chave.
3. Inserir um novo registro.
4. Retirar um registro especfico.
5. Ordenar um arquivo para obter todos os
registros em ordem de acordo com a chave.
6. Ajuntar dois arquivos para formar um arquivo
maior.
Dicionrio
Nome comumente utilizado para descrever
uma estrutura de dados para pesquisa.
Dicionrio um tipo abstrato de dados com as
operaes:
1. Inicializa
2. Pesquisa
3. Insere
4. Retira
Dicionrio
Analogia com um dicionrio da lngua
portuguesa
Chaves palavras
Registros entradas associadas com cada
palavra:
pronncia
definio
sinnimos
outras informaes
Pesquisa Sequencial
Mtodo de pesquisa mais simples
A partir do primeiro registro, pesquise
sequencialmente at encontrar a chave
procurada; ento pare.

Uma forma de armazenar conjunto de registros


por meio de um por meio de um tipo estruturado
Campo chave identificador do registro
Pesquisa Sequencial
Obs:
Alm da chave podem exsistir outros
componentes
Sem muita influncia nos algoritmos de
pesquisa
Ex: ponteiros para o local que contm os
componentes
Exemplo de implementao
do tipo dicionrio
Funo para pesquisar
item na Tabela
Funo para pesquisar
item na Tabela
A funo retorna o ndice do registro que
contm a chave x;
Caso no encontre, retorna 0;
Esta implementao assume que no existem
chaves repetidas;
O que precisa modificar?
Funo para pesquisar
item na Tabela
Utilizao de um registro sentinela na posio zero do
array:
1. Garante que a pesquisa sempre termina: se o ndice
retornado por pesquisa for zero, a pesquisa foi sem
sucesso.
2. No necessrio testar se i > 0, devido a isto:
o anel interno da funo pesquisa extremamente simples: o
ndice i decrementado e a chave de pesquisa comparada
com a chave que est no registro.
isto faz com que esta tcnica seja conhecida como pesquisa
sequencial rpida.
Funo para pesquisar
item na Tabela
Pesquisa com sucesso:
melhor caso : C(n) = 1
pior caso : C(n) = n
caso mdio : C(n) = (n + 1)/2
Pesquisa sem sucesso:
C(n) = n + 1.
O algoritmo de pesquisa sequencial a melhor
escolha para o problema de pesquisa em tabelas
com at 25 registros.
Funes para inicializar
e inserir registro na Tabela
Exerccios
1.Com base no tipo de dados Dicionrio e nas funes
para inicializar, inserir e pesquisa sequencial
apresentadas, implemente um programa em C que
alimente uma tabela com 5 registros e imprima o
resultado da busca de uma chave informada pelo
usurio. O programa deve retornar uma mensagem
com o ndice quando tiver sucesso e uma mensagem
de erro caso no encontre a chave. Implemente
tambm uma funo para remover registros da tabela
2. (Lista 2) Modifique as funes para permitir
pesquisa quando houver mais de um registro com a
mesma chave
Pesquisa Binria
Pesquisa em tabela pode ser mais eficiente Se
registros forem mantidos em ordem
Para saber se uma chave est presente na tabela:
1. Compare a chave com o registro que est na posio do
meio da tabela.
2. Se a chave menor ento o registro procurado est na
primeira metade da tabela
3. Se a chave maior ento o registro procurado est na
segunda metade da tabela.
4. Repita o processo at que a chave seja encontrada, ou
fique apenas um registro cuja chave diferente da
procurada, significando uma pesquisa sem sucesso.
Pesquisa Binria
Pesquisa Binria
Pesquisa Binria

Anlise
A cada iterao do algoritmo, o tamanho da
tabela dividido ao meio.
Logo: o nmero de vezes que o tamanho da
tabela dividido ao meio cerca de log n.
Pesquisa Binria

Ressalva: o custo para manter a tabela


ordenada alto:
a cada insero na posio p da tabela implica no
deslocamento dos registros a partir da posio p para
as posies seguintes.
Conseqentemente, a pesquisa binria no
deve ser usada em aplicaes muito
dinmicas.
Exerccios

1. Implemente a funo de pesquisa binria com


base no tipo de dados dicionrio utilizado para a
pesquisa sequencial.
2. (Lista 2) Crie um programa principal para testar
a funo implementada no exerccio anterior.
Gere uma tabela contendo registros com as
chaves do exemplo apresentado ( A, B, C, D, E,
F, G, H) e teste casos em que a pesquisa retorna
com sucesso e sem sucesso. O programa deve
imprimir mensagem com resultado da pesquisa.
rvores de Pesquisa
A rvore de pesquisa uma estrutura de
dados muito eficiente para armazenar
informao.
Particularmente adequada quando existe
necessidade de considerar todos ou alguma
combinao de:
Acesso direto e sequencial eficientes.
Facilidade de insero e retirada de registros.
Boa taxa de utilizao de memria.
Utilizao de memria primria e secundria.
rvores de Pesquisa
Se considerar os requisitos separadamente pode
haver estrutura de dados superior a rvore de
pesquisa
Ex: tabelas hashing possuem tempos mdios de
pesquisa melhores
Precisa ser ordenada se houver necessidade de
processar registros sequencialmente
Ex: tabelas usando posies contguas de memria
possuem melhores taxas de utilizao de
memria
Alto custo de insero e retirada de registros
rvores de Pesquisa
rvore binria conjunto finito de ns que ou
est vazio ou consiste de um n chamado raiz
mais os elementos de duas rvores binrias
distintas chamadas de subrvore esquerda e
subrvore direita do n raiz (Knuth, 1997).
Em uma rvore binria, cada n tem no mximo
duas subrvores.
rvores de Pesquisa
Relembrando:
Existem ponteiros para subrvores esquerda e direita
de cada n
O nmero de subrvores de um n chamado grau
do n
Um n de grau zero chamado n externo ou n
folha
Os demais ns so chamados ns internos
rvores de Pesquisa
Uma rvore binria de pesquisa uma rvore
binria em que todo n interno contm um
registro.
Para cada n a propriedade verdadeira:
Todos os registros com chaves menores esto na
subrvore esquerda e todos os registros com chaves
maiores esto a subrvore direita.
rvores de Pesquisa
O nvel do n raiz zero
Se um n est no nvel i ento a raiz de suas
subrvores esto no nvel i + 1
A altura de um n o comprimento do caminho
deste n at um n folha. Altura da rvore a
altura do n raiz.
Exemplo:
rvore binaria de
pesquisa de altura = 4
rvores de Pesquisa
A estrutura de dados rvore binria de
pesquisa pode ser utilizada para implementar o
tipo abstrato de dados Dicionrio
(operaes: inicializa, pesquisa, insere e retira)

Obs: ao definir uma classe para o TAD


Dicionario usando rvore binria, a inicializao
ser feita no construtor.
Ex: ArvoreBinaria
rvores de Pesquisa
Algoritmo de busca
Compare a chave reg com a chave que est na
raiz.
Se menor, v para a subrvore esquerda.
Se maior, v para a subrvore direita.
Repita o processo recursivamente, at que a
chave procurada seja encontrada ou um n
folha atingido.
Se a pesquisa tiver sucesso ento o registro
contendo a chave passada em reg retornado.
rvores de Pesquisa
Inserir n na arvore

Atingir uma referncia null em um processo de


pesquisa significa uma pesquisa sem sucesso.

Caso se queira inserir um n na rvore, a


referncia null atingida justamente o ponto
de insero.
rvores de Pesquisa
Retirar n da arvore
A retirada de um registro no to simples
quanto a insero.
Se o n que contm o registro a ser retirado
possui no mximo um descendente a
operao simples.
No caso do n conter dois descendentes o
registro a ser retirado deve ser primeiro:
substitudo pelo registro mais direita na subrvore
esquerda;
ou pelo registro mais esquerda na subrvore direita.
rvores de Pesquisa
Retirar n da arvore
Exemplo:
Para retirar registro
com chave 5
Troca pelo registro com
chave 4 ou pelo registro
com chave 6
Retira o n que
recebeu o registro com
chave 5
rvores de Pesquisa
Caminhamento
Aps construda a rvore, pode ser
necessrio percorrer todos os
registros que compem a tabela ou
arquivo.
Existe mais de uma ordem de
caminhamento em rvores, mas a
mais til a chamada ordem de
caminhamento central.
O caminhamento central mais bem
expresso em termos recursivos:
1. caminha na subrvore esquerda na
ordem central;
2. visita a raiz;
3. caminha na subrvore direita na
ordem central.
rvores de Pesquisa
Caminhamento
Observao:
Uma caracterstica
importante do
caminhamento central
que os ns so visitados
de forma ordenada.
Ordem lexicogrfica das
chaves
1, 2, 3, 4, 5, 6 e 7
rvores de Pesquisa
Anlise
O nmero de comparaes em uma pesquisa
com sucesso:
melhor caso : C(n) = O(1),
pior caso : C(n) = O(n) (n+1)/2,
caso mdio : C(n) = O(log n).

O tempo de execuo dos algoritmos para


rvores binrias de pesquisa dependem muito
do formato das rvores.
rvores de Pesquisa
Exerccio
Um programador props um algoritmo no-
recursivo para o percurso em preordem de uma
rvore binria com as seguintes caractersticas.
Cada n da rvore binria representado por um
registro com trs campos: chave, que armazena seu
identificador; esq e dir, ponteiros para os filhos esquerdo
e direito, respectivamente.
O algoritmo deve ser invocado inicialmente tomando o
ponteiro para o n raiz da rvore binria como
argumento.
O algoritmo utiliza push() e pop() como funes
auxiliares de empilhamento e desempilhamento de
ponteiros para ns de rvore binria, respectivamente.
rvores de Pesquisa
Exerccio
A seguir, est apresentado o algoritmo
proposto, em que representa o ponteiro
nulo.
rvores de Pesquisa
Exerccio
Com base nessas informaes e supondo que a raiz de uma
rvore binria com n ns seja passada ao procedimento
preordem(), julgue os itens seguintes.
I. O algoritmo visita cada n da rvore binria exatamente uma
vez ao longo do percurso.
II. O algoritmo s funcionar corretamente se o procedimento
pop() for projetado de forma a retornar caso a pilha esteja
vazia.
III. Empilhar e desempilhar ponteiros para ns da rvore so
operaes que podem ser implementadas com custo constante.
IV. A complexidade do pior caso para o procedimento
preordem() O(n)
rvores de Pesquisa
Exerccio
Assinale a opo correta.
(A) Apenas um item est certo.
(B) Apenas os itens I e IV esto certos.
(C) Apenas os itens I, II e III esto certos.
(D) Apenas os itens II, III e IV esto certos.
(E) Todos os itens esto certos
Estruturas de Dados para Pesquisa e
Ordenao Pesquisa em Memria
Principal
Profa Brbara Quintela

barbaraquintela@pucminas.cesjf.br

You might also like