Algoritma Carian Rawak (Random Search) dalam C++- Penjelasan, Contoh dan Kod

Algoritma Carian Rawak ialah kaedah carian berdasarkan pemilihan secara rawak satu set penyelesaian daripada ruang carian dan menyemak sama ada ia boleh menyelesaikan masalah. Pendekatan ini sering digunakan apabila tiada maklumat atau strategi khusus untuk memandu carian.

Bagaimana ia berfungsi

  1. Permulaan: Mulakan dengan set penyelesaian awal yang dijana secara rawak.
  2. Penilaian: Menilai kualiti setiap penyelesaian berdasarkan fungsi objektif atau kriteria penilaian.
  3. Pemilihan: Pilih subset penyelesaian terbaik daripada set berdasarkan kebarangkalian atau pemilihan rawak.
  4. Pengujian: Uji sama ada penyelesaian yang dipilih mampu menyelesaikan masalah.
  5. Ulang: Ulangi melalui langkah 2 hingga 4 sehingga hasil yang memuaskan dicapai atau bilangan lelaran yang telah ditetapkan dicapai.

Contoh: Mengoptimumkan Fibonacci Fungsi

Pertimbangkan masalah pengoptimuman fungsi Fibonacci F(x) = F(x-1) + F(x-2) dengan F(0) = 0, F(1) = 1. Kami ingin mencari nilai x yang mana F(x) dimaksimumkan. Kaedah Carian Rawak boleh memilih nilai x secara rawak, mengira Fibonacci nilai pada setiap x, dan memilih nilai x sepadan dengan Fibonacci nilai tertinggi yang diperolehi.

Contoh Kod dalam C++

#include <iostream>  
#include <cstdlib>  
#include <ctime>  
  
int fibonacci(int n) {  
    if(n <= 0) return 0;  
    if(n == 1) return 1;  
    return fibonacci(n- 1) + fibonacci(n- 2);  
}  
  
int randomSearchFibonacci(int maxIterations) {  
    int bestX = 0;  
    int bestValue = 0;  
  
    srand(time(0));  
  
    for(int i = 0; i < maxIterations; ++i) {  
        int x = rand() % maxIterations;  
        int value = fibonacci(x);  
        if(value > bestValue) {  
            bestValue = value;  
            bestX = x;  
        }  
    }  
  
    return bestX;  
}  
  
int main() {  
    int maxIterations = 20;  
    int result = randomSearchFibonacci(maxIterations);  
  
    std::cout << "Optimal x for maximum Fibonacci value: " << result << std::endl;  
  
    return 0;  
}  

Dalam contoh ini, kami menggunakan kaedah Carian Rawak untuk mengoptimumkan Fibonacci fungsi. Kami memilih nilai x secara rawak, mengira Fibonacci nilai pada setiap x, dan kemudian memilih nilai x sepadan dengan Fibonacci nilai tertinggi yang telah kami kira.