Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Classificação e Pesquisa Prof. Antonio Felicio Netto Pesquisa Binária 2 Estrutura de Dados - Uma estrutura de dados é um meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações. - Nenhuma estrutura de dados funciona bem para todos os propósitos. Assim, é importante conhecer os pontos fortes e as limitações de várias delas. - Estruturas de dados e algoritmos são temas fundamentais da ciência da computação, sendo utilizados nas mais diversas áreas do conhecimento e com os mais diferentes propósitos de aplicação. 3 Estrutura de Dados - Divisão - Homogêneas : vetores e matrizes - Heterogêneas: registros 4 Estrutura de Dados Homogêneas - São conjuntos de dados formados pelo mesmo tipo de dado primitivo; - Quando uma determinada Estrutura de Dados for composta de variáveis com o mesmo tipo primitivo, temos um conjunto homogêneo de dados; - As variáveis compostas homogêneas correspondem a posições de memória, identificadas por um mesmo nome, individualizadas por índices e cujo conteúdo é de mesmo tipo; - Exemplo : O conjunto de 10 notas dos alunos de uma disciplina pode constituir uma variável composta. A este conjunto associa- se o identificador NOTA que passará a identificar não uma única posição de memória, mas 10; 5 Estrutura de Dados Heterogêneas - Também conhecido como Registros; - Diferentemente das estruturas de dados homogêneas, os registros permitem guardar dados de tipos variados; - O registro permite que informações relacionadas mantenham-se juntas. A declaração de um registro define um tipo de dado, ou seja, informa ao computador o número de bytes que será necessário reservar para uma variável que venha a ser declarada como sendo desse tipo; - Exemplo : O conjunto de 10 alunos com seus dados de identificação (nome e RA) e a nota em uma disciplina pode constituir uma variável composta. A este conjunto associa-se um registro que passará a identificar a toda a estrutura alocada e não somente a um tipo primitivo; 6 Principais operações realizadas em Estruturas de Dados - BUSCA: Dado um valor X, procura na estrutura pelo valor fornecido e retorna sua posição, caso encontrado; - INSERÇÃO: Dado um novo elemento , insere-o na posição adequada; - REMOÇÃO: Dado um elemento X procura na estrutura pelo valor fornecido e o remove, sem que haja prejuízo à estrutura; - ALTERAÇÃO: Dado um elemento X e um novo valor Y procura na estrutura pelo valor X fornecido e, se encontrado, altera-o para o valor Y fornecido. 7 Lista Linear - Lista linear é a estrutura que permite representar um conjunto de dados afins de forma a preservar a relação de ordem linear de seus elementos. -Uma lista linear, ou tabela, é um conjunto de n >= 0 nós L[i], L[2], ..., L[n] tais que suas propriedades estruturais decorrem, unicamente, da posição relativa dos nós dentro da sequência linear; - Se n>0, L[1] é o primeiro nó Para 1 < k <= n, o nó L[k] é precedido por L[k-1]. - Exemplo: Pessoas esperando ônibus; Letras de uma palavra; Pilhas de provas; 8 Tipos de Armazenamento - O tipo de armazenamento de uma lista linear pode ser classificado de acordo com a posição relativa na memória de dois nós consecutivos da lista: 1.Alocação sequencial de memória; 2.Alocação encadeada ou dinâmica. - A escolha do tipo depende das operações que se desejam realizar. 9 Alocação Sequencial - A maneira mais simples de se manter uma lista linear na memória do computador é colocar seus nós em posições contíguas (VETORES); - Considere um vetor de registros onde cada registro possui campos que armazenam as características distintas dos elementos da lista; - Cada nó da lista possui, geralmente, um campo identificador distinto chamado chave. - Os nós podem ou não estarem ordenados pelo campo chave. 10 Alocação Sequencial 11 Alocação Dinâmica - A alocação dinâmica é o processo que aloca memória em tempo de execução. Ela é utilizada quando não se sabe ao certo quanto de memória será necessário para o armazenamento das informações, podendo ser determinadas em tempo de execução conforme a necessidade do programa; - Considere uma lista de registros de tamanho n onde cada registro possui campos que armazenam as características distintas dos elementos da lista; - A lista é constituída por nós ligados por meio de ponteiros; - Cada nó da lista possui, geralmente, um campo identificador distinto chamado chave. - Os nós podem ou não estarem ordenados pelo campo chave. 12 Alocação Dinâmica 13 Pesquisas de Dados - Na computação são inúmeras as situações em que é necessária a realização de busca por uma informação em alguma estrutura de dados; - A eficiência da busca vai depender exatamente da organização dos dados na estrutura em si; 14 Importância de pesquisar - A busca é necessária em situações como: Inserção de um novo dado: é necessária uma busca para verificar se o elemento a ser inserido já não existe na estrutura; Alteração de um dado: é necessário buscar o dado para que o mesmo sofra a atualização; Exclusão de um dado: o dado a ser excluído deve ser buscado para que possa deixar de fazer parte da estrutura, caso seja encontrado. 15 Importância do estudo dos algoritmos de busca - Como existem outras operações dependentes do resultado de uma pesquisa a sua efetivação, há uma dependência de seu tempo para a agilidade das rotinas; - Sem o estudos das técnicas de recuperação da informação não podemos evoluir a velocidade dos algoritmos necessitando diretamente da velocidade de processamento dos equipamentos (hardware). 16 Exemplo da importância - Lista telefônica: -Busca por um número a partir de um nome; - Busca por um número a partir da área de atuação (Páginas amarelas); - Busca de um nome a partir de um número ( tem como?) - Nesse caso, a ordenação dos dados é importante para a agilizar o processo de pesquisa; 17 Métodos clássicos de busca - Pesquisa de dados Linear (Sequencial); - Pesquisa de dados binária; 18 Pesquisa sequencial - Um problema comum na computação é determinar a posição de um elemento em um vetor, ou determinar que ele não está presente; - Quando se tem um vetor sem ordenação, é necessário o uso da busca linear, na qual todos os elementos são verificados, sequencialmente, até que se encontre o elemento procurado ou até que todo o vetor tenha sido percorrido; 19 Pesquisa sequencial: Graficamente 20 Pesquisa sequencial: Algoritmo 21 Análise da pesquisa sequencial - A busca linear leva, no pior caso, tempo proporcional ao tamanho n do vetor; C (n) = n - No melhor caso, leva tempo constante (podemos dar sorte e o elemento procurado ser o primeiro); C (n) = 1 - No caso médio dizemos então que a pesquisa será: C (n) = (n+1)/2 - E uma pesquisa sem sucesso será: C (n) = n+1 22 Análise da pesquisa sequencial - A busca linear também pode ser aplicada num vetor ordenado. Seu algoritmo, neste caso, sofre algumas alterações para que haja um pouco mais de eficiência, aproveitando-se da ordenação dos dados. - No caso do vetor ordenado, a busca linear pode ficar um pouco mais eficiente, pois a ordenação permite parar uma busca desnecessária. - Isso melhora o processamento, mas o algoritmo também tem complexidade O(N) 23 Análise da pesquisa sequencial 24 Pesquisa Binária - É possível buscar algo em um vetor sem verificar todos os elementos? Se o vetor estiver ordenado pelo campo de busca, sim. - Quando se tem elementos de algum domínio ordenável, pode- se realizar busca em tempo proporcional a log2N; - O algoritmo de busca binária requer que os elementosdo vetor estejam ordenados de forma crescente e não permite a existência de elementos duplicados no vetor; 25 Analogia com a pesquisa na Lista Telefônica - Ao invés de procurar linearmente página por página a partir da primeira, fazemos uma estimativa de onde o elemento procurado deve estar (de acordo com o nome da pessoa) e abrimos a lista naquela posição. - Se os nomes da página aberta estiverem após o nome procurado, descartamos as páginas localizadas após o nosso chute inicial e repetimos a busca no trecho entre a primeira página e o local da primeira estimativa. 26 Pesquisa Binária - Quando não se tem informação sobre os dados do vetor, uma boa estimativa é pegar o elemento do meio do vetor, V [N/2]. Se o elemento procurado, x, estiver antes de V [N/2], repetimos a busca somente no vetor V [0] . . . V [N/2]; - O número de vezes que conseguimos dividir algo por 2 até chegar em vetores de 1 elemento é log2N. Portanto, a busca binária leva tempo proporcional a log2N; - Dessa maneira, a busca binária começa sempre pelo “meio” do vetor, eliminando um grupo de elementos; 27 Pesquisa Binária: Graficamente 28 Pesquisa Binária: Algoritmo iterativo 29 Pesquisa Binária : procurando o valor 50 30 Pesquisa Binária: Algoritmo recursivo 31 Exemplo de pesquisa binária recursiva - Seja o vetor abaixo com N=20 elementos Deseja-se encontrar a posição do elemento 80. Na primeira chamada da função os valores são: X = 80 ; l = 0 e r = 19 32 Exemplo de pesquisa binária recursiva 33 Exemplo de pesquisa binária recursiva 34 Exemplo de pesquisa binária recursiva 35 Exemplo de pesquisa binária recursiva 36 Exemplo de pesquisa binária recursiva 37 Exercício 1 – Elabore um algoritmo que realize o cadastro de 20 números inteiros em um vetor; 2 – Elabore um algoritmo que realize o cadastro de 20 números inteiros distintos em um vetor; 3 – Elabore um algoritmo que permita a pesquisa de forma sequencial em um vetor de nome Vet, onde o seu tamanho é passado como parâmetro na função de pesquisa; 4 – Elabore um algoritmo que permita a pesquisa usando o método de pesquisa binária em um vetor de nome Vet, onde o seu tamanho é passado como parâmetro na função de pesquisa;
Compartilhar