- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第 8 章 查找;人们在日常生活中经常需要查找某个人或某个单位的电话号码,要求实现一个简单的通讯录查询系统,根据用户输入的信息(例如姓名)进行快速查询。
计算机的出现使信息查询更加快捷、方便、准确。;8.1 知识学习——查找的基本概念 ;8.1 知识学习——查找的基本概念 ;8.1 知识学习——查找的基本概念 ;8.1 知识学习——查找的基本概念 ;8.1 知识学习;int SeqSearch(int r[], int n, int k)
{
int i=0;
while(inr[i]!=k)
i++;
if(in) return i;
else return -1;
};??本思想:设置“哨兵”。哨兵就是待查值,将它放在查找方向的尽头处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。 ;int SeqSearch2(int r[], int n, int k)
{
int i=0;
r[n]=k;
while(r[i]!=k)
i++;
if(in) return i;
else return -1;
} ;顺序查找的缺点:
平均查找长度较大,特别是当待查找集合中元素较多时,查找效率较低。
顺序查找的优点:
算法简单而且使用面广。
对表中记录的存储没有任何要求,顺序存储和链接存储均可;
对表中记录的有序性也没有要求,无论记录是否按关键码有序均可。;8.1.2 顺序表查找 ;例:查找值为23的过程;例:查找值为23的过程;int BiSearch(int r[ ], int n, int k)
{
int low=0,high=n-1,mid;
while(low=high)
{
mid=(low+high)/2;
if(r[mid]==k) return mid;
else if(r[mid]k) low=mid+1;
else high=mid-1;
}
return -1;
} ;int BiSearch2(int r[],int low,int high,int k)
{
int mid;
if(lowhigh)
return -1;
else
{
mid=(low+high)/2;
if(r[mid]==k)
return mid;
else
if(r[mid]k)
return BiSearch2(r,mid+1,high,k);
else
return BiSearch2(r,low,mid-1,k);
}
} ;折半查找的判定树;折半查找的判定树;;具有n个结点的折半查找判定树的深度为 ; 设有序顺序表中的元素依次为017, 094, 154, 170, 275, 503, 509, 512, 553, 612, 677, 765, 897, 908。试画出对其进行折半搜索时的二叉判定树, 并计算搜索成功的平均搜索长度和搜索不成功的平均搜索长度。 ; 设有序顺序表中的元素依次为017, 094, 154, 170, 275, 503, 509, 512, 553, 612, 677, 765, 897, 908。试画出对其进行折半搜索时的二叉判定树, 并计算搜索成功的平均搜索长度和搜索不成功的平均搜索长度。 ;8.1.2 顺序表查找 ;8.1.2 顺序表查找 ;8.1.2 顺序表查找 ;8.1.2 顺序表查找 ;8.1.2 顺序表查找 ;8.1.2 顺序表查找 ;分块查找的进一步讨论:
进一步地,再想一想翻阅字典时的情形。在利用词典边缘的字母索引来确定单词的起始查找位置时,我们一般不会严格按照折半查找的方式来确定,而是这样一个过程:如果所要查找的单词按照字母次序比已经翻开的页面上的字大很多,就多翻几页来看下一个页面;否则就往前多翻几页来查看。
可以把这种方法描述成这样的计算机算法:当知道关键字k位于kl和kh之间时,下一次探测的位置可以选在 (k-kl)/(kh-kl)这个点上。
这个算法在关键字以基本均匀的速度增加的情况下,可以比折半查找更快地接近要查找的位置。折半查找中的每一步把查找工作量从n降到n/2,该查找方法则可以把查找工作量从n降到 。;8.1.3 树表查找 ;二叉排序树 非二叉排序树; 设有一个输入数据的序列是 { 46, 25,
您可能关注的文档
- 数据分析方法及应用──基于SPSS和EXCEL环境 (2).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (3).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (4).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (5).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (6).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (7).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (8).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (9).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (13).ppt
- 数据分析方法及应用──基于SPSS和EXCEL环境 (14).ppt
文档评论(0)