Análise e Complexidade de Algoritmos

Documentos relacionados
Classificação e Pesquisa

Algoritmos de Busca em Vetores

MÉTODOS DE PESQUISA DE DADOS EM MEMÓRIA PRIMÁRIA. Material da Prof. Ana Eliza

Análise e Complexidade de Algoritmos

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

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I

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

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Estrutura de Dados. ! Listas lineares. ! Como manipulá-las: ! estática. ! dinâmicas. ! pilhas. ! filas

ESTRUTURA DE DADOS (TCC )

DAINF - Departamento de Informática

Aula 18 Algoritmos básicos de busca e classificação

Análise e Complexidade de Algoritmos

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins

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

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

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

Pesquisa: operação elementar

Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

Busca em Memória Primária Estrutura de Dados II

Busca em Memória Primária Estrutura de Dados II

Análise e Complexidade de Algoritmos

Análise de Complexidade de Algoritmos. mario alexandre gazziro

Complexidade de algoritmos Notação Big-O

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão

Classes, Herança e Interfaces

BUSCA EM ARRAYS. Prof. André Backes. Ato de procurar por um elemento em um conjunto de dados

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

Informática Parte 17 Prof. Márcio Hunecke

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Pesquisa Linear. Adriano J. Holanda 15/3/2016

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

BCC202 - Estrutura de Dados I

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Prova de Recuperação PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins

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

Algoritmos Avançados Análise de Complexidade

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

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

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Introdução Métodos de Busca Parte 1

Estruturas de dados para listas arrays e listas ligadas

Projeto e Análise de Algoritmos

Árvores Binárias de Busca

Métodos de Pesquisa de Dados (II) Árvore N-ária de Pesquisa

Área que visa determinar a complexidade (custo) de um algoritmo, com isso é possível:

O problema da busca (ou pesquisa) - Dado um conjunto de elementos, onde cada um é identificado por uma chave, o objetivo da busca é localizar, nesse

Busca em Arranjos. Busca em arranjos. Busca em arranjos. Programação de Computadores. Busca em Arranjos

INF 1010 Estruturas de Dados Avançadas

Algoritmos de pesquisa. Tabelas de dispersão/hash

Análise de complexidade

Algoritmos de pesquisa

Bubble Sort. Tempo total O(n 2 )

Árvore B. Uma Árvore B de ordem m éumaárvore,talque: Cada nó contém no máximo m

O conjunto de registros pode ser: Um vetor de registros Uma lista encadeada Uma árvore Etc.

Projeto e Análise de Algoritmos

i a[i]

Pesquisa e Ordenação. SCE121- Introdução a Programação. ICMC - USP - São Carlos 2009

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Complexidade de Algoritmos

Dicionários. TAD Orientado a conteúdo

Estruturas de Dados. Árvores. Onde Estamos? Introdução à estrutura de dados. Alocação dinâmica de memória. Pilhas. Filas.

Estruturas de Dados 2

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

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

Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins

Projeto e Análise de Algoritmos

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO

MC102 - Algoritmos e programação de computadores. Aula 16: Busca e Ordenação em vetores

Análise e Complexidade de Algoritmos

Métodos de Ordenação Parte 3

Árvores Binárias de Busca (ABB) 18/11

Tabelas Hash O Que é uma Tabela Hash? O Que é uma Tabela Hash? O Que é uma Tabela Hash? Inserindo um Novo Registro. O Que é uma Tabela Hash?

Árvores AVL e Árvores B. Jeane Melo

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

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

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Filas de Prioridade & Heaps

Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Árvores Binárias de Busca

Algoritmos de pesquisa

Análise de Algoritmos

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Pesquisa e Ordenação

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Transcrição:

Análise e Complexidade de Algoritmos Métodos de busca - seqüêncial - binária Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com Onde Estamos Ementa Revisão: Estrutura de dados;crescimento de funções; Indução matemática e métodos matemáticos. Medidas de complexidade, análise assintótica de limites de complexidades. Exemplos de análise de algoritmo iterativos e recursivos. Análise de desempenho de alguns algoritmos clássicos de busca e ordenação. Introdução aos principais paradigmas do projeto de algoritmos. Complexidade do Problema: Limites de Complexidade, Intratabilidade, Classes P, NP, problemas Np completos e NP-difíceis. 1

Introdução Uma operação fundamental nas tarefas computacionais é a BUSCA encontrar uma determinada informação em um grande conjunto de informações armazenadas key, search key em um dicionário: chave key palavras registro record significado da palavra Operações fundamentais que devemos analisar Inicialização da estrutura de dados Procura por registros que contenham a chave Inserção de novo registro Eliminação de registro União Join de dicionários Ordenação do dicionário Podemos ter duas situações chaves únicas Introdução um elemento aparece uma única vez na estrutura chaves duplicadas o mesmo elemento aparece várias vezes ou, eliminamos a duplicação e colocamos um apontador para o conjunto de registros iguais ou, trabalhamos com todos os registros, um de cada vez 2

Busca seqüêncial método mais simples de busca armazenamento simples: vetor ou lista procura por elemento em uma estrutura de dados, um a um, isto é: sequencialmente Pseudo-código Para cada item da lista Verifique se o elemento que você está procurando corresponde ao elemento atual Se for, retorne a posição que achou Senão, continue procurando até chegar no fim da lista Se chegou ao final da lista e não encontrou o elemento, ele não existe, então retorne -1 Busca sequencial em Java static int buscaelemento(int vet[ ], int elemento_a_procurar) int i; for(i=0;i<vet.length;i++) if (vet[i]==elemento_a_procurar) t return i; return -1; 3

Analisando o desempenho Melhor caso o item a ser procurado está na primeira posição O(1) Pior caso o item a ser procurado não está na lista, ou esta na última posição varre o vetor inteiro n/2 passos O(n) Caso médio procuro em metade dos elementos do vetor O(n/2) a-) Crie uma classe em java chamada BuscaSeq e implemente os seguintes métodos (utilize vetor): inicializacomnumerosrandomicos buscaelemento adicioneelemento removaelemento mostrarvetor Exercícios Qual a complexidade das operações? b-) E utilizando LISTA, como ficariam estas operações? A complexidade mudou? 4

c-) Quero implementar um novo método chamado invertevetor, como ficaria o código em Java. Qual a complexidade? Exercícios d-) Qual a complexidade do método que remove o primeiro elemento de um vetor nos seguintes casos: 1º caso somente preenchendo com NULO 2º caso fazendo um deslocamento de todos os elementos restantes 43 2 4 65 32 33 2 4 65 32 33 e-) Qual a complexidade de uma função que desloca o vetor para a direita ou para a esquerda 43 2 4 65 32 33 2 4 65 32 33 43 f-) Implemente os métodos dos exercícios d e e Busca binária Paradigma divisão-e-conquista dividir o número de registros em duas partes determinar em que parte o item a ser procurado deve estar concentrar a pesquisa nesta parte Restrição a lista de elementos deve estar ordenada Exemplo lista de telefones ordenados por número abro a lista no meio, se o telefone for menor, olho na primeira metade da lista se maior, olho na segunda metade 5

Procura em uma lista A de n elementos inteiros, pelo elemento e while not acabou and achou == false do begin compute meio of list if e == meio item then achou = true else if e < meio item procure metade abaixo else if e > meio item procure metade acima end Exemplo: Achando a letra S no vetor Busca binária static public int buscabinaria(int chave, int vet[]) int limiteinf = 0; int numerocomparacoes = 0; int limitesup = vet.length -1; int posicaoatual; while(true) numerocomparacoes++; posicaoatual = (limiteinf + limitesup ) / 2; if(vet[posicaoatual]==chave) System.out.println("Percorreu "+numerocomparacoes+" vezes"); return posicaoatual; else if(limiteinf > limitesup) System.out.println("Percorreu "+numerocomparacoes+" vezes"); return -1; else if(vet[posicaoatual] < chave) limiteinf = posicaoatual + 1; else limitesup = posicaoatual - 1; // fim else // fim while Busca binária em JAVA // fim buscabinaria 6

Eficiência Qual a eficiência do Algoritmo de busca binária? Para n = 8 posições, o pior caso é quando precisando chegar na posição 1 ou 8. A cada diiã divisão, desprezamos td toda a porção maior ou menor que a chave. com n comparações chegamos à posição 1 n/2 2 n/4 k n/2 k i 1 n/2 i = 1 => n = 2 i => i = log 2 n Busca complexidade logarítmica O(log 2 n) Inserção demorada Analisando o desempenho devemos manter o conjunto de dados ordenado elementos grandes, são inseridos na última posição. leva n passos. O(n) Eliminação os elementos devem ser movidos para completar o buraco vazio buscar(log 2 n) + remover(1) + preencher espaço vazio (n) = O(n) 7

Exercícios a-) Complete a tabela Algoritmo Busca seqüencial Busca binária Inserção em vetor desordenado Inserção em vetor ordenado Remoção em vetor desordenado Remoção em vetor ordenado Complexidade (notação O) b-) Você concorda com a frase Vetores ordenados são extremamente úteis quando as buscas são mais freqüentes que as operações de remoção e inserção., justifique. Exercícios c-) Que tipo de algortimo de busca você implementaria para cada caso abaixo, justifique: procura de uma letra em um vetor que contenha o alfabeto procura por um determinado número em um vetor 3,7,6,4,3,2,3,5,6,78,8,9,54,3,23 procura por um determinado número em um vetor 1,4,8,12,16,456,1024,5433,6546546 d-) Dos algortimos abaixo, qual a sua complexidade, e qual deles você implementaria em um projeto que exigisse máxima eficiência? busca sequencial busca binária com ordenação O(n) busca binária com ordenação O(log 2 n) busca binária com ordenação O(n 2 ) e-) Implemente o algortimo de busca binária em Java utilizando recursão. Sua complexidade mudou? 8

Exercício f-) Um cracker quer invadir um conta bancária, que não possui mecanismo de bloqueio, isto é, não trava após n tentativas erradas de digitação da senha. Se a senha tivesse apenas um algarismo númerico implemente o algoritmo qual a complexidade deste algoritmo? que tipo de busca é essa? é possível melhorar esta busca? como? Se esta senha consiste em 4 dígitos numéricos, implemente um algoritmo que ache esta senha diga quala complexidade deste algoritmo E se a senha fosse alfanúmerica? implemente um algoritmo que ache esta senha diga qual a complexidade deste algoritmo Se o computador leva 1ms para processar cada senha, quando demoraría para achar a senha ZZZZ Existe alguma maneira melhor de achar esta senha? 9