Transcript
Estruturas de Dados
Pesquisa de Dados Prof. Alex Sandro
[email protected]
1
Pesquisa Motivação Como fazer para localizar eficientemente um elemento dentro de um conjunto de dados?
Exemplo Um programa de locadora de video pode buscar, dado um código numerico (ou nao), a descrição de um determinado título
Tipos de busca a serem abordadas: Em vetores Árvores binárias de busca.
2
Busca em vetor Considerações Vetor de inteiros com n elementos Propósito: descobrir em que posição se encontra um elemento
Busca linear Percorrer o vetor, elemento a elemento, verificando a existência da chave de pesquisa Caso seja encontrado o elemento no vetor, retornaremos seu índice Se não for encontrado, retornará -1
3
Busca Linear Vantagem Extremamente simples! Uso em vetores desordenados.
Desvantagem Ineficiente quando o número de elementos do vetor for muito grande. Pode percorrer, no pior caso, todos os elementos para verificar se a chave está presente Se não estiver presente, aí é que percorre todo o vetor!
Conclusão Melhorar a eficiência do algoritmo Condição: elementos não estejam em uma ordem aleatória 4
Busca linear ordenada Considerações Comparar a chave com o elemento a cada passada Uma chave não estará presente no vetor se acharmos um elemento maior que o mesmo
Conclusão Se a chave procurada não estiver no vetor, este algoritmo se comporta de forma ligeiramente melhor que o anterior. A eficiência para busca em vetores ordenados pode ser melhorada!!! 5
Busca binária Princípio de funcionamento Testar se a chave de busca é menor que o elemento armazenado no meio do vetor Se for menor, a chave estará na primeira parte do vetor Caso contrário, estará na segunda parte do vetor. Se for igual, encontramos o elemento no vetor
Definida a parte do vetor em que a chave se encontra, repete-se o procedimento considerando apenas a parte restante. Subdivide-se a parte de interesse, até encontrar o elemento ou chegar a uma parte do vetor com tamanho zero 6
Pesquisa Binária Exemplo: chave = 71 15 27 35 46 55 63 69 71 88 92 100 0 5 10
1
inicio = 0, fim = 10 , meio = 5: 71 > 63 inicio = 6 (meio +1), fim = 10, meio = 8
69 71 88 92 100 6 10
2
71 < 88
inicio = 6, fim = 7 (meio-1), meio = 7
69 71 Elemento encontrado! 71 = 71 6 7 7
3
Pesquisa binária Vantagem Desempenho é muito superior ao de busca linear
Desvantagem Pior caso: quando o elemento não se encontra no vetor.
Tamanho do vetor a cada repetição 1a repetição – n 2a repetição – n/2 3a repetição – n/4 … 8
Árvore de Pesquisa Considerações Estrutura eficiente para armazenar informações Facilidade de inserção e retirada de nós Boa taxa de utilização da memória
Árvore Binária de Pesquisa Árvore binária onde cada nó obedece a seguinte propriedade: Todos os registros com chaves menores estão na subárvore esquerda Todos os registros com chaves maiores estão na subárvore direita 9
Árvore de Pesquisa Ilustração
10
Árvore de Pesquisa Procedimento para pesquisa Para encontrar um nó com a chave “x”: 1. 2. 3. 4.
5.
Compare-o com a raiz Se for menor, caminhar para a subárvore esquerda Se “x” é maior, vá para a subárvore direita Repita o processo recursivamente até que a chave procurada seja encontrada ou então um nó folha é atingido. Se houver sucesso na pesquisa, retorne o conteúdo do registro
Observação A “altura” de uma árvore é uma medida do tempo necessária para encontrar um determinado nó. 11
Árvore de Pesquisa Pergunta: Como imprimir uma árvore de pesquisa binária em ordem crescente?
Operações em árvores binárias de busca Cada nó armazena uma informação do tipo int Não vamos considerar a possibilidade de repetição de valores associados aos nós da árvore Árvore vazia = NULL Operações a revisar: busca, insere e retira (Vamos ao código!) 12