- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第五章查找讲解
查找是为了得到某个信息而进行的工作,也称检索;基本概念;查找表;平均查找长度;5-1 线性表查找;typedef struct
{ ElemType *data;
int length;
}SeqTable;
;顺序查找;typedef int KeyType;
typedef struct {
KeyType key;
DataType other;
} ElemType;
typedef struct{
ElemType *elem;
int length;
} SeqTable; ;顺序查找算法;若找到的是第一个元素data[1],则比较次数c1=n;若找到的是第i个元素data[i],则比较次数ci=n-i+1;在不考虑检索失败的情况下,顺序检索的平均检索长度为
ASL =1*pn+2*pn-1+…+n*p1
=(1+2+…+n)/n (pi=1/n)
=(n+1)/2
T(n)=O(n) ;有序表的查找;7;status BinSearch(SeqTable t,KeyType kx)
{ int low ,high,mid;
int flag;
low=0; high=t-length-1;
while(low=high)
{mid=(low+high)/2;
if(kxt-elem[mid])
high=mid-1;
else if(kxt-elem[mid])
low=mid+1;
else { flag=mid;
break;
}
}
return flag;
};若表中元素个数n为:有
;插值查找;斐波纳契查找(黄金分割法);;索引表的整个表分成三个子表,对每个子表建立一个索引项,其中包括两项内容:关键字项(其值为该子表内的最大关键字)和指针项(指示该子表的第一个记录在表中的位置)。索引表按关键字有序,表或者有序或者分块有序。分块有序指的是后一个子表中所有记录的关键字均大于前一个子表中的最大关键字。;5-2 哈希表查找;哈希表与哈希方法:选取某个函数,依该函数按关键码计算元素的存储位置,并按此存放;查找时,由同一个函数对给定值kx计算地址,将kx与地址单元中元素关键码进行比较,确定查找是否成功。;负载因子: ;常用的哈希函数;2.除余法;3.乘余取整法;5.数字分析法
数字分析法是关键码位数比存储区的地址码的位数多,这时可以对关键码的各位进行分析,丢掉分布不均匀的位留下均匀位作为地址。;6.折叠法
折叠法是将关键码分割成倍数相等的几部分,最后一部分的倍数可以短点,将这几部分叠加求和,取后几位为哈希地址。;例如,关键码为key=582422241,要求转换为4位的地址码。
58 | 2422 | 241 移位折叠相加 移位相加
8 5 5 8
1 4 2 2 4 1
2 4 2 2 2 4 2 2
1 1 0 6 4 2 7 2 1
h1(key)=1064 h2(key)=2721;处理冲突的方法;di=1,2,3,…,m-1,di=i称线性探查序列;;②二次探测法;③双哈希函数探测法;2.拉链法;K={18, 73,10,05,68,99,27,41,51, 32, 25},;结点类型:;#define m …
int CreateHashT(OpenHash l_t; DataType *eptr)
{ int I;
int d,finished;
for(i=0;im;i++)
l_t[i]=NULL;
for(;eptr-key!=0;eptr++)
{ d=Hash(eptr-key);
文档评论(0)