为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

查找

2012-05-30 22页 ppt 340KB 28阅读

用户头像

is_634395

暂无简介

举报
查找nullnull2.对分查找021611222527334256778179举例:K=39K>33 low=mid+1K02 low=mid+1K>11 low=mid+1经过与关键字33, 16, 02, 11的比较,查找失败nulln=13的折半查找判定树71. .68. .133101. .24. .68. .911. .131581224691113nulltypedef struct { int key; datatype info; }rec; int binsearch(rec r[], int n, in...
查找
nullnull2.对分查找021611222527334256778179举例:K=39K>33 low=mid+1K<56 high=mid-139经过与关键字33, 56, 39的比较,查找成功K==39 查找成功nullK<16 high=mid-102161122252739334256778179举例,K=13K<33 high=mid-1K>02 low=mid+1K>11 low=mid+1经过与关键字33, 16, 02, 11的比较,查找失败nulln=13的折半查找判定树71. .68. .133101. .24. .68. .911. .131581224691113nulltypedef struct { int key; datatype info; }rec; int binsearch(rec r[], int n, int k) { int low,high,mid,found; low=1; high=n; found=0; while((low<=high)&&(found==0)) { mid=(low+high)/2; if(k>r[mid].key) low=mid+1; else if(k==r[mid].key) found=1; else high=mid-1; } 算法:if(found==1) return mid; else return 0; }null3.分块查找int blocksearch(rec r[], ref nd[], int b, int k, int n) { int i=1,j; while((k>nd[i].key)&&(i<=b)) i++; if(i>b) { cout<<“not found”; return 0; } j=nd[i].link; while((jdata) return 1; else if(kdata) { q=p; p=p->lchild; else{q=p; p=p->rchild;} } s=new JD; s->data=k; s->lchild=s->rchild=NULL; if(t==NULL) t=s; else if(kdata) q->lchild=s; else q->rchild=s; return 0; } null5.哈希查找(1)思想:在记录的存储地址和它的关键字之间建立一个确定的对应关系,这样,不经过比较, 一次存取就能得到所查元素。哈希函数:在记录的关键字与记录的存储地址之间 建立的一种对应关系。 哈希函数可写成:addr(ai)=H(ki),ai为一个记录,ki 为关键字。哈希查找:利用哈希函数进行查找的过程。null举例,一组关键字: S={ZHAO,QIAN,SUN,LI,CHEN,DIAO,MA,BAI,OU,NAN, TANG,JIN,XIAO,WU,GAO,YI } 哈希函数: 关键字的第一个字符 在字母中的位序-1 null哈希表的存储结构: 用一维数组HT[m]存放n个元素:n:表长 m:哈希表的容量(m>n), 哈希地址空间:0..m-1 =n/m < 1:装填系数,一般取为0.65~0.85装填系数反映了哈希表的装满程度,是影响哈希表查找性能的重要参数 。null哈希表需要解决的两个问: 1. 哈希函数H( )的构造: 2. 解决冲突问题: 冲突:H(Key1)==H(Key2), 且Key1Key2 不同的记录争夺同一个哈希地址; Key1与Key2称为同义词null(2)哈希函数的构造直接定址法 数字分析法 平方取中法 除留余数法 折叠法 随机数法一、直接定址法取关键字或关键字的某个线性函数值为哈希地址: H(key)= key 或 H(key)= a×key+b 举例:学生档案,地址空间: 000..999 H(k)=k-98015001 特点:一般不会发生冲突,但适用面比较窄一、直接定址法二、数字分析法二、数字分析法取关键字的若干位或其组合作哈希地址。 适用于关键字位数比哈希地址位数大的情况。 例:7个学生的学号为 5 4 2 4 2 2 2 4 1 5 4 2 8 1 3 6 7 8 5 4 2 2 2 8 1 7 1 5 4 2 3 8 9 6 7 1 5 4 2 5 4 1 5 7 7 5 4 2 8 8 5 3 7 6 5 4 2 1 9 3 5 5 2 哈希地址4 2 2 8 3 6 2 8 1 3 9 6 5 1 5 8 5 3 1 3 5三、平方取中法三、平方取中法取关键字平方后中间几位作哈希地址。 适用于关键字每一位上对某些数字的重复频率较高 四、除留余数法四、除留余数法对关键字取模作为哈希函数,即: H(key)=key mod p 除数p的选择不当将会导致很多同义词出现; p一般取小于或等于表长的最大质数。五、折叠法五、折叠法将关键字分为几段,除最后一段外,其余各段都等长, 将各段相加作为哈希地址, 相加的方法有两种: 移位叠加:各段向右靠齐相加。 边界叠加:将奇数字段或偶数字段倒排后相加。六、随机数法取关键字的随机函数值作为哈希地址,即 H(key)=random(key) 适用于关键字长度不等的情况。null(3)解决冲突的方法 两个不同的关键字得到相同的哈希地址称为“冲突”, 这两个关键字称为同义词,解决冲突就需要寻找别的 地址。①开放地址法②链地址法null①开放定址法 当冲突发生时,形成一个探查序列,沿此序列逐个地址探查,直到找到一个空位置,将发生冲突的记录放在该地址中。 探测序列: Hi=(H(key)+di) mod m i=1,2,...,k(k<=m-1) H(key)---hash函数值 di ---增量序列 m ---哈希表长null增量di的三种取法: (1)线性探测再散列 di=1,2,3,…,m-1 (2)二次探测再散列 di=12,-12,22,-22,…,k2,-k2 (k≤m/2) (3) 随机探测再散列 di=随机数序列,null②链地址法方法:将所有关键字为同义词的记录存储在一个单链表中,并用一维数组存放头指针。H(key)=key mod 13null哈希查找过程:给定k值计算H(k)此地址为空?关键字=k?按处理冲突的 方法计算HiNN查找失败查找成功YYnull
/
本文档为【查找】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索