0045算法笔记——【随机化算法】舍伍德随机化思想搜索有序表.docxVIP

0045算法笔记——【随机化算法】舍伍德随机化思想搜索有序表.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?问题描述?用两个数组来表示所给的含有n个元素的有序集S。用value[0:n]存储有序集中的元素,link[0:n]存储有序集中元素在数组value中位置的指针(实际上使用数组模拟链表)。link[0]指向有序集中的第一个元素,集value[link[0]]是集合中的最小元素。一般地,如果value[i]是所给有序集S中的第k个元素,则value[link[i]]是S中第k+1个元素。S中元素的有序性表现为,对于任意1=i=n有value[i]=value[link[i]]。对于集合S中的最大元素value[k]有,link[k]=0且value[0]是一个大数。 例:有序集S={1,2,3,5,8,13,21}的一种表现方式如图所示:?搜索思想?对于有序链表,可采用顺序搜索的方式在所给的有序集S中搜索值为x的元素。如果有序集S中含有n个元素,则在最坏的情况下,顺序搜索算法所需的计算时间为O(n)。利用数组下标的索引性质,可以设计一个随机化搜索算法,一改进算法的搜索时间复杂性。算法的基本思想是,随机抽取数组元素若干次,从较接近搜索元素x的位置开始做顺序搜索。如果随机搜索数组元素k次,则其后顺序搜索所需的平均比较次数为O(n/k+1)。因此,如果去k=|sqrt(n)|,则算法所需的平均计算时间为(Osqrt(n))。 随机化思想下的有序表实现具体代码如下:?1、RandomNumber.h[cpp]?/liufeng_king/article/details/view plain?/liufeng_king/article/details/copy#includetime.h?//随机数类?const?unsigned?long?maxshort?=?65536L;??const?unsigned?long?multiplier?=?11L;??const?unsigned?long?adder?=?12345L;???class?RandomNumber??{???private:???//当前种子??unsigned?long?randSeed;???public:???RandomNumber(unsigned?long?s?=?0);//构造函数,默认值0表示由系统自动产生种子??unsigned?short?Random(unsigned?long?n);//产生0:n-1之间的随机整数??double?fRandom(void);//产生[0,1)之间的随机实数?};???RandomNumber::RandomNumber(unsigned?long?s)//产生种子?{???if(s?==?0)???{???randSeed?=?time(0);//用系统时间产生种子??}???else??{???randSeed?=?s;//由用户提供种子??}??}???unsigned?short?RandomNumber::Random(unsigned?long?n)//产生0:n-1之间的随机整数?{???randSeed?=?multiplier?*?randSeed?+?adder;//线性同余式??return?(unsigned?short)((randSeed16)%n);??}???double?RandomNumber::fRandom(void)//产生[0,1)之间的随机实数?{???return?Random(maxshort)/double(maxshort);??}?? 2、7d3d2.cpp[cpp]?/liufeng_king/article/details/view

文档评论(0)

yanpan1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档