- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]数据结构与算法分析第八章查找
Chapter 8Search; 所谓搜索(查找 检索),就是在数据集合中寻找满足某种条件的数据对象
1.搜索成功 即找到满足条件的数据
对象, 作为结果, 可报告该对象在
结构中的位置, 还可给出该对象中
的具体信息
2.搜索不成功 或搜索失败。作为结
果, 应报告一些信息, 如失败标
志、位置等 ;通常称用于搜索的数据集合为搜索结构,它是由同一数据类型的对象(或记录)组成
在每个对象中有若干属性,其中有一个属性,其值可唯一地标识这个对象。称为关键码。使用基于关键码的搜索,搜索结果应是唯一的。但在实际应用时,搜索条件是多方面的,可以使用基于属性的搜索方法,但搜索结果可能不唯一;实施搜索时有两种不同的环境
静态环境 搜索结构在插入和删除等操作的前后不发生改变
? 静态搜索表 ;查找算法的评价指标
查找成功:最少比较次数
最多比较次数
平均比较次数
查找失败:最少比较次数
最多比较次数
平均比较次数; 以顺序表或线性链表表示静态查找表;ST.elem;ST.elem;int Search_Seq( TB ST, TYPE key )
{
ST.elem[0].key = key; // “哨兵”
for (i=ST.length; ST.elem[i].key!=key;
--i); // 从后往前找
return i; // 找不到时,i为0
};
分析顺序查找的
时间性能;查找算法的平均查找长度
(Average Search Length)
为确定记录在查找表中的位置,需
和给定值进行比较的关键字个数的期望
值;其中: n 为表长,Pi 为查找表中第i个记录的概率,且 , Ci为找到该记录时,曾和给定值比较过的关键字的个数;在等概率情形 pi = 1/n, i = 1, 2, ?, n ; 查找成功:最少比较次数 1
最多比较次数 n
平均比较次数 (n+1)/2
查找失败:最少比较次数 n+1
最多比较次数 n+1
平均比较次数 n+1; 上述顺序查找表的查找算法简单,但平均查找长度较大,特别不
适用于表长较大的查找表;基于有序顺序表的折半搜索;1.Element[mid].key==x 搜索成功
2.Element[mid].keyx 把搜索区间缩小到表的前半部分,继续折半搜索
3.Element[mid].keyx 把搜索区间缩小到表的后半部分,继续折半搜索
如果搜索区间已缩小到一个对象,仍未找到想要搜索的对象,则搜索失败;ST.elem;搜索成功的例子;搜索失败的例子;int Search_Bin(TB ST, TYPE key)
{ low = 1; high = ST.length;
while(low=high)
{ mid=(low+high)/2;
if(key==ST.elem[mid].key)return mid;
if(keyST.elem[mid].key)high=mid-1;
if(keyST.elem[mid].key)low=mid+1;
}
return 0;
};搜索成功时检测指针停留在树中某个结点
搜索不成功时检测指针停留在某个外结点(失败结点);有序顺序表的折半搜索的判定树
( 10, 20, 30, 40, 50, 60 );
先看一个具体的情况,假设:n=11; 查找成功:最少比较次数 ?
最多比较次数 ?
平均比较次数 ?
查找失败:最少比较次数 ?
最多比较次数 ?
平均比较次数 ?;假设 n=2h-1 并且查找概率相等
则
在n50时,可得近似结果 ;索引顺序查找; 分块查找
查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找
适用条件:分块有序表
算法实现
用数组存放待查记录,每个数据元素至少含有关键字域
建立索引表,每个索引表结点含有最大关键字域和指向本块第一个结点的指针;1 2 3
文档评论(0)