- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构及应用算法第八章查找表
查找成功时平均查找长度: ASLsl(α)≈(1+1/(1-α))/2 ASLsr(α)≈-1/αln(1-α) ASLsc(α)≈1+α/2 查找不成功时平均查找长度 ASLul(α)≈(1+1/(1-α)2)/2 ASLsr(α)≈1/ (1-α) ASLsc(α)≈α+e-α C语言中编译程序使用的符号表,操作有 对给定的名字查是否已在表中。 填入新的名字。 对给定的名字访问其有关信息。 对给定名字更新和填写其信息。 删除一些无用的名字 例8.10 C语言32关键字的查找表希望ASL=2 以二次探测散列处理冲突,得α=0.795 因n=32 故m40 考虑m=4j+3 取m=43 ,p=41 hash(key)=[(key的第一个字符序号)×100+(key的最后一个字符序号)] mod 41 实际ASL=2.5 8.3.5哈希表的应用举例 中国科学技术大学 * ypb@ustc.edu.cn 第八章 查找表 8.1静态查找表 8.2动态查找表 8.3哈希表及其查找 查找表: 由同一类元素或记录构成的集合。对数据元素间的关系未作限定。 对查找表的操作有 查找某个“特定”的元素是否在表中。 查找某个“特点”的元素的各种属性。 在查找表中插入一个元素。 在查找表中删除一个元素 静态查找表、动态查找表 关键字 数据元素中的某个数据项值。可以表示一个数据元素,如可以唯一表示,则为主关键字(primary key)。 查找 根据给定的某个值,在查找表中确定一个关键字等于给定值的数据元素。若找到表示查找成功,返回该元素详细信息或在查找表中的位置;负责返回NULL 8.1静态查找表 8.1.1顺序查找 算法8.1 int Search_Seq(SSTable ST, KeyType kval) 设监视哨 例8.1 在顺序查找表中查找成功和失败 平均查找长度 查找过程中先后和给定值进行比较的关键字的个数的期望值 ASL=∑PiCi ∑Pi=1 i=1,2,。。。。。n Ci=n-i+1 Pi=1/n ASLss=1/n∑(n-i+1)=(n+1)/2 8.1.2折半查找 折半查找(binary Search):二分查找。 例8.2 利用二分查找在顺序有序表中查找。 算法8.2 Int Search_Bin(SStable ST,KeyType kval) ASLbs=(n+1)/nlog(n+1)-1 ASLbs=(20+21*2+…+2h-1*h)Pi=1/n∑1h2i-1*i 令i=t+1 ;S=∑1h2i-1*i=2∑1h2i-2*i=2∑0h-12t-1*(t+1) =2∑0h-12t-1 *t+ 2∑0h-12t-1 =2(∑1h2t-1 *t-2h-1 *h+20-1 *0)+ ∑0h-12t =2(S-2h-1 *h)+2h-1 S=2h *h-2h+1=(n+1)log2(n+1)-(n+1)+1==(n+1)log2(n+1)-n ASLbs=1/n*S=(n+1)/nlog2(n+1)-1 又称索引顺序查找 介于顺序查和折半查找之间。适合于关键字分块有序 typedef struct { KeyType key; int stadr; }indexItem; typedef struct{ indexItem *elem; int length; }indexTable; 算法8.3 Search_Idx(SSTable ST,indexTable ID, KeyT kval) 设索引长度b,顺序表长度为n,则: ASLidx=ASL(b)+ASL(n/b)≈log2(b+1)-1+(n/b+1)/2 8.1.3分块查找 8.2动态查找表 对动态查找表进行的操作有 InitDSTable(DT) DestroyDSTable(DT) SearchDSTable(DT,kval) InsertDSTable(DT,e) * DeleteDSTable(DT,kval) * TraverseDSTable(DT) 8.2.1二叉查找树 查找树、二叉查找树 通过合根结点的关键字进行比较可以将继续查找的范围缩小到某一颗子树中,具有该特性的树称查找树。二叉排序树又称二叉查找树。 例8.4二叉查找树的查询过程。 算法8.4 bool Search_BST(BiTree T,KeyType kval, BiTree p,BiTree f) 二叉查找树的插入算法 算法8.5 bool Insert_BST(BiTree T, ElemType e) 删除结点的处理方法 若是叶子结点,直接删除 只有一个孩子,则将其孩子
文档评论(0)