Algoritmo de pesquisa aleatória (Random Search) em Java: introdução, como funciona, exemplo

O algoritmo Random Search, também conhecido como pesquisa Monte Carlo, é um método de pesquisa baseado na aleatoriedade. Em vez de verificar sequencialmente cada elemento em uma matriz de dados, esse algoritmo seleciona aleatoriamente vários elementos para examinar. Essa abordagem economiza tempo e recursos em comparação com a pesquisa sequencial.

Como funciona

  1. Etapa 1: comece com a matriz de dados que deseja pesquisar.

  2. Etapa 2: selecione aleatoriamente um certo número de elementos para examinar.

  3. Passo 3: Verifique os elementos selecionados para ver se eles correspondem à condição de pesquisa.

  4. Passo 4: Se um elemento correspondente for encontrado, retorne o resultado; caso contrário, retorne à Etapa 2.

  5. Passo 5: Continue o processo até que uma correspondência seja encontrada ou o número máximo de tentativas seja atingido.

Vantagens e desvantagens

Vantagens:

  • Eficiente em recursos: economiza tempo e memória, especialmente para grandes matrizes de dados.
  • Aleatoriedade: Não é facilmente previsível, adequado para situações que exigem aleatoriedade.

Desvantagens:

  • Nenhuma garantia de sucesso: Não há garantia de que o algoritmo encontrará o resultado desejado.
  • Pode demorar muito: na pior das hipóteses, o algoritmo pode demorar mais do que a pesquisa sequencial.

Exemplo e explicação

Considere o seguinte exemplo de uso do algoritmo de pesquisa aleatória para encontrar um número inteiro em uma matriz:

import java.util.Random;  
  
public class RandomSearchExample {  
    static int randomSearch(int[] arr, int target) {  
        Random rand = new Random();  
        int maxAttempts = arr.length; // Maximum number of attempts  
        for(int i = 0; i < maxAttempts; i++) {  
            int randomIndex = rand.nextInt(arr.length); // Randomly select an index  
            if(arr[randomIndex] == target) {  
                return randomIndex; // Return the index if found  
            }  
        }  
        return -1; // Return -1 if not found  
    }  
  
    public static void main(String[] args) {  
        int[] numbers = {1, 5, 9, 3, 7};  
        int target = 3;  
        int result = randomSearch(numbers, target);  
        if(result != -1) {  
            System.out.println("Number " + target + " found at index " + result);  
        } else {  
            System.out.println("Number " + target + " not found in the array.");  
        }  
    }  
}  

Neste exemplo, usamos o algoritmo de pesquisa aleatória para encontrar um número inteiro em um array. Iteramos pelo array, selecionamos aleatoriamente um índice e verificamos se o elemento nesse índice corresponde ao número de destino. Se encontrado, retornamos o índice; caso contrário, continuamos até atingir o número máximo de tentativas.