Algoritmos de pesquisa ou de busca são algoritmos fundamentais em ciência da computação que se propõem a procurar um valor em uma estrutura de dados. O mais básico desses algoritmos é a pesquisa linear, na qual se faz a iteração sobre uma estrutura de dados, um valor por vez, e cada valor é comparado com o valor que estamos procurando. Esse método é aplicável a uma busca numa lista de valores que não esteja ordenada, segundo podemos ler em Manual de introdução aos algoritmos.
Na Figura 1, temos um array de números chamado arr. O objetivo do algoritmo é, através de uma função chamada procura, receber um número qualquer de entrada e procurar a posição desse número no array arr, fazendo a iteração por cada posição. Ao percorrer cada posição do array, o algoritmo faz a comparação num === arr[i], que compara o número de entrada da função com o valor da posição i do array. Se a expressão for verdadeira, é impressa a posição encontrada no array e o valor. Se, ao percorrer todo array, não for verificada a expressão como verdadeira para nenhuma posição, é impresso "Nao encontrado". Na Figura 2 são apresentadas as saídas da função procura.
Imagine que você trabalha em uma empresa que comercializa diferentes solventes orgânicos. Abaixo na Tabela 1 está a lista dos produtos comercializados com seus pontos de ebulição. Você recebe várias vezes ao dia contato de algum cliente que precisa fazer uma pré-seleção de solventes que possam ser utilizados em uma dada aplicação com uma temperatura específica. A cada nova demanda e nova temperatura, você precisa escolher manualmente a lista de solventes pré-selecionados para a aplicação e enviá-la para o cliente em questão.
Na seção seguinte, Química Programada propõe uma versão modificada do algoritmo de pesquisa linear para que essa busca de solventes com temperatura de ebulição acima da temperatura de aplicação de determinado cliente possa ser feita de forma programável.
| Solvente | Temperatura de ebulição (°C) |
|---|---|
| Acetona | 56,1 |
| Diisobutil cetona | 169,3 |
| Metanol | 64,5 |
| Tolueno | 110,5 |
| Xileno | 140,0 |
| Hexano | 68,7 |
| Nafta aromática C-9 | 165,9 |
| Aguarrás mineral | 148,0 |
| Butilglicol | 171,2 |
| Butildiglicol | 230,6 |
| Etilenoglicol | 197,6 |
| Dietilenoglicol | 245,8 |
| Acetato de n-butila | 126,1 |
| Acetato de etila | 77,2 |
| Acetato de isopentila | 142,0 |
| n-Butanol | 117,7 |
| Isopentanol | 131,4 |
| Isopropanol | 82,4 |
| n-Propanol | 97,2 |
| Metiletilcetona | 79,6 |
Para resolver o problema proposto na seção 2, Química Programada fez uma modificação no algoritmo de pesquisa linear tradicional apresentado na seção 1. O novo algoritmo terá que executar as seguintes tarefas : percorrer uma estrutura de dados do tipo dicionário na qual a chave seja o nome dos solventes e o valor seja a temperatura de ebulição; fazer a comparação do tipo " > (maior) " entre a temperatura de ebulição de cada solvente do dicionário e a temperatura da aplicação do cliente; gerar como saída não apenas o nome de um solvente, mas um array de strings com todos os solventes cuja temperatura de ebulição seja superior à temperatura requerida para a aplicação.
Na Figura 3 é apresentado o dicionário de todos os solventes e suas respectivas temperaturas de ebulição apresentados na Tabela 1. Nesse tipo de estrutura de dados, temos a chave, que é uma string com nome dos solventes comercializados pela empresa e o valor, que é um float que representa a temperatura de ebulição do solvente em graus Celsius.
Na Figura 4 é apresentado o algoritmo da pesquisa linear modificado. Para armazenar a lista de strings que representam os solventes pré-selecionados pela temperatura de ebulição, foi criado um array inicializado vazio chamado resultado. Depois foi feito um laço for(let chave in solventes) que percorre todas as posições do dicionário. Se a temperatura de ebulição de uma dada chave atende à condição if(solventes[chave] > valor), a chave desse solventes é armazenada no array resultado.
Na segunda parte do algoritmo é verificado se o comprimento do array resultado é igual a 0. Caso positivo, é impresso que nenhum solvente foi encontrado. Caso negativo, é impresso o array resultado com a lista dos solventes que podem ser pré-selecionados para a aplicação.
Na Figura 5 são apresentadas as saídas do algoritmo para as temperaturas de aplicação de 120, 170 e 200°C. Este algoritmo não substitui uma análise completa de compatibilidade, segurança ou toxicidade. Ele serve como ferramenta de pré-seleção apenas por critério de temperatura de ebulição, devendo sempre ser considerados critérios adicionais. É um exemplo simples de como automatizar decisões preliminares de engenharia de processo.
Desenvolvimento : Química Programada