domingo, 26 de agosto de 2012

[Programação] Métodos de Pesquisa

Olá pessoal, hoje iremos abordar sobre os métodos de pesquisa existentes para algoritmos para que se possa realizar pesquisa em objetos salvos na memória, sendo desde arrays até listas mais complexas. O objetivo desses métodos é facilitar a pesquisa entre esses dados não havendo necessidades de monta-los novamente na memória, gastando assim menos armazenamento na memória ao executar diversas tarefas de pesquisa.
O principio dos métodos se baseia na existência de um conjunto de dados e a partir de um valor enviado pelo usuário, utilizados os métodos nesse conjunto de dados, acessando a informação se ela existir. Existem dois métodos de pesquisa e são esses a Pesquisa Sequencial e a Pesquisa Binária. Vamos abortar o principio e a execução de cada um.

Pesquisa Sequencial - Considerado o método mais simples. Consiste em receber um valor a ser pesquisado e ir percorrendo dado por dado do conjunto de dados até descobrir um valor igual, ou caso não seja encontrado o valor, retornar informando que o valor não existe. É um método simples porém "caro" pois se o conjunto de dados é extenso é necessário que se percorra toda a lista de dados até encontrar o valor, o que irá gastar muito processamento. Veremos abaixo o código em funcionamento:

// Função de pesquisa sequencial que recebe o conjunto de dados, e a chave de pesquisa
// Em nosso exemplo recebemos um vetor de inteiros e a chave inteira para comparar os números
public int PesquisaSequencial (int[] vetor_inteiro, int chave)
{
     for (int i = 0; i < vetor_inteiro.Length; i++)
     {
          // Se encontrar o valor, retorna o índice do valor no vetor 
          if (vetor_inteiro[i] == chave)
               return i;
     }
   
     // Se percorreu todo conjunto e não encontrou dado, retorna erro -1
     return -1;
}

A aplicação da Pesquisa Sequencial pode ser utilizada com diversas utilidades, para o exemplo utilizado utilizamos busca de inteiro, entretanto podem ser pesquisados vários tipos em vários conjuntos de dados diferentes. Aplicável conforme necessidade.

Pesquisa Binária - Sendo um método mais otimizado que o anterior, o processo de execução na teoria é bem simples, entretanto como pré-requisito para essa pesquisa é necessário que o conjunto de dados já esteja previamente ordenado. Pois o método consiste em dividir o conjunto em duas partes comparar o valor chave ao elemento central, se for maior ignora a primeira metade, e continua seguindo a divisão na segunda metade, caso o contrário, faz o oposto. Em termos de processadores, o gasto é bem menor que a Pesquisa Sequencial, entretanto quanto maior o conjunto de dados mais tempo será gasto. Veremos o funcionamento desse método abaixo:


// Função de pesquisa binária que recebe o conjunto de dados, e a chave de pesquisa
// Em nosso exemplo recebemos um vetor de inteiros e a chave inteira para comparar os números
public int PesquisaSequencial (int[] vetor_inteiro, int chave)
{
     // Declaração de variáveis
     int meio, primeiro = 0, ultimo = (vetor_inteiro - 1), encontrado = 0;

     while (primeiro <= ultimo && !encontrado)
     {
          // Define o meio do conjunto de dados
          meio = (ultimo + primeiro) / 2;

          // Busca o valor de metade em metade
          if (chave == vetor_inteiro[meio])
                encontrado = 1;
          else
               if (chave > vetor_inteiro[meio])
                    // Busca na metade final
                    primeiro = meio + 1;
               else

                    // Busca na metade inicial
                    ultimo = meio - 1;

     }
   
     // Se encontrar o valor, retorna o índice do valor no vetor 
     if (encontrado)
          return meio;
     else
          return -1;
}

   
A aplicação da Pesquisa Binária pode ser utilizada com diversas utilidades, para o exemplo utilizado utilizamos busca de inteiro, entretanto podem ser pesquisados vários tipos em vários conjuntos de dados diferentes. Aplicável conforme necessidade.

Agora vimos os dois métodos de pesquisa, façam os teste e vejam como eles se comportam ;) Em breve postarei um projeto completo implementando esses métodos e acompanhando na prática. Agradeço vocês e voltem em breve ( hehehehe )


Um comentário:

  1. Muito bom, está de parabéns pelo trabalho. Continue ajudando. Té mais.

    ResponderExcluir