跳表和散列学习培训课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《跳表和散列学习培训课件.ppt》由用户(林田)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 培训 课件
- 资源描述:
-
1、山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列1第第 10 章章跳表和散列跳表和散列(Skip List and Hashing)山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列2本章内容本章内容n10.1 字典 dictionariesn10.2 线性表描述 Linear Listn10.3 跳表描述 Skip List n10.4 散列表描述 Hash tablen10.5 应用 Applications山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列为什么学这章?为什么学这章?n若一维排序数组,我们可以用折半检索在 O(logn)时间内找到表中的一个元素。
2、本章将研究如何构造排序的链表、如何维护(进行插入或删除操作后),以及能否也能在O(logn)时间内进行检索。山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列410.1 字典字典n字典(dictionary)是一些元素的集合。每个元素有一个称作key 的域,不同元素的key 各不相同。n有关字典的操作有:n插入(Insert)具有给定关键字值的元素。n在字典中寻找/搜索(Search)具有给定关键字值的元素。n删除(Delete)具有给定关键字值的元素 n例,班级的学生注册表,key=学号l有重复元素的字典 A dictionary with duplicatesMay be ther
3、e are more than one elements have a same key例,班级的学生考试报表,key=成绩山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列5AbstractDataType 抽象数据类型 Dictionary实例一组带有关键词(=关系)的元素集合操作操作empty()true when the dictionary is emptysize()return the number of elementsfind(k):搜索关键字为k的数对Insert(p):向字典中插入数对perase(k):删除关键字为k的数对山东大学计算机科学与技术学院 数据结构
4、第7章 跳表和散列6TemplateClass dictionary()Public:virtual dictionary()virtual bool empty()const=0;virtual int size()const=0;virtual pair*find(const K&)const=0;virtual void erase(const k&)=0;virtual void insert(const pair&)=0;山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列710.2 线性表描述线性表描述n有序线性表:L=(e1,e2,e3,en),n关键字从左到右依次增大 n
5、在计算机存储器中的数据描述n公式化描述n链表描述山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列8链表描述的有序线性表(字典)链表描述的有序线性表(字典)采用链表描述的有序线性表有序链表n类 SortedChain山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列9类类 SortedChaintemplate struct pairNode typedef pair pairType;pairType element;pairNode*next;pairNode(const pairType&thePair):element(thePair)pairNode(const pa
6、irType&thePair,pairNode*theNext):element(thePair)next=theNext;firste1e20eneiei-1ei+1山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列10Class SortedChaintemplateclass sortedChain:public dictionary public:sortedChain()firstNode=NULL;dSize=0;sortedChain();bool empty()const return dSize=0;int size()const return dSize;pair*
7、find(const K&)const;void erase(const K&);void insert(const pair&);void output(ostream&out)const;protected:pairNode*firstNode;/pointer to first node in chain int dSize;/number of elements in dictionary;山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列11操作操作 findtemplatepair*sortedChain:find(const K&theKey)const/搜索与k匹配的元
8、素,/如果没有匹配的元素,则返回NULL pairNode*currentNode=firstNode;while(currentNode!=NULL¤tNode-element.first next;if (currentNode!=NULL¤t-element.first=theKey)return¤t-element;/与theKey相匹配 return NULL;/不存在相匹配的元素山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列12操作操作 Insert firste1e20eneiei-1ei+1p:从表头开始第一个大于x的节点tpfi
9、rste1e20eneiei-1ei+1ptp=0eqeq山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列13templatevoid sortedChain:insert(const pair&thePair)/如果表中不存在关键值与e相同的元素,则插入e,否则替换 pairNode*p=firstNode,*tp=NULL;/p指向节点的前驱 while(p!=NULL&p-element.first next;if(p!=NULL&p-element.first=thePair)p-element.second=thePair.second;/替换旧值 return;/若没有出
10、现重复关键值,则产生一个关键值为e的新节点 pairNode*newNode=new pairNode(thePair,p);if(tp=NULL)firstNode=newNode;/新节点插入表头 else tp-next=newNode;dSize+;return;山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列14操作操作 erasefirste1e20eneiei-1ei+1ptpfirste1e20eneiei-1ei+1ptp=0tp-link=p-linkfirst=p-link山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列15templatevoid s
11、ortedChain:erase(const K&theKey)/删除与theKey相匹配的元素,pairNode*p=firstNode,tp=NULL;/p 指向匹配的节点,tp 指向p 前面的节点。while(p!=NULL&p-element.first next;/搜索与k相匹配的元素 /验证是否与k匹配 if(p!=NULL)&p-element.first=theKey)/找到一个相匹配的元素 if(tp=NULL)firstNode=p-next;else tp-next=p-next;是链首节点 delete p;dSize-;山东大学计算机科学与技术学院 数据结构 第7章
12、跳表和散列n作业 p 239 5山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列1710.4 Skip Listn10.4.1 理想情况n10.4.2 插入和删除n10.4.3 级的分配n10.4.4 类SkipNoden10.4.5 类SkipListn10.4.6 复杂性山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列187.3.1 ideal case20243040607580Search:最坏情况下的比较次数 f(n)=n Search:f(n)=n/2+1 if we keep a pointer in the middle.202430406075802024
13、3040607580210山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列1910.3 理想状态的节点分布理想状态的节点分布n0 级链上元素数:n n1 级链上元素数:n n2 级链上元素数:n nni 级链上元素数:n/2i n我们称元素 a 是第i 层元素,若它也是0i-1层的元素,但a不是第i+1层元素。nE.g.40 是层 2 元素,而 24 和75 是层1元素。山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列20n跳表(skip list):n在跳表结构中,每个节点有一维数组表示层次的链。n0级链是包含所有元素的有序链表,1级链是0级链的一个子集。i级链所包含的元
14、素是i-1级链所有元素的子集.山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列插入和删除插入和删除n和sortedChain一样,插入和删除要保持表仍然是排序的,同时要给链表组赋值,而新增节点的层次要动态确定。山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列227.3.2 插入和删除插入和删除ni 级链上元素数:n/2ini-1级元素属于i级链的概率是:1/2 n一个元素属于i级链概率是:1/2i=(1/2)i n链的级数:log2n +121020243040607580山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列23insert an element wi
15、th value 77山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列元素插入元素插入n1)发现插入位置n2)对新元素赋予层数值i;n3)对新元素和其他在层数 0 i 的节点指针可能要更改。n元素删除n1)从最高层逐次向下搜索该元素 i,n2)删除该元素并对原来想邻接的节点的指针进行修改。山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列新增节点的新增节点的level确定确定n我们假定每个节点在level 0 的概率为1,其他是独立按概率p增加的,n1层 pn2层 p*pnnd 层 pd n如何实现?用系统的随机函数rand(),每次产生随机数在 0 RAND_MAX.山东大
16、学计算机科学与技术学院 数据结构 第7章 跳表和散列267.3.3 level assignmentnThen the probability that the next random number is CutOff=p*RAND_MAX is p。lIf next random number is Cutoff,then the new element should be in level 1,and check the next random numberlGenerally,the final level assigned to the new element is int lev=0
17、while(rand()=CutOff)lev+;0 cutoff RAND_MAX =p*RAND_MAX 山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列277.3.3 级的分配级的分配n缺点1:可能为某些元素分配特别大的级,从而导致一些元素的级远远超过loglog1/p1/pN N(N为字典中预期的最大数目,因此,n在有N个元素的跳表中,级的最大值 MaxLevel=loglog1/p1/pN N-1-1,以此值作为上限。n缺点2:可能存在下面的情况,如在插入一个新元素前有三条链,而在插入之后就有了10条链。这时,新插入元素的为9级,。n我们可以把新元素的级调整为3。即把新元素
18、的级调整为最大级数+1。山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列结构结构 SkipNoden头节点需要最大层数的指针;n尾节点不需要指针;n每个节点包含element 部分、指针部分(比它 level多1)山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列29 7.3.4 类类SkipNodetemplatestruct SkipNode typedef pair pairType;pairType element;skipNode*next;/一维指针数组 skipNode(const pairType&thePair,int size):element(thePa
19、ir)next=new skipNode*size;0 1 2 size-1next20243040607580山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列30#ifndef skipList_#define skipList_#include#include#include#include#include dictionary.h#include skipNode.h#include myExceptions.husing namespace std;templateclass skipList:public dictionary public:skipList(K,int m
20、axPairs=10000,float prob=0.5);skipList();山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列31 bool empty()const return dSize=0;int size()const return dSize;pair*find(const K&)const;void erase(const K&);void insert(const pair&);void output(ostream&out)const;protected:float cutOff;/used to decide level number int level()c
21、onst;/generate a random level number int levels;/max current nonempty chain int dSize;/number of pairs in dictionary int maxLevel;/max permissible chain level K tailKey;/a large key skipNode*search(const K&)const;/search saving last nodes seen skipNode*headerNode;/header node pointer skipNode*tailNo
22、de;/tail node pointer skipNode*last;/lasti=last node seen on level i;山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列32templateskipList:skipList(K largeKey,int maxPairs,float prob)/Constructor for skip lists with keys smaller than largeKey and/size at most maxPairs.0 prob 1.cutOff=prob*RAND_MAX;maxLevel=(int)ceil(logf
23、(float)maxPairs)/logf(1/prob)-1;levels=0;/initial number of levels dSize=0;tailKey=largeKey;/create header&tail nodes and last array pair tailPair;/申请变量 tailPair.first=tailKey;/赋值 headerNode=new skipNode(tailPair,maxLevel+1);tailNode=new skipNode(tailPair,0);/建立尾结点 last=new skipNode*maxLevel+1;/用于记录
24、指针的数组 /header points to tail at all levels as lists are empty for(int i=0;i nexti=tailNode;/建立首尾两个节点的链接山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列33templateskipList:skipList()/Delete all nodes and array last.skipNode*nextNode;/delete all nodes by following level 0 chain while(headerNode!=tailNode)nextNode=headerN
25、ode-next0;/沿着0层删除 delete headerNode;headerNode=nextNode;delete tailNode;delete last;山东大学计算机科学与技术学院 数据结构 第7章 跳表和散列34templatepair*skipList:find(const K&theKey)const/fa/Return NULL if no matching pair.if(theKey=tailKey)return NULL;/超出合理关键词的取值范围了 /position beforeNode just before possible node with theKe
展开阅读全文