利用随机化算法对顺序表进行搜索.docVIP

  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文档。上传文档
查看更多
利用随机化算法对顺序表进行搜索

随机化算法 实验要求 1. 理解计算机随机数的产生; 1. 理解随机化算法原理及一般应用; 2. 编程实现典型随机算法,理解算法思想,并对算法进行验证分析。 实验内容 利用随机化算法对顺序表进行搜索: ? 随机抽取有序表元素; ? 从最接近待查元素开始搜索。 实验结果 定义一个60000个元素的数组,元素值依次为2,4,6…120000。 随机抽取300次,根据抽取的元素就近查找某数是否存在。 输入元素为待查找整数,结果为元素下标位置(从0开始)。 示例输入: 1999 示例输出: -1 示例输入: 6 示例输出: 2 源代码:: //科目:算法实验 //题目:利用随机化算法对顺序表进行搜索: // 随机抽取有序表元素; // 从最接近待查元素开始搜索。 //作者:武叶 //语言:C语言 //创作时间:2012年5月6日 #includestdio.h #includemath.h #define M 60000 long m[60000]; long n[60000]; int suiji[300]; int search(int result) { int address,address1,address2,min,j,k,temp; int locate=-1; int b=245; int c = 23; n[0]=m[0]; suiji[0]=0; for(k=0;k299;k++) { suiji[k+1] = (suiji[k] * b + c)%M; } //对suiji[300]数组的随机值进行冒泡排序 for(k=0;k=299;k++) { for (j=0;j300-k;j++) if (suiji[j]suiji[j+1]) { temp=suiji[j]; suiji[j]=suiji[j+1]; suiji[j+1]=temp; } } //根据suiji数组的值将相应的x数组中的值存在y数组中 for(k=0;k300;k++) { j=suiji[k]; n[j]=m[j]; } min=(int)fabs(n[0]-result); //求result与抽取数组中的元素之差的绝对值 address=0; for(k=0;kj;k++) //根据抽取的元素就近查找某数是否存在 { if((int)fabs(n[k]-result)min) { min=(int)fabs(n[k]-result); address=k; } } //判断元素在x数组中的位置 if(min==0) { return address; } else { address1=address-min/2;//元素可能出现下标位置范围 address2=address+min/2; for(k=address1;k=address2;k++) { if(result==m[k])//查找下标 { locate=k; break; } } return locate; } } int main() { int i, search_num,location; //location为查找元素的位置 search_num为要查找的数 for(i=0;i60000;i++) m[i]=(i+1)*2; //定义m[i]为2,4,6…120000。 scanf(%d,search_num); if(search_num0||search_num120000||search_num%2==1) { printf(-1\n); } else { location=search(search_num); printf(%d\n,location); } return 0; } 答销网真情提供:::: 文章出处:::::: /forum.php?mod=viewthr

文档评论(0)

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

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

1亿VIP精品文档

相关文档