Boost의 가중 난수
Boost 라이브러리는 광범위한 난수 생성 기능을 제공합니다. 간단한 난수 생성 기능을 제공하지만 가중치 난수에 대한 기본 지원은 부족합니다. 이 기사에서는 원시 Boost 함수를 사용하여 가중치 난수 선택을 구현하는 기술을 살펴봅니다.
가중 난수화 알고리즘
가중 난수를 생성하려면 다음 알고리즘을 사용할 수 있습니다.
Boost에 적용
이 알고리즘은 다음과 같이 Boost에 적용할 수 있습니다.
using namespace boost; int weightedRandom(const std::vector<int>& weights) { // Calculate the sum of weights int sum = accumulate(weights.begin(), weights.end(), 0); // Generate a random number between 0 and the sum variate_generator<mt19937, uniform_int_distribution<int>> rand(generator()); int rnd = rand(sum); // Traverse weights and subtract until random number becomes negative for (size_t i = 0; i < weights.size(); ++i) { if (rnd - weights[i] < 0) { return i; } rnd -= weights[i]; } // Should never reach here assert(false); }
변하지 않는 최적화 가중치
가중치가 거의 변경되지 않고 목록이 상당히 긴 경우 누적 가중치 합계를 미리 계산하고 이진 검색을 사용하여 최적화할 수 있습니다.
알 수 없는 목록 크기에 대한 저장소 샘플링
크기를 알 수 없는 목록의 경우 가중치를 적용한 저장소 샘플링을 사용할 수 있습니다.
결론
Boost에는 전용 가중치 난수 기능이 없지만 제시된 기술을 사용하면 원시 Boost 기능을 사용하여 효율적이고 정확한 생성이 가능합니다.
위 내용은 Boost 라이브러리를 사용하여 가중치 난수를 어떻게 생성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!