《算法与程序实践2》习题解答-查找.docxVIP

《算法与程序实践2》习题解答-查找.docx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共19页,可阅读全部内容。
  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文档。上传文档
查看更多

《算法与程序实践》习题解答9——查找算法

查找的定义

根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录或数据元素。基本的查找算法包括顺序查找和折半查找两种。

关键字的概念

关键字是数据元素(或记录)中某个数据项的值,可以标识一个记录,若能唯一标识,则称为主关键字,否则称为次关键字。

查找的结果

若查到其关键字等于给定值的记录,则称“查找成功”,否则称“查找失败”。

查找算法效率的度量

平均查找长度ASL:在查找其关键字等于给定值的过程中,需要和给定值进行比较的关键字个数的期望值称为查找成功时的平均查找长度。

其中,n是结点的个数;是查找第i个结点的概率,是找到第i个结点所需要的比较次数。

顺序查找基本思想

从线性表的一端开始,依次将每个元素的关键字同给定值K进行比较,若某元素关键字与K相等,则查找成功;若所有元素都比较完毕,仍找不到关键字为K的元素,则查找失败。

顺序查找示例

12

12

21

30

35

38

40

48

55

56

60

64

1234567891011

查找55

顺序查找算法实现

intOrder_Search(intarray[],intn,intkey)

{

inti;

array[n]=key;

/*for循环后面的分号必不可少*/

for(i=0;key!=array[i];i++);

return(in?i:-1);

}

折半查找

折半查找法也称为二分查找法,它充分利用了元素间的次序关系(要求数据集合有序),二分法是分治算法的一种特例。分治算法的基本思想是将一个规模为N(比较大)的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。

在分治算法中,若将原问题分解成两个较小的子问题,我们称之为二分法。由于二分法划分简单,所以使用非常广泛。其中最经典的应用就是二分法检索。

折半查找的先决条件

表中结点按关键字有序,且顺序(一维数组)存储。

折半查找思想

(1)求有序表的中间位置mid

(2)若r[mid].key==k,查找成功;

若r[mid].keyk,在左子表中继续进行二分查找;

若r[mid].keyk,则在右子表中继续进行二分查找。

折半查找示例

1221303538

12

21

30

35

38

40

48

55

56

60

64

1234567891011

i=1, j=11, m=(i+j)/2=6. kr[m]:在左半部分继续查找。

i=1, j=m-1=5, m=(i+j)/2=3. kr[m]:在右半部分继续查找。

i=m+1=4, j=5, m=(i+j)/2=4. r[m]==k:查找成功。

(2)k=54

i=1, j=11, m=(i+j)/2=6。 r[m]k:在右半部分继续查找。

i=m+1=7,j=11, m=(i+j)/2=9。 r[m]k:在左半部分继续查找。

i=7, j=m-1=8, m=(i+j)/2=7。 r[m]k:在右半部分继续查找。

i=m+1=8,j=8, m=(i+j)/2=8。 r[m]k:在左半部分继续查找。

i=8, j=m-1=7, ij:查找失败。

CS98:字符串计数

(来源:ACM程序设计竞赛基础教程(俞经善等)P12)

问题描述:

给出m个字符串,要求输出重复n次的字符串有几个。

输入:

先给定一个N,N≤100000,接着输入N个字符串。

输出:

对于每组测试数据,输出若干行,每行两个正整数,第一个数表示重复的次数,第二个数表示在此重复次数下有几种不同的字符串。

样例输入:

5

BBA

BBA

BEA

DEC

CCF

样例输出:

CASE1:

1 3

2 1

解题分析:

对着N个字符串进行排序,然后依次统计即可,主要是考查对qsort函数的使用。Qsort的基本用法是qsort(que,n,sizeof(que[0],cmp)),que表示的是需要排序的序列的首地址,n表示序列中的元素,sizeof求的是该序列中单个元素所占的空间大小,cmp是排序过程中用到的比较函数,可以根据对cmp函数的不同写法,来规定排序的结果是递增或者递减。

通常写法:

intcmp(constvoid*a,constvoid*b){ //从小到大排序

abc*f1=(abc*)a;

abc*f2=(abc*)b;

r

文档评论(0)

浙江工程信息通 + 关注
实名认证
服务提供商

网络工程师持证人

本人已从事浙江省工程咨询5年,对浙江省内工程信息非常熟悉,可获取新建工程相关联系人、设计院、业主等关键信息。另外从事楼宇自控专业已10年,考取了一建二建等资格证书,有关考试方面的问题(考试心得、方法、学习资料等)都欢饮来咨询交流。

领域认证该用户于2023年05月11日上传了网络工程师

1亿VIP精品文档

相关文档