- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
概率计算
概率计算就是在算法中可采用随机选择计算的步骤、
元素或参数等。
它的基本特征是计算具有不确定性。
它的解也不一定是最优解。
它在很大程度上能降低算法的复杂度。
非标准算法中普遍应用概率方法,主要有:
(1)直接用概率进行数值计算;
(2)用概率/随机进行选择;
(3)利用概率加速搜索或避免陷于局部最优。
直接用概率进行数值计算
设f(x)是[0, 1]上的连续函数,
1
求I =∫ f(x)dx。
0
y = f(x)
假设向单位正方形内随机投入
n个点(x , y ) ,若有m个点落入
i i G
G中,则I≈m/n。
double Darts (int n) {double x, y; int k = 0;
static RandomNumber dart;
for (int i=1; i=n; i++) {x=dart.fRandom();
y=dart.fRandom(); if (y=f(x)) k++;}
return k/double(n); }
划分基准的随机选择
在快速排序算法中,若用拟中位数作为划分标准,
可保证在线性时间内完成。但是确定拟中位数要付
出额外开销。若选用第一个元素为划分基准,最坏
2
时的时间复杂性为O(n )。
若在算法中采用随机选择一个元素作为划分标准,
便可既保证算法的线性时间平均性能,又避免了计
算拟中位数的麻烦。
也可先对数组进行“洗牌”,然后再进行确定的排
序算法。这样依然可取得同样的效果。
“洗牌”后的快速排序
void Shuffle(Type a[], int n) { //随机洗牌算法
static RandomNumber md;
for (int i = 1; i n; i++) {
int j = md.Random(n – i + 1) + i;
Swap(a[i], a[j]); }}
Void QuiksortByShuffle(Type a[], int n) {
Shuffle(a, n); //将数组a洗牌
Quiksort(a, n); }
随机抽样
在n个元素的集合中随机抽取m(0m≤n)个
无重复的元素。为简单起见,假定所有元
素的值都位于1至n之间。
随机抽样
我们采用下面的方法进行选择:
1、首先将n个元素都标记为“未选择”;
2、重复下列步骤直到抽取了m个不同的元素
(1) 产生一个1至n间的随机数r ;
(2) 如果r标记为“未选择”,将它标记为
“已选择”,并加入到抽样中。
随机抽样
int RandomSampling(S[n], A[m], m) {
mark[1..n] = False; count=0;
while(count m) {
r = random(1, n);
if (mark[r] False) {
count++;
A[count]=S[r];
mark[r]=True; }}}
Las Vegas算法
Las Vegas算法的特点是随机性地进行决策。
例如对n后问题,Las Vegas算法是随机地产生一组王
后放置的位置。若成功了,便找到了一个解;若失
败了,就整个重来,再随机产生另外一组王后的位
置。这样作,直至找到解。
此算法能显著地改进算法的有效性,甚至对迄今为
止找不到有效算法的问题,也能得到满意的结果。
文档评论(0)