随机算法第七组第二次小组作业随机算法起源可以追溯到20世纪40年代中叶
当时MonteCarlo在进行数值计算时,提出通过统计模拟或抽样得到问题的近似解,而且出现错误的概率随着实验次数的增多而显著地减少,即可以用时间来换取求解正确性的提高
什么是随机算法
设有一含有n个未知量的函数表达式f(x1,x2…
xn),要判断f在某一区域D中是否恒为0
通常做法:将f进行数学化简后在进行判断
如果f不可以进行数学化简呢
Ps:f不能化简在实际情况中是很可能出现的
举个例子如果我们随机地产生一个n维的坐标(r1,r2…
rn)属于D,代入f得f(r1,r2…
rn)≠0,则可断定在区域D内f≢0
如果f(r1,r2,„rn)=0,则有两种可能:1
在区域D内f≡02
在区域D内f≢0,得到上述结果只是巧合
于是就有了随机的思想如果我们对很多个随机产生的坐标进行测试,结果次次均为0,我们就可以断言f≢0的概率是非常之小的
在随机算法中不要求对同一输入算法每次执行时给出相同的结果
我们所关心的是算法在执行时,是否能够产生真正随机的结果
最后将这些随机结果进行分析,得出结论
因此我们可以这样做1)RandomSampling问题设给定n个元素(为简单起见,设为1,2……n),要求从n个数中随机地选取m个数(m≢n)
常规解法:用一个长为m的数组,来存放产生的随机数
产生一个数后,看其是否在数组中:若不在则将其加入,若已在则抛弃该数,再去产生下一个数
Soeasy
优化:建立一个长度为n的数组用下标i代表数字,b[i]中来标记是否被选过
Soeasy~~~这道题关键其实是在于如何随机的选出m个数
想到如何解决了吗
大家是否还记得上一次我们小组的小组作业
最后我们的组长有延伸这道题目
就是当发帖数目太大,大到无