网站大量收购独家精品文档,联系QQ:2885784924

舍伍德(Sherwood)算法学习笔记.pdfVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

舍伍德(Sherwood)算法学习笔记

⼀.概念引⼊

设A是⼀个确定性算法,当它的输⼊实例x时所需的计算时间记tA(x)。设Xn

是算法A的输⼊规模n的实例的全体,则当问题的输⼊规模n时,算法A所需的平均

时间为。这显然不能排除存在x∈Xn使得的可能性。希望获得⼀个随机化算法B,使得

对问题的输⼊规模n的每⼀个实例均有。这就是舍伍德算法设计的基本思想。当s(n)

与tA(n)相⽐可忽略时,舍伍德算法可获得很好的平均性能。

概率算法的⼀个特点是对同⼀实例多次运⽤同⼀概率算法结果可能同。舍伍德算

法(O(sqrt(n)),综合了线性表和线性链表的优点)总能求的问题的⼀个正确解,当⼀个

确定性算法在最坏情况和平均情况下差别较⼤时可在这个确定性算法中引⼊随机性将

之改造成⼀个舍伍德算法;引⼊随机性不是为了消除最坏,⽽是为了减少最坏和特定

实例的关联性。⽐如线性表a的查找若是找10(独⼀⽆⼆),如果在a[0]则O(1),若是最

后⼀个则O(n),可见时间与输⼊实例有关,此时可引⼊随机性将之改造成⼀个舍伍德

算法。

有时候⽆法直接把确定性算法改造为舍伍德算法,这时候对输⼊洗牌。

下⾯是洗牌算法源代码:

importjava.util.Random;

publicclassShuffle{

publicstaticvoimain(String[]args){

inta[]=newint[]{1,2,4,5,8};

/*

*Collections.shuffle(list)参数只能是list

*/

myShuffle(a);

for(inti:a){

//犯了个低级错误,输出了a[i],结果数组下标越界异常

System.out.print(i+);

}

System.out.println();

}

privatestaticvoimyShuffle(int[]a){

intlen=a.length;

for(inti=0;ilen;i++){

Randomr=newRandom();

//直接Random.nextInt(len)提⽰静态⽅法⾥⽆法引⽤

intj=r.nextInt(len);

//Collections.swap(list,i,j)必须是list类型

if(i!=j){//原来没加这个条件

inttemp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

}

}

⼆.舍伍德思想解决迅雷2010年校招--发牌

问题描述:52张扑克牌分发给4⼈,每⼈13张,要求保证随机性。已有随机整数

⽣成函数rand(),但开销较⼤。请编写函数实现voiddeal(inta[],intb[],intc[],intd[]),

扑克牌⽤序号0-51表⽰,分别存在⼤⼩13的a,b,c,四个数组中,要求尽可能⾼

效。

importjava.util.Random;

publicclassPoker{

/*

*这道题确实不怎么明⽩,直接初始化后洗牌算法不得了

*不过解答只是替换nextInt,直接线性同余了,交换次数也减少了

*交换次数是随机产⽣的

*/

//为⽅便swap和deal函数使⽤

staticintarray[]=newint[52];

publicstaticvoidmain(String[]args){

文档评论(0)

132****6651 + 关注
实名认证
文档贡献者

初中毕业生

1亿VIP精品文档

相关文档