Pesquisa em Memória Primária

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Estruturas de Dados Marcio Gonçalves.
ESTRUTURA DE DADOS LES.
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Aula 10 Algoritmos de Busca
Algoritmos de Busca CONTEÚDO (1) Motivação (2) Busca Linear
Estruturas de Dados Árvores Binárias
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
TADS – Tipos Abstratos de Dados
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.

David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Pesquisa em Árvores Digitais
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
Pesquisa em Memória Primária - Hashing
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
Pesquisa em Memória Primária – Árvores de Busca
Medida do Tempo de Execução de um Programa
David Menotti Estruturas de Dados I DECOM – UFOP
Pilha David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
Medida do Tempo de Execução de um Programa
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Pesquisa Algoritmos de pesquisa recebem um alvo e tentam encontrá-lo dentro de um conjunto de elementos. Recuperação (ou hit): quando o algoritmo encontra.
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Pesquisa em Memória Primária
Análise Léxica Supondo o trecho de programa abaixo:
Listas Encadeadas.
Algoritmos de Ordenação
ALGORITMOS E ESTRUTURAS DE DADOS
Pesquisa em memória primária: hashing
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
Árvores Binárias de Pesquisa
Algorítmos e estrutura de dados III
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Universidade Católica de Pelotas Mestrado em Ciência da Computação
Estruturas de Dados Aula 9: Listas (parte 1)
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Tabelas Hash Prof. Túlio Toffolo
Estruturas de Dados Aula 15: Árvores
– Aula 20 Adaptado por Reinaldo Fortes para o curso de
Aula 10 Algoritmos de Busca
Tabela Hash Alunos : Gustavo Jorge Zanin nºUSP
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Estrutura de dados Aula 6 - hash
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
Hashing (Tabela de Dispersão)
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
UNIVERSIDADE FEDERAL DE MINAS GERAIS Listas Lineares Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Pesquisa em Memória Primária David Menotti Estruturas de Dados I DECOM – UFOP

Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial Pesquisa Binária Árvores de Pesquisa Árvores Binárias de Pesquisa sem Balanceamento Árvores Binárias de Pesquisa com Balanceamento Árvores AVL Árvores Digitais Transformação de Chave (Hashing)‏ Listas Encadeadas, Endereçamento Aberto, Hashing Perfeito

Introdução – Conceitos Básicos Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação é dividida em registros. Cada registro possui uma chave para ser usada na pesquisa. Objetivo da pesquisa: Encontrar uma ou mais ocorrências de registros com chaves iguais à chave de pesquisa. Pesquisa com sucesso X Pesquisa sem sucesso.

Introdução – Conceitos Básicos Tabelas Conjunto de registros ou arquivos ⇒ TABELAS Tabela: associada a entidades de vida curta, criadas na memória interna durante a execução de um programa. Arquivo: geralmente associado a entidades de vida mais longa, armazenadas em memória externa. Distinção não é rígida: tabela: arquivo de índices arquivo: tabela de valores de funções.

Escolha do Método de Pesquisa mais Adequado a uma Determinada Aplicação Depende principalmente: 1. Quantidade dos dados envolvidos. 2. Arquivo estar sujeito a inserções e retiradas freqüentes. Se conteúdo do arquivo é estável é importante minimizar o tempo de pesquisa, sem preocupação com o tempo necessário para estruturar o arquivo

Algoritmos de Pesquisa Tipos Abstratos de Dados É importante considerar os algoritmos de pesquisa como tipos abstratos de dados (TADs), com um conjunto de operações associado a uma estrutura de dados, de tal forma que haja uma independência de implementação para as operações. Operações 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 específico. 5. Ordenar um arquivo para obter todos os registros em ordem de acordo com a chave. 6. Juntar dois arquivos para formar um arquivo maior.

Dicionário Nome comumente utilizado para descrever uma estrutura de dados para pesquisa. Dicionário é um tipo abstrato de dados com as operações: 1. Inicializa 2. Pesquisa 3. Insere 4. Retira Analogia com um dicionário da língua portuguesa: – Chaves  palavras – Registros  entradas associadas com *pronúncia, definição, sinônimos, outras informações

Pesquisa Sequencial Método de pesquisa mais simples: a partir do primeiro registro, pesquise seqüencialmente até encontrar a chave procurada; então pare. Armazenamento de um conjunto de registros por meio do tipo estruturado arranjo:

Pesquisa Sequencial #define MAX 10 typedef long TChave; typedef struct { TChave Chave; /* outros componentes */ } Registro; typedef int Indice; Registro Item[MAX + 1]; Indice n; } Tabela;

Pesquisa Sequencial Implementação para as operações Inicializa, Pesquisa : void Inicializa(Tabela *T)‏ { T->n = 0; } int Pesquisa(Tabela *T, TChave x)‏ int i; T->Item[0].Chave = x; i = T->n; while (T->Item[i].Chave != x) i--; return i;

Pesquisa Sequencial Implementação para a operacao Insere: int Insere(Registro Reg, Tabela *T)‏ { if (T->n == MAX)‏ return 0; T->n++; T->Item[T->n] = Reg; return 1; }

Pesquisa Sequencial Pesquisa retorna o índice do registro que contém a chave x; Caso não esteja presente, o valor retornado é zero. A implementação não suporta mais de um registro com uma mesma chave. Para aplicações com esta característica é necessário incluir um argumento a mais na função Pesquisa para conter o índice a partir do qual se quer pesquisar.

Pesquisa Sequencial Utilização de um registro sentinela na posição zero do array: Garante que a pesquisa sempre termina: se o índice retornado por Pesquisa for zero, a pesquisa foi sem sucesso. Não é necessário testar se i > 0, devido a isto: o anel interno da função 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 técnica seja conhecida como pesquisa sequencial rápida.

Pesquisa Sequencial Análise: Pesquisa com sucesso: melhor caso : C(n) = 1 pior caso : C(n) = n caso médio: 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.

Pesquisa Binária 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 posição do meio da tabela. 2. Se a chave é menor então o registro procurado está na primeira metade da tabela 3. Se a chave é maior então 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.

Exemplo de Pesquisa Binária para a Chave G

Pesquisa Binária Iterativa Indice Binaria(Tabela *T, TChave x) { Indice i, Esq, Dir; if (T->n == 0) return 0; else { Esq = 1; Dir = T->n; do { i = (Esq + Dir) / 2; if (x > T->Item[i].Chave) Esq = i + 1; else Dir = i - 1; } while ( (x != T->Item[i].Chave) && (Esq <= Dir) ); if (x == T->Item[i].Chave) return i; else return 0; }

Pesquisa Binária Recursiva Indice Binaria(Tabela *T,int Esq, int Dir, TChave x) { Indice Meio; Meio = (Esq+Dir)/2; if (x != T->Item[Meio].Chave) & (Esq == Dir) ) return -1; else if (x > T->Item[Meio].Chave) return Binaria(T,Meio+1,Dir,x); else if (x < T->Item[Meio].Chave) return Binaria(T,Esq,Meio-1,x); else return Meio; }

Pesquisa Binária Análise A cada iteração do algoritmo, o tamanho da tabela é dividido ao meio. Logo: o número de vezes que o tamanho da tabela é dividido ao meio é cerca de log n. Ressalva: o custo para manter a tabela ordenada é alto: a cada inserção na posição p da tabela implica no deslocamento dos registros a partir da posição p para as posições seguintes. Conseqüentemente, a pesquisa binária não deve ser usada em aplicações muito dinâmicas.