Algoritmos de pesquisa

Documentos relacionados
Algoritmos de pesquisa

Árvores Binárias e Busca. Jeane Melo

Análise de complexidade

Algoritmos de ordenação Ordenação rápida ( Quicksort )

UNIVERSIDADE DA BEIRA INTERIOR

6. Pesquisa e Ordenação

Programação de Computadores II. Cap. 17 Busca

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Capítulo 14. Ordenação e pesquisa. Bubblesort. Alguns algoritmos de ordenação e pesquisa Medição do tempo de execução de um programa

EAD ARVORE BINÁRIA - ARMAZENAMENTO NÃO SEQUENCIAL COM VETORES

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

Análise de complexidade

Árvore Binária de Busca. Prof. César Melo

INF1007: Programação 2 7 Busca em Vetores. 01/04/2014 (c) Dept. Informática - PUC-Rio 1

3. Vectores: Algoritmos de Pesquisa. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2004/2005) Luís Paulo Reis (versão 2005/2006)

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Algoritmos e Estruturas de Dados. Décima sexta aula: Quicksort

Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1

Análise e Complexidade de Algoritmos

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

ÁRVORE BINÁRIA DE BUSCA

Programação II. Busca em Vetor (search) Bruno Feijó Dept. de Informática, PUC-Rio

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Métodos de Pesquisa em Memória Primária

DAINF - Departamento de Informática

QUESTÕES DE PROVAS ANTIGAS

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Projeto e Análise de Algoritmos

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Capacitação em Linguagem C Parte 2

Listas Lineares. continuando...

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

ALGORITMOS + PASCAL. Métodos de Pesquisa

BCC202 - Estrutura de Dados I

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Algoritmos de Pesquisa e Ordenação em Vectores

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

AULA 05 ESTRUTURA DE DADOS

Ordenação e Pesquisa

Introdução Métodos de Busca Parte 1

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio

Técnicas de Programação II

Pesquisa Sequencial e Binária

Análise de Algoritmos

Algoritmos de Ordenação

Método de ordenação - objetivos:

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Transcrição:

Define-se pesquisa como a operação que permite encontrar ou concluir que não existe, um dado elemento num dado conjunto. A pesquisa de um elemento pode ser feita num conjunto ordenado ou não. Quando o conjunto não está ordenado, o método usado é o exaustivo, que consiste em percorrer sequencialmente todo o conjunto (desde o primeiro) até se encontrar o elemento desejado ou, não o encontrando, se concluir que não existe. Quando o conjunto está ordenado, existem vários métodos, como sejam os de pesquisa sequencial e binária. No que se segue, considera-se que a ordenação é crescente.

Pesquisa exaustiva (algoritmo) Pesquisar o elemento Elem no vector V de tamanho tam k -1 // significa que Elem não foi encontrado em V i 0 Enquanto (i < tam) e (k = -1) Fazer Se (V[i] = Elem) então k i senão i i + 1 Se (k = -1) então Elem não se encontra em V senão Elem encontra-se na posição k

Pesquisa exaustiva (versão 1) int PesquisaExaustiva (int Elem, int V[], int tam) { int i = 0, k = -1; // k = posição onde se encontra Elem em V while ( (i < tam) && (k == -1) ) if (Elem == V[i]) k = i; else i = i + 1; if return (k == (k); -1) } return (-1); else return (k); return (k); }

Pesquisa exaustiva (versão 2) int PesquisaExaustiva (int Elem, int V[], int tam) { int i = 0; while ( (i < tam) && (Elem!= V[i]) ) i = i + 1; if (i == tam) return (-1); else return (i); }

Pesquisa sequencial (algoritmo) Pesquisar o elemento Elem no vector V de tamanho tam k -1 // significa que Elem ainda não foi encontrado em V i 0 // índice dos elementos do vector V Enquanto (i < tam) e (k = -1) Fazer Se (V[i] = Elem) então k i senão Se (V[i] < Elem) então i i + 1 senão k -2; // significa que Elem não está em V Se (k 0) então Elem encontra-se na posição k senão Elem não se encontra em V

Pesquisa sequencial (versão 1) int PesquisaSequencial (int Elem, int V[], int tam) { int i = 0, k = -1; // k = posição onde se encontra Elem em V while ( (i < tam) && (k == -1) ) if (Elem == V[i]) k = i; else if (V[i] < Elem) i = i + 1; else k = -2; return (k); }

Pesquisa sequencial (versão 2) int PesquisaSequencial (int Elem, int V[], int tam) { int i = 0; while ( (i < tam) && (V[i] < Elem) ) i = i + 1; if ( (i < tam) && (Elem == V[i]) ) return (i); else return (-1); }

Pesquisa binária (algoritmo) A ideia é comparar o elemento a pesquisar com o elemento que está ao meio do vector e analisar 3 situações diferentes: 1ª) se aquele elemento é igual ao que está ao meio, 2ª) se aquele elemento está antes do meio, 3ª) se aquele elemento está depois do meio. Se aconteceu a 1ª situação, então foi encontrado o elemento e está no vector naquela posição. Se aconteceu a 2ª situação, então basta pesquisar aquele elemento no subvector até ao meio. Se aconteceu a 3ª situação, então basta pesquisar aquele elemento no subvector do meio para a frente

Pesquisa binária (algoritmo iterativo) Pesquisar o elemento Elem no vector V de tamanho tam inicio 0 fim tam - 1 k -1 // k recebe a posição de Elem (no início presume-se que não está) Enquanto ( (inicio fim) e (k = -1) ) Fazer meio (inicio + fim) / 2 Se (Elem = V[meio]) então k meio senão Se (Elem < V[meio]) então fim meio 1 senão inicio meio + 1 Se (k 0) então Elem encontra-se em V na posição k senão Elem não se encontra em V

int PesquisaBinaria (int Elem, int V[], int tam) { int inicio = 0, fim = tam 1, meio, k = -1; while ( (inicio <= fim) && (k == -1) ) { meio = (inicio + fim) / 2; if (Elem == V[meio]) k = meio; else if (Elem < V[meio]) fim = meio - 1; else inicio = meio + 1; } return (k); }

Valor a pesquisar: 34

Valor a pesquisar: 34 1ª tentativa:

2ª tentativa:

2ª tentativa: 3ª tentativa:

4ª tentativa:

4ª tentativa: O valor 34 foi encontrada após 4 tentativas

Valor a pesquisar: 40

Valor a pesquisar: 40 1ª tentativa:

2ª tentativa:

2ª tentativa: 3ª tentativa:

4ª tentativa:

5ª tentativa:

6ª tentativa:

6ª tentativa: O valor 40 não está na lista, o que se concluiu após 6 tentativas