算法设计概率算法作业.docx

上传人:b****6 文档编号:9009225 上传时间:2023-02-02 格式:DOCX 页数:12 大小:369.09KB
下载 相关 举报
算法设计概率算法作业.docx_第1页
第1页 / 共12页
算法设计概率算法作业.docx_第2页
第2页 / 共12页
算法设计概率算法作业.docx_第3页
第3页 / 共12页
算法设计概率算法作业.docx_第4页
第4页 / 共12页
算法设计概率算法作业.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

算法设计概率算法作业.docx

《算法设计概率算法作业.docx》由会员分享,可在线阅读,更多相关《算法设计概率算法作业.docx(12页珍藏版)》请在冰豆网上搜索。

算法设计概率算法作业.docx

算法设计概率算法作业

算法设计——概率算法作业

一.概率算法

二.源代码——概率算法

三.近似算法

一.概率算法

Ex1.假设将y←uniform(0,1)改成y←x,那么上述的算法估量的值是什么?

答:

k/n表示飞镖进入某一个区域内的概率,返回的值为4k/n。

因为:

x←uniform(0,1),y←x,在x和y知足x2+y2≤1时k++

因此:

当x<=√2/2时k++。

k/n表示在总的n次中k自加的概率,那个概率就等价为x<=√2/2的概率。

而x在[0,1]之间→x<=√2/2的概率就为√2/2,即k/n=√2/2。

因此:

现在返回值4k/n=2√2。

 

Ex2.在机械上用

估量π值,给出不同的n值及精度。

原理:

f(x)=√(1-x^2),先利用概率算法求数字积分,以后将积分结果乘以4即为PI值。

输入:

实验要利用的取值在[0,1]范围内的总点数

执行结果截图:

 

Ex3.设a,b,c和d是实数,且a≤b,c≤d,f:

[a,b]→[c,d]是一个持续函数,写一概率算法计算积分:

注意,函数的参数是a,b,c,d,n和f,其中f用函数指针实现,请选一持续函数做实验,并给出实验结果。

算法利用的持续函数为:

f(x)=x+

输入:

横坐标的范围[4,8],纵坐标的范围[0,12](产生的点的纵坐标是[0,12],函数值域为[8,12])。

执行结果截图:

EX4.用上述算法,估量整数子集1~n的大小,并分析n对估量值的阻碍。

算法分析:

不断从X={1,2,3,……n}中有放回的随机抽样,直到第一次抽出重复元素为止,现在已经抽到的元素数量为K,那么集合X的大小为:

2K^2/PI。

算法的执行结果:

分析:

在理论被骗集合n越大时,估量集合大小的误差应该越小。

可是可能是由于随机函数性能的问题,实验结果是随着n的增大,误差却愈来愈大。

 

Ex5.分析dlogRH的工作原理,指出该算法相应的u和v

解:

算法第一利用函数u(a,b)将a随机化为c,以后利用确信性算法dlog(g,p,c)计算出随机化后的输入实例的计算结果y,最后利用函数v(y,r)将y恢复为以a为输入实例的计算结果。

Steps:

1.产生一个随机值b

2.u(a,b)=bamodp=c

3.dlog(g,p,c)=logg,p(c)=y

4.v(y,r)=(y-r)mod(p-1)=s

s即为dlog(g,p,a)的值。

原理说明:

因为logg,p(c)=logg,p(abmodp)=[logg,p(a)+logg,p(b)]mod(p-1)

y=[logg,p(a)+logg,p(g^rmodp)]mod(p-1)

y=[logg,p(a)+r)]mod(p-1)(0<=r<=p-2)

logg,p(a)为输入实例为a的确信性算法的结果(即s):

s=logg,p(a)=(y-r)mod(p-1),而(y-r)mod(p-1)即为函数v(y,r)。

利用u(a,b)=bamodp将a随机化为c,以后利用v(y,r)=(y-r)mod(p-1)能够将y恢复为s,因此v和u能够实现:

将输入实例a随机化为c以后,把以c为输入的确信性算法的结果恢复为以a为输入时确信性算法的结果。

 

Ex6.写一Sherwood算法C,与算法A,B,D比较,给出实验结果。

算法C:

由于算法B是一个确信性算法(在[1,√n]中找小于等于x的最大的y),因此将算法B修改成一个随机算法。

修改方式为:

将从确信的区间[1,√n]中找y,更改成在[1,n]中随机掏出√n个值,在这√n值中找y。

以后再利用确信性算法Search(x,y)查找x。

修改方式的正确性说明:

因为“假设将val[1..n]中的n个整数看做是均匀随机散布的,那么在val[1..L]中求y值就相当于:

在n个整数中,随机地取L个整数,求这L个整数中不大于x的最大整数y。

因此在数组val的子区间[1,√n]中寻觅一个y就等价于在整个[1,n]中先选出√n个值、再在这些值中找一y。

因此将算法B中的在[1,√n]中找y--->在[1,n]中随机掏出√n个整数,在这√n个整数中找y,是正确的。

 

算法设计:

在一个已知的静态链表(其中每一个表项的含义是{data,rank})array[NUM]={{5,1},{7,8},{3,4},{0,2},{4,0},{11,7},{17,9},{14,6},{9,5},{20,10},{21,12},{25,13},{23,11},{30,15},{34,-1},{31,14}}中,别离利用A、B、C、D算法查找11的位置。

算法的执行结果:

 

Ex7.证明:

当放置(k+1)th皇后时,假设有多个位置是开放的,那么算法QueensLV选中其中任一名置的概率相等。

证:

设k+1行皇后共找到M个open位置,那么最后放入Mth位置的p=1/M;最后放入(M-1)的p为:

在Mth不取到1&&在(M-1)th取到1,p=1/(M-1)*(1-1/M)=1/M;最后放入(M-2)的p为:

在Mth不取到1&&在(M-1)th不取到1&&在(M-2)th取到1,p=1/(M-2)*(1-1/(M-1))*(1-1/M)=1/M,依次类推,可知关于找到的M个open位置,k+1皇后最终放置于哪个位置的概率都相等,均为1/M。

 

Ex8.写一算法,求n=12~20时最优的StepVegas值。

算法的执行结果:

Ex9.PrintPrimes{

源代码——概率算法

1.在机械上用

估量π值,给出不同的n值及精度。

()

#include<>

#include<>

#include<>

#include<>

doubleestimatePI(intn)

{

intk=0,times=n;doublex,y,temp;srand((int)time(0));

do

{

x=*rand())/*RAND_MAX);

y=*rand())/*RAND_MAX);

3.if((x*x+y*y)<=1)

#include<>

#include<>

#include<>

#include<>

#definePI

/*验证算法(输入大小为Exact_N的集合,运行算法,得出估量值N,将Exact_N与N进行比较),而且探讨集合的大小n与算法的成效(即估量值)的关系。

*/

intrandom_i(intN);

intlookup(intval,int*array,intlen);

intestimateSet(intExact_N)

{

int*S;写一Sherwood算法C,与算法A,B,D比较,给出实验结果。

(Ex6.)

#include<>

#include<>

#include<>

#include<>

#defineNUM16

structSLinklist{

intdata;

intn_index;

};

structSLinklistarray[NUM]={{5,1},{7,8},{3,4},{0,2},{4,0},{11,7},{17,9},{14,6},{9,5},{20,10},{21,12},{25,13},{23,11},{30,15},{34,-1},{31,14}};0]~[15]

#defineval(i)(array[i].data)

#defineptr(i)(array[i].n_index)

inthead=3;

 

srand((unsigned)time(0));

do{

random_index=rand()%NUM;

}while(val(random_index)>x);

intj=1;

for(;j<=sqrt(NUM);j++){n",count);

returnpos;

}

n",count);

returnpos;

}

 

intj=1;

for(;j<=sqrt(NUM);j++){

if(val(j)>max&&val(j)<=x){

max=val(j);

i=j;

}

}

intcount;

intpos=Search(x,j,&count);

printf("B算法比较了%d次.\n",count);

returnpos;

}

intmain()

{

intx=11;

intpos=C(x);

printf("C:

x=11'spositionis%d.\n",pos);

intcountA;

pos=Search(x,head,&countA);

printf("A算法比较了%d次.\n",countA);

printf("A:

x=11'spositionis%d.\n",pos);

intcountD,posD;

posD=D(x);

printf("D:

x=11'spositionis%d.\n",posD);

intcountB,posB;

posB=B(x);

printf("B:

x=11'spositionis%d.\n",posB);

exit(0);

}

 

/*

C算法解析:

B算法是一个确信性算法,将其的输入改成随机的sqt(NUM)个,也确实是将B改造成了shrewood算法。

*/

5.写一算法,求n=12~20时最优的StepVegas值(Ex8.)

#include<>

#include<>

#include<>

#include<>

#defineSUCCESS1

#defineFAIL0

#defineEMPTY-65536

intfailNodeNum,sumNodeNum,N;

int*try,*array135,*array45,*arrayCol;

voidalloc_array(intn)

{

try=(int*)malloc(sizeof(int)*(n+1));

array135=(int*)malloc(sizeof(int)*(n+1));

array45=(int*)malloc(sizeof(int)*(n+1));

arrayCol=(int*)malloc(sizeof(int)*(n+1));

}

voidfree_array()

{

free(try);

free(array135);

free(array45);

free(arrayCol);

}

voidinit(int*array,intn){

inti=0;

for(;i<=n;i++){

array[i]=EMPTY;

}

}

voidinit_all(intn)

{

init(try,n);

init(array135,n);

init(array45,n);

init(arrayCol,n);

failNodeNum=0,sumNodeNum=0;

}

alloc_array(N);

best_sv=-1,best_rate=;

tmp_sv=1;

for(;tmp_sv<=N;tmp_sv++){

init_all(N);

Obstinate(tmp_sv,N);

tmp_rate=(double)sumNodeNum;

if(tmp_rate

best_sv=tmp_sv;

best_rate=tmp_rate;

}

}

printf("当N=%d时,stepVages=%d.\n",N,best_sv);

free_array();

}

exit(0);

}

6.PrintPrimes{)

#include<>

#include<>

#include<>

externintBtest(inta,intn);

externintMillRab(intn);

externintRepeatMillRab(intn,intk);

externintPrintPrimes(intn);

externintPrintPrimesTotal();

externintget_exponent(inta,intb,intp);

i_float)*t);

if(get_exponent(a,temp,n)==(n-1))return1;

}

}

return0;

}

 

;;

似算法

1.G中最大团的size为α当且仅当G^m里最大团的size是m*α

证:

G^m是由各个G间彼此连接而成的

各个G中的最大团也彼此连通了

最大团即最大连通子图,各个G中的最大连通子图彼此连接便形成了G^m的最大连通子图

G^m的最大团==m个G的最大团相连

当G的团size(极点数)为a时,G^m的最大团大小就应该为m*a

当G^m的最大团大小为m*a时,断开在形成G^m时m个G彼此相连的边,易知m个G中的最大团大小就应该为a,因为每一个G都是一样的。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1