数据结构与算法分析第八章查找_第1页
数据结构与算法分析第八章查找_第2页
数据结构与算法分析第八章查找_第3页
数据结构与算法分析第八章查找_第4页
数据结构与算法分析第八章查找_第5页
已阅读5页,还剩146页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构与算法分析第八章查找第1页,课件共151页,创作于2023年2月所谓搜索(查找检索),就是在数据集合中寻找满足某种条件的数据对象

1.搜索成功即找到满足条件的数据对象,作为结果,可报告该对象在结构中的位置,还可给出该对象中的具体信息2.搜索不成功或搜索失败。作为结果,应报告一些信息,如失败标志、位置等第2页,课件共151页,创作于2023年2月通常称用于搜索的数据集合为搜索结构,它是由同一数据类型的对象(或记录)组成在每个对象中有若干属性,其中有一个属性,其值可唯一地标识这个对象。称为关键码。使用基于关键码的搜索,搜索结果应是唯一的。但在实际应用时,搜索条件是多方面的,可以使用基于属性的搜索方法,但搜索结果可能不唯一第3页,课件共151页,创作于2023年2月实施搜索时有两种不同的环境静态环境搜索结构在插入和删除等操作的前后不发生改变

静态搜索表

动态环境为保持较高的搜索效率,搜索结构在执行插入和删除等操作的前后将自动进行调整,结构可能发生变化动态搜索表第4页,课件共151页,创作于2023年2月查找算法的评价指标查找成功:最少比较次数最多比较次数平均比较次数查找失败:最少比较次数最多比较次数平均比较次数第5页,课件共151页,创作于2023年2月

以顺序表或线性链表表示静态查找表顺序查找第6页,课件共151页,创作于2023年2月ST.elem顺序查找过程假设给定值e=64,要求ST.elem[k]=e,问:k=?kk第7页,课件共151页,创作于2023年2月ST.elemiST.elemi60ikey=64key=60i64第8页,课件共151页,创作于2023年2月intSearch_Seq(TBST,TYPEkey){ST.elem[0].key=key;//“哨兵”

for(i=ST.length;ST.elem[i].key!=key;--i);//从后往前找

returni;//找不到时,i为0}第9页,课件共151页,创作于2023年2月分析顺序查找的时间性能第10页,课件共151页,创作于2023年2月查找算法的平均查找长度(AverageSearchLength)

为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值第11页,课件共151页,创作于2023年2月其中:n为表长,Pi

为查找表中第i个记录的概率,且,Ci为找到该记录时,曾和给定值比较过的关键字的个数第12页,课件共151页,创作于2023年2月在等概率情形pi=1/n,i=1,2,,n

在搜索不成功情形,ASLunsucc=n+1

第13页,课件共151页,创作于2023年2月查找成功:最少比较次数1

最多比较次数n

平均比较次数(n+1)/2

查找失败:最少比较次数n+1

最多比较次数n+1

平均比较次数n+1第14页,课件共151页,创作于2023年2月

上述顺序查找表的查找算法简单,但平均查找长度较大,特别不适用于表长较大的查找表折半查找

若以有序表表示静态查找表,则查找过程可以基于“折半”进行第15页,课件共151页,创作于2023年2月基于有序顺序表的折半搜索设n个对象存放在一个有序顺序表中,并按其关键码从小到大排好了序折半搜索时,先求位于搜索区间正中的对象的下标mid,用其关键码与给定值x比较第16页,课件共151页,创作于2023年2月1.Element[mid].key==x搜索成功2.Element[mid].key>x把搜索区间缩小到表的前半部分,继续折半搜索3.Element[mid].key<x把搜索区间缩小到表的后半部分,继续折半搜索如果搜索区间已缩小到一个对象,仍未找到想要搜索的对象,则搜索失败第17页,课件共151页,创作于2023年2月ST.elemST.length例如:key=64

的查找过程如下mid=(low+high)/2Low

指示查找区间的下界high

指示查找区间的上界第18页,课件共151页,创作于2023年2月搜索成功的例子-101346810126012345678搜索lowmidhigh6

6810125678lowmidhigh665lowmidhigh6第19页,课件共151页,创作于2023年2月搜索失败的例子-101346810125012345678搜索lowmidhigh5

6810125678lowmidhigh655lowmidhigh5第20页,课件共151页,创作于2023年2月intSearch_Bin(TBST,TYPEkey){low=1;high=ST.length;while(low<=high){mid=(low+high)/2;if(key==ST.elem[mid].key)returnmid;if(key<ST.elem[mid].key)high=mid-1;

if(key>ST.elem[mid].key)low=mid+1;}return0;}第21页,课件共151页,创作于2023年2月搜索成功时检测指针停留在树中某个结点搜索不成功时检测指针停留在某个外结点(失败结点)3515455025102030搜索22搜索45第22页,课件共151页,创作于2023年2月有序顺序表的折半搜索的判定树

(10,20,30,40,50,60)1050======30<<<<<<>>>>>>204060第23页,课件共151页,创作于2023年2月先看一个具体的情况,假设:n=11分析折半查找的平均查找长度6391425781011判定树12233334444第24页,课件共151页,创作于2023年2月查找成功:最少比较次数?

最多比较次数?

平均比较次数?

查找失败:最少比较次数?

最多比较次数?

平均比较次数?第25页,课件共151页,创作于2023年2月假设n=2h-1并且查找概率相等则

在n>50时,可得近似结果

一般情况下,表长为n的折半查找的判定树的深度和含有n个结点的完全二叉树的深度相同第26页,课件共151页,创作于2023年2月索引顺序查找1)由索引确定记录所在区间2)在顺序表的某个区间内进行查找注意:索引可以根据查找表的特点来构造可见:

索引顺序查找的过程也是一个“缩小区间”的查找过程第27页,课件共151页,创作于2023年2月分块查找查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找适用条件:分块有序表算法实现用数组存放待查记录,每个数据元素至少含有关键字域建立索引表,每个索引表结点含有最大关键字域和指向本块第一个结点的指针第28页,课件共151页,创作于2023年2月12345678910111213141516171822121389203342443824486058745786532248861713索引表查38第29页,课件共151页,创作于2023年2月分块查找方法评价第30页,课件共151页,创作于2023年2月索引顺序查找的平均查找长度=

查找“索引”的平均查找长度

+查找“顺序表”的平均查找长度第31页,课件共151页,创作于2023年2月ASL最大最小两者之间表结构有序表、无序表有序表分块有序表存储结构顺序存储结构线性链表顺序存储结构顺序存储结构线性链表查找方法比较顺序查找折半查找分块查找第32页,课件共151页,创作于2023年2月二叉排序树(二叉查找树)第33页,课件共151页,创作于2023年2月(1)若它的左子树不空,则左子树上所有结点的值均小于根结点的值

二叉排序树或者是一棵空树;或者是具有如下特性的二叉树(3)它的左、右子树也都分别是二叉排序树(2)若它的右子树不空,则右子树上所有结点的值均大于根结点的值第34页,课件共151页,创作于2023年2月503080209010854035252388是二叉排序树66不第35页,课件共151页,创作于2023年2月二叉排序树的

查找算法第36页,课件共151页,创作于2023年2月

1)若给定值等于根结点的关键字,则查找成功

2)若给定值小于根结点的关键字,则继续在左子树上进行查找

3)若给定值大于根结点的关键字,则继续在右子树上进行查找否则:若二叉排序树为空,则查找不成功第37页,课件共151页,创作于2023年2月50308020908540358832查找关键字50505030403550508090==50,35,90,95第38页,课件共151页,创作于2023年2月n个结点的二叉搜索树的数目3个结点的二叉搜索树122133132123123{123}{132}{213}{231}{312}{321}第39页,课件共151页,创作于2023年2月

如果对一棵二叉搜索树进行中序遍历,可以按从小到大的顺序,将各结点关键码排列起来,所以也称二叉搜索树为二叉排序树第40页,课件共151页,创作于2023年2月在查找过程中,生成了一条查找路径

从根结点出发,沿着左分支或右分支逐层向下直至关键字等于给定值的结点或者从根结点出发,沿着左分支或右分支逐层向下直至指针指向空树为止

——查找成功

——查找不成功第41页,课件共151页,创作于2023年2月351545504025102030搜索45搜索成功

搜索28搜索失败第42页,课件共151页,创作于2023年2月查找性能的分析

对于每一棵特定的二叉排序树,均可按照平均查找长度的定义来求它的ASL值,显然,由值相同的n个关键字,构造所得的不同形态的各棵二叉排序树的平均查找长度的值不同,甚至可能差别很大第43页,课件共151页,创作于2023年2月由关键字序列3,1,2,5,4构造而得的二叉排序树由关键字序列1,2,3,4,5构造而得的二叉排序树2134535412ASL=(1+2+3+4+5)/5=3ASL=(1+2+3+2+3)/5=2.2第44页,课件共151页,创作于2023年2月

输入数据,建立二叉搜索树的过程输入数据

{53,78,65,17,87,09,81,15}535378537865537865175378658717537865091787537865811787095378651517870981第45页,课件共151页,创作于2023年2月

同样3个数据{1,2,3},输入顺序不同,建立起来的二叉搜索树的形态也不同。这直接影响到二叉搜索树的搜索性能如果输入序列选得不好,会建立起一棵单支树,使得二叉搜索树的高度达到最大

第46页,课件共151页,创作于2023年2月{2,1,3}{1,2,3}{1,3,2}{2,3,1}{3,1,2}{3,2,1}123111132223323第47页,课件共151页,创作于2023年2月二叉平衡树(AVL树)第48页,课件共151页,创作于2023年2月

一棵AVL树或者是空树,或者是具有下列性质的二叉搜索树:它的左子树和右子树都是AVL树,且左子树和右子树的高度之差的绝对值不超过1

不平衡平衡ABCABCDEDE第49页,课件共151页,创作于2023年2月

结点的平衡因子

(balancefactor)每个结点附加一个数字,给出该结点右子树的高度减去左子树的高度所得的高度差,这个数字即为结点的平衡因子AVL树任一结点平衡因子只能取-1,0,1第50页,课件共151页,创作于2023年2月如果一个结点的平衡因子的绝对值大于1,则这棵二叉搜索树就失去了平衡,不再是AVL树如果一棵二叉搜索树是平衡的,

且有n个结点,其高度可保持在

O(log2n),平均搜索长度也可保持在O(log2n)第51页,课件共151页,创作于2023年2月548254821是平衡树不是平衡树第52页,课件共151页,创作于2023年2月平衡化旋转如果在一棵平衡的二叉搜索树中插入一个新结点,造成了不平衡。此时必须调整树的结构,使之平衡化平衡化旋转有两类:单旋转(左旋和右旋)

双旋转(左旋加右旋和右旋加左旋)第53页,课件共151页,创作于2023年2月每插入一个新结点时,AVL树中相关结点的平衡状态会发生改变。因此,在插入一个新结点后,需要从插入位置沿通向根的路径回溯,检查各结点的平衡因子第54页,课件共151页,创作于2023年2月如果在某一结点发现高度不平衡,停止回溯。从发生不平衡的结点起,沿刚才回溯的路径取直接下两层的结点第55页,课件共151页,创作于2023年2月如果这三个结点处于一条直线上,则采用单旋转进行平衡化单旋转可按其方向分为左单旋转和右单旋转,其中一个是另一个的镜像,其方向与不平衡的形状相关如果这三个结点处于一条折线上,则采用双旋转进行平衡化双旋转分为先左后右和先右后左两类第56页,课件共151页,创作于2023年2月右单旋转R型左单旋转L型第57页,课件共151页,创作于2023年2月左右双旋转LR型右左双旋转RL型第58页,课件共151页,创作于2023年2月左单旋转

(RotateLeft,L型)第59页,课件共151页,创作于2023年2月hhhACEBDhhh+1BACEDhhh+1CEABD+1+20+100在子树E中插入新结点,该子树高度增1导致结点A的平衡因子变成+2,产生不平衡(L型)以结点C为旋转轴,将结点A反时针旋转第60页,课件共151页,创作于2023年2月右单旋转

(RotateRight,R型)第61页,课件共151页,创作于2023年2月在子树D中插入新结点,该子树高度增1导致结点A的平衡因子变成-2,产生不平衡(R型)以结点B为旋转轴,将结点A顺时针旋转hhhACEBDhh+1BACEDhhh+1CEABDh000-1-1-2第62页,课件共151页,创作于2023年2月

先左后右双旋转

(RotationLeftRight,LR型)第63页,课件共151页,创作于2023年2月在子树F或G中插入新结点,该子树高度增1导致结点A的平衡因子变成-2,产生不平衡(LR型)首先以结点E为旋转轴,将结点B反时针旋转,以E代替原来B的位置,做左单旋转再以结点E为旋转轴,将结点A顺时针旋转,做右单旋转第64页,课件共151页,创作于2023年2月插入00-1-2+1-1hhACED0h-1h-1hhAh-1hBCEDB左单旋转FGFG第65页,课件共151页,创作于2023年2月00-200+1hhACED-2h-1hhhAh-1hBCEDB右单旋转FGFG第66页,课件共151页,创作于2023年2月先右后左双旋转

(RotationRightLeft,RL型)第67页,课件共151页,创作于2023年2月在子树F或G中插入新结点,该子树高度增1导致结点A的平衡因子变成2,产生不平衡(RL型)首先以结点D为旋转轴,将结点C顺时针旋转,以D代替原来C的位置,做右单旋转再以结点D为旋转轴,将结点A反时针旋转,做左单旋转第68页,课件共151页,创作于2023年2月插入右单旋转+1000-1+10hhACEDh-1BFGh-1+2000hhACEhBFGh-1D第69页,课件共151页,创作于2023年2月00+20-10hhACE+2h-1hhhAh-1hBCEDB左单旋转FGFGD第70页,课件共151页,创作于2023年2月构造二叉平衡(查找)树的方法在插入过程中,采用平衡旋转技术依次插入的关键字为5,4,2,8,6,95424258665842向右旋转一次先向右旋转再向左旋转第71页,课件共151页,创作于2023年2月426589642895向左旋转一次继续插入关键字9第72页,课件共151页,创作于2023年2月输入关键码序列为{16,3,7,11,9,26,18,14,15}插入和调整过程如下161603163-10701-2左右双旋731600073110-111612273161190-1-2右单旋37169000371126916110112第73页,课件共151页,创作于2023年2月右左双旋左单18183-116000732611-1971614002691110316027390182611-11691711261第74页,课件共151页,创作于2023年2月1518231816-2左右双旋73000117149-1161501112626141-29从空树开始的建树过程第75页,课件共151页,创作于2023年2月B树大型文件访问方法第76页,课件共151页,创作于2023年2月B树是一种平衡的多路

查找树第77页,课件共151页,创作于2023年2月

m

阶的B树上,每个非终端结点可能含有:

n

个关键字Ki(1≤i≤n)n<m

n

个指向记录的指针Di(1≤i≤n)

n+1

个指向子树的指针Ai(0≤i≤n)多叉树的特性第78页,课件共151页,创作于2023年2月非叶结点中的多个关键字均自小至大有序排列,即:K1<K2<…<KnAi-1所指子树上所有关键字均小于KiAi所指子树上所有关键字均大于Ki查找树的特性第79页,课件共151页,创作于2023年2月平衡树的特性树中所有叶子结点均不带信息,且在树中的同一层次上根结点或为叶子结点,或至少含有两棵子树其余所有非叶结点均至少含有m/2棵子树,至多含有m

棵子树第80页,课件共151页,创作于2023年2月

从根结点出发,沿指针搜索结点和在结点内进行顺序(或折半)查找两个过程交叉进行查找过程第81页,课件共151页,创作于2023年2月

若查找成功,则返回指向被查关键字所在结点的指针和关键字在结点中的位置若查找不成功,则返回插入位置第82页,课件共151页,创作于2023年2月在查找不成功之后,需进行插入显然,关键字插入的位置必定在最下层的非叶结点,有下列几种情况插入第83页,课件共151页,创作于2023年2月插入后,该结点的关键字个数n<m,不修改指针第84页,课件共151页,创作于2023年2月插入后,该结点的关键字个数n=m,则需进行“结点分裂”,令s=m/2,在原结点中保留(A0,K1,……,Ks-1,As-1);建新结点(As,Ks+1,……,Kn,An);将(Ks,p)插入双亲结点第85页,课件共151页,创作于2023年2月若双亲为空,则建新的根结点第86页,课件共151页,创作于2023年2月下列为3阶B树502040

80插入关键字=60

6080,9060809090

508060,30

4020305080305080第87页,课件共151页,创作于2023年2月

和插入的考虑相反,首先必须找到待删关键字所在结点,并且要求删除之后,结点中关键字的个数不能小于m/2-1,否则,要从其左(或右)兄弟结点“借调”关键字,若其左和右兄弟结点均无关键字可借(结点中只有最少量的关键字),则必须进行结点的“合并”删除第88页,课件共151页,创作于2023年2月在含N

个关键字的B树上进行一次查找,需访问的结点个数不超过

logm/2((N+1)/2)+1查找性能第89页,课件共151页,创作于2023年2月是B树的一种变型B+树第90页,课件共151页,创作于2023年2月

每个叶子结点中含有n

个关键字和n

个指向记录的指针;并且,所有叶子结点彼此相链接构成一个有序链表,其头指针指向含最小关键字的结点第91页,课件共151页,创作于2023年2月

每个非叶结点中的关键字Ki即为其相应指针Ai所指子树中关键字的最大值所有叶子结点都处在同一层次上,每个叶子结点中关键字的个数均介于m/2和m之间第92页,课件共151页,创作于2023年2月查找过程

在B+树上,既可以进行缩小范围的查找,也可以进行顺序查找

在进行缩小范围的查找时,不管成功与否,都必须查到叶子结点才能结束

若在结点内查找时,给定值≤Ki,则应继续在Ai所指子树中进行查找第93页,课件共151页,创作于2023年2月插入和删除类似于B树进行,即必要时,也需要进行结点的“分裂”或“归并”第94页,课件共151页,创作于2023年2月

5096

155062

78

96

717884

89

96

566220264350

3815sqroot第95页,课件共151页,创作于2023年2月第96页,课件共151页,创作于2023年2月第97页,课件共151页,创作于2023年2月

B+树的删除仅在叶结点上进行。当在叶结点上删除一个关键码-指针索引项后,结点中的子树棵数仍然不少于m/2,这属于简单删除,其上层索引可以不改变。如果删除的关键码是该结点的最小关键码,但因在其上层的副本只是起了一个引导搜索的“分界关键码”的作用,所以上层的副本仍然可以保留。如果在叶结点中删除一个关键码-指针索引项后,该结点中的子树棵数n小于结点子树棵数的下限m/2,必须做结点的调整或合并工作。第98页,课件共151页,创作于2023年2月删除18删除12第99页,课件共151页,创作于2023年2月如果右兄弟结点的子树棵数已达到下限m/2,没有多余的关键码可以移入被删关键码所在的结点,这时必须进行两个结点的合并。将右兄弟结点中的所有关键码-指针索引项移入被删关键码所在结点,再将右兄弟结点删去。第100页,课件共151页,创作于2023年2月删除33进行结点合并第101页,课件共151页,创作于2023年2月结点的合并将导致双亲结点中“分界关键码”的减少,有可能减到非叶结点中子树棵数的下限m/2

以下。这样将引起非叶结点的调整或合并。如果根结点的最后两个子女结点合并,树的层数就会减少一层。第102页,课件共151页,创作于2023年2月

TheB*-Treesplitstwopagesforthree,andcombinesthreepagesintotwo.Inthisway,nodesarealways2/3full.第103页,课件共151页,创作于2023年2月

Trie树是一棵度m

2的树,它的每一层分支不是靠整个关键码的值来确定,而是由关键码的一个分量来确定。如下图所示Trie树,关键码由英文字母组成。它包括两类结点:元素结点和分支结点。元素结点包含整个key数据;分支结点有27个指针,其中有一个空白字符‘b’,用来终结关键码;其它用来标识‘a’,‘b’,...,‘z’等26个英文字母。Trie树Trie树的定义当关键码是可变长时,Trie树是一种特别有用的索引结构。第104页,课件共151页,创作于2023年2月第105页,课件共151页,创作于2023年2月

在第0层,所有的关键码根据它们第0位字符,被划分到互不相交的27个类中。因此,root→brch.link[i]指向一棵子Trie树,该子Trie树上所包含的所有关键码都是以第i个英文字母开头。若某一关键码第j

位字母在英文字母表中顺序为i(i=0,1,,26),则它在Trie树的第

j层分支结点中从第i

个指针向下找第

j+1位字母所在结点。当一棵子Trie树上只有一个关键码时,就由一个元素结点来代替。在这个结点中包含有关键码,以及其它相关的信息,如对应数据对象的存放地址等。第106页,课件共151页,创作于2023年2月

Trie树的搜索为了在Trie树上进行搜索,要求把关键码分解成一些字符元素,并根据这些字符向下进行分支。第107页,课件共151页,创作于2023年2月在Trie树上插入bobwhite和bluejay后的结果第108页,课件共151页,创作于2023年2月哈希查找(Hash)第109页,课件共151页,创作于2023年2月

以上讨论的表示查找表的各种结构的共同特点:记录在表中的位置和它的关键字之间不存在一个确定的关系第110页,课件共151页,创作于2023年2月

查找的过程为给定值依次和关键字集合中各个关键字进行比较

查找的效率取决于和给定值进行比较的关键字个数第111页,课件共151页,创作于2023年2月

用这类方法表示的查找表,其平均查找长度都不为零

不同的表示方法,其差别仅在于:关键字和给定值进行比较的顺序不同第112页,课件共151页,创作于2023年2月

只有一个办法:预先知道所查关键字在表中的位置对于频繁使用的查找表,希望ASL=0

即,要求:记录在表中位置和其关键字之间存在一种确定的关系第113页,课件共151页,创作于2023年2月在一般情况下,需在关键字与记录在表中的存储位置之间建立一个函数关系,以H(key)作为关键字为key的记录在表中的位置,通常称这个函数H(key)为哈希函数第114页,课件共151页,创作于2023年2月

哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可第115页,课件共151页,创作于2023年2月

由于哈希函数是一个压缩映象,因此,在一般情况,很容易产生“冲突”现象,即:key1key2,而

H(key1)=H(key2)第116页,课件共151页,创作于2023年2月

很难找到一个不产生冲突的哈希函数。一般情况下,只能选择恰当的哈希函数,使冲突尽可能少地产生第117页,课件共151页,创作于2023年2月

因此,在构造这种特殊的“查找表”时,除了需要选择一个“好”(尽可能少产生冲突)的哈希函数之外;还需要找到一种“处理冲突”的方法第118页,课件共151页,创作于2023年2月哈希表的定义

根据设定的哈希函数H(key)和所选处理冲突的方法,将一组关键字映象到一个有限的、地址连续的地址集(区间)上,并以关键字在地址集中的“映象”作为相应记录在表中的存储位置,如此构造所得的查找表称为“哈希表”第119页,课件共151页,创作于2023年2月构造哈希函数的方法对数字的关键字可有下列构造方法

若是非数字关键字,则需先对其进行数字化处理

直接定址法平方取中法

除留余数法

折叠法

数字分析法第120页,课件共151页,创作于2023年2月数字分析法

第121页,课件共151页,创作于2023年2月此方法适合于:能预先估计出全体关键字的每一位上各种数字出现的频度

假设关键字集合中的每个关键字都是由s位数字组成(u1,u2,…,us),分析关键字集中的全体,并从中提取分布均匀的若干位或它们的组合作为地址第122页,课件共151页,创作于2023年2月平方取中法第123页,课件共151页,创作于2023年2月

以关键字的平方值的中间几位作为存储地址。求“关键字的平方值”的目的是“扩大差别”,同时平方值的中间各位又能受到整个关键字中各位的影响

此方法适合于:

关键字中的每一位都有某些数字重复出现频度很高的现象第124页,课件共151页,创作于2023年2月折叠法第125页,课件共151页,创作于2023年2月

将关键字分割成若干部分,然后取它们的叠加和为哈希地址。有两种叠加处理的方法:移位叠加和间界叠加

此方法适合于:

关键字的数字位数特别多第126页,课件共151页,创作于2023年2月直接定址法第127页,课件共151页,创作于2023年2月哈希函数为关键字的线性函数

H(key)=key或者

H(key)=akey+b此法适合于:地址集合的大小==关键字集合的大小第128页,课件共151页,创作于2023年2月除留余数法第129页,课件共151页,创作于2023年2月

设定哈希函数为:H(key)=keyMODp

其中,p≤m(表长)并且

p

应为不大于m的素数或是不含20以下的质因子第130页,课件共151页,创作于2023年2月

实际造表时,采用何种构造哈希函数的方法取决于建表的关键字集合的情况(包括关键字的范围和形态),总的原则是使产生冲突的可能性降到尽可能地小第131页,课件共151页,创作于2023年2月处理冲突的方法“处理冲突”的实际含义是为产生冲突的地址寻找下一个哈希地址1.开放定址法2.链地址法第132页,课件共151页,创作于2023年2月

为产生冲突的地址H(key)求得一个地址序列:

H0,H1,H2,…,Hs

1≤s≤m-1其中:H0=H(key)Hi=(H(key)+di

)MODm

i=1,2,…,s开放定址法(闭域法)第133页,课件共151页,创作于2023年2月增量di

的三种取法第134页,课件共151页,创作于2023年2月

1)线性探测再散列

di=ci

最简单的情况c=12)平方探测再散列

di=12,-12,22,-22,…,3)随机探测再散列

di

是一组伪随机数列或者

di=i×H2(key)(又称双散列函数探测)第135页,课件共151页,创作于2023年2月即:产生的Hi

均不相同,且所产生的

s(m-1)个Hi值能覆盖哈希表中所有地址。且要求:

增量di

应具有“完备性”

随机探测时的m

和di没有公因子

平方探测时的表长m必为形如4j+3

的素数(如:7,11,19,23,…等)第136页,课件共151页,创作于2023年2月{19,01,23,14,55,68,11,82,36}H(key)=keyMOD1119012314

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论