第4章搜索算法(免费阅读).ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 哈希查找算法实现 用线性探测再散列法处理冲突 实现 查找过程:同前 删除:只能作标记,不能真正删除 若移动元素,破坏哈希地址和关键字记录间的对应关系。 插入:遇到空位置或有删除标记的位置就可以插入 算法描述: 用外链表处理冲突算法 * int slbxxcr(int t[],int k) //散列表线性插入 { int i,j=0; i=h(k); while((jM)(t[(i+j)%M]!=k)(t[(i+j)%M]0)) j++; if(j==M) return(0); i=(i+j)%M; if(t[i]=0) { t[i]=k; return(1); } if(t[i]==k) return(1); } * #define M 100 int h(int k) { return(k%97);} int slbxxcz(int t[],int k) //散列表线性查找 { int i,j=0; i=h(k); while((jM)(t[(i+j)%M]!=k)(t[(i+j)%M]!=0)) j++; i=(i+j)%M; if(t[i]==k) return(i); else return(-1); } * 查找 * 查找——也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素 关键字——是数据元素中某个数据项的值,它可以标识一个数据元素 查找方法评价 查找速度 占用存储空间多少 算法本身复杂程度 平均查找长度ASL(Average Search Length):为确定记录在表中的位置,需和给定值进行比较的关键字的个数的期望值 基本概念: * 查找成功—在查找表中找到关键字值等于给定值的记录。 查找失败 对查找表常进行的操作: 查询某个“特定的”数据元素是否在查找表中 检索某个“特定的”数据元素的各种属性 在查找表中插入一个数据元素 从查找表中删除某个元素 静态查找表:对查找表只前两种“查找”操作 动态查找表:对查找表要进行后两种“查找”操作 * 一 顺序查找(线性查找) 查找过程:从表的一端开始逐个进行记录的关键字和给定值的比较 算法描述 i 例 0 1 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 92 找64 64 监视哨 i i i i 比较次数=5 比较次数: 查找第n个元素: 1 查找第n-1个元素:2 ………. 查找第1个元素: n 查找第i个元素: n+1-i 查找失败: n+1 * typedef int KeyType; typedef float ElemType; typedef struct { KeyType key; //记录的关键字 ElemType info; //记录的其他信息 }JD; int seqsrch(JD r[], int n, KeyType k) //设置监视哨的算法 { int i=n; r[0].key=k; while(r[i].key!=k) i--; return(i); } * int seqsrch(JD r[],int n,KeyType k) //未设置监视哨 { int i=0; while (in r[i].key!=k) i++; if (i=n) return(-1); else return(i); } * 顺序查找方法的ASL * 二 折半查找 查找过程:每次将待查记录所在区间缩小一半 适用条件: 顺序存储结构 查找表按关键字排序 算法实现 设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值 初始时,令low=1,high=n,mid=?(low+high)/2? 让k与mid指向的记录比较 若k==r[mid].key,查找成功 若kr[mid].key,则high=mid-1 若kr[mid].key,则low=mid+1 重复上述操作,直至lowhigh时,查找失败 * 算法描述 low high mid 例 1

文档评论(0)

zilaiye + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档