随机化算法
随机化算法即随机生成因子,利用其随机生成数结合题目条件对所给数据进行校验。
需要保证前提:
1.有明确的正确数据以供校验
2.随机化的次数必须要足够多以保证所有数据得到验证以保障准确性
mt19937:
是 \(c++11\) 中加入的新特性,它是一种随机数算法,用法与 \(rand()\) 函数类似但是具有速度快,周期长的特点(它的名字便来自周期长度:\(2^{19937}-1\))。说的直白一点,我们都知道 \(rand()\)在\(windows\)下生成的数据范围为 \(0-32767\)。但是这个函数的随机范围大概在(\(−maxint,+maxint\))(\(maxint\) 为 \(int\) 类型最大值)。
用法:
#include<bits/stdc++.h>
using namespace std;
int main() {
mt19937 mt_rand(time(0));
cout << mt_rand() << endl;
return 0;
}
例题:2019 ICPC Asia-East Continent Final-H
1.蒙特卡洛方法(Monte-Carlo Simulation)
蒙特卡洛方法是一种以概率统计理论为指导的一类非常重要的数值计算方法。可以通过随机通过产生随机数的方式来解决计算问题。比如估算 \(\pi\) 和计算不规则图形的面积。
2.模拟退火
2018南京区域赛-D
可以用来求最小圆覆盖个最小球覆盖,二维费马点。
其他:
2018南京区域赛-K