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

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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
?问题描述? ? ?用两个数组来表示所给的含有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]?view plain?copy#includetime.h??//随机数类??const?unsigned?long?maxshort?=?65536L;??const?unsigned?long?multiplier?=?1194211693L;??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]?view plain?copy//随机化算法搜素有序表??#include?stdafx.h??#include?RandomNumber.h??#include?math.h??#include?iostream??using?namespace?std;????templateclass?Type??class?OrderedList??{??????friend?int?main();??????public:??????????OrderedList(Type?Small,Type?Large,int?MaxL);??????????~OrderedList();??????????bool?Search(Type?x,int?index);?????//搜索指定元素??????????int?SearchLast(void);???????????????//搜索最大元素??????????void?Insert(Type?k);???????

文档评论(0)

200300 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档