算法与数据结构查找.ppt
《算法与数据结构查找.ppt》由会员分享,可在线阅读,更多相关《算法与数据结构查找.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、BUPT关于算法与数据关于算法与数据结构构查找找现在学习的是第1页,共70页BUPT SCSTBUPT8.1 基本概念与术语基本概念与术语查找表查找表 同一类型的记录(数据元素)的集合集合。查找查找 指定某个值,在查找表中确定是否存在一个记录,该记录的关键关键字字等于给定值。关键字关键字 记录(数据元素)中的某个数据项的值。主关键字主关键字该关键字可以唯一地标识一个记录。次关键字次关键字该关键字不能唯一标识一个记录。静态查找表静态查找表对查找表的查找仅是以查询为目的,不改动查找表中的数据。动态查找表动态查找表在查找的过程中同时插入不存在的记录,或删除某个已存在的记录。查找成功查找成功查找表中存
2、在满足查找条件的记录。查找不成功查找不成功 查找表中不存在满足查找条件的记录。现在学习的是第2页,共70页BUPT SCSTBUPT内查找内查找 整个查找过程都在内存中进行。外查找外查找在查找过程中需要访问外存。平均查找长度平均查找长度ASL查找方法时效的度量为确定记录在查找表中的位置,需将关键字和给定值比较次数的期望值。查找成功时的ASL计算方法:n:记录的个数pi:查找第i个记录的概率,(不特别声明时认为等概率pi=1/n)ci:找到第i个记录所需的比较次数约定:无特殊说明,一般默认关键字的类型为整型约定:无特殊说明,一般默认关键字的类型为整型现在学习的是第3页,共70页BUPT SCST
3、BUPT8.2 顺序表的查找顺序表的查找 0 1 n-1 n r0.n a0 a1 an-1 rn.key=K算法描述算法描述int seqsearch(int*a,const int n,const int K)int i=0;an=K;while(ai!=K)i+;return i;现在学习的是第4页,共70页BUPT SCSTBUPT程序设计技巧程序设计技巧设置监视哨,提高算法效率。性能分析性能分析v空间:一个辅助空间。v时间:1)查找成功时的平均查找长度设表中各记录查找概率相等ASLs(n)=(1+2+.+n)/n=(n+1)/22)查找不成功时的平均查找长度ASLf=n+1算法特点算
4、法特点v算法简单,对表结构无任何要求vn很大=查找效率较低v改进措施:非等概率查找时,可将查找概率高的记录尽量排在表前部。现在学习的是第5页,共70页BUPT SCSTBUPT8.3 二分查找二分查找满足满足 ri.key ri+1.key,0 i n-1仍可用顺序查找,但在找不到时不需比较到表尾,只需比较到比给定值大的记录就可终止。折半折半(二分二分)查找法查找法12345678910110513192137566475808892lowmidhigh=(low+high)/2K=21lhmK=85lhm111611161537119454101110109现在学习的是第6页,共70页BUP
5、T SCSTBUPT算法描述算法描述int binsearch(int K,int v,int n)int low,high,mid;low=1;high=n;while(low=high)mid=(low+high)/2;if(K vmid)low=mid+1;else/*找到了匹配的值找到了匹配的值*/return mid;return-1;/*没有查到没有查到*/现在学习的是第7页,共70页BUPT SCSTBUPT性能分析性能分析h=log2n+1同完全二叉树,二叉树性质4成功查找时的平均查找长度(等概率):ASLs=例:ASLS=(1*1+2*2+3*4+4*4)/11=3不成功查找
6、时的查找长度:h-1或h次 -13-46-79-101-22-34-55-67-88-910-1111-639147 102581112h判定树判定树(描述查找过程的二叉树)外结点内结点lc,flag);/中序遍历左子树if(pre=NULL)pre=t;/中序的第一个结点不判断elseif(pre-datadata)pre=t;/前驱指针指向当前结点elseflag=FLASE;/不是完全二叉树JudgeBST(t-rc,flag);/中序遍历右子树现在学习的是第19页,共70页BUPT SCSTBUPT方法2:照定义,二叉排序树的左右子树都是二叉排序树,根结点的值大于左子树中所有值而小于右
7、子树中所有值,即根结点大于左子树的最大值而小于右子树的最小值。bool JudgeBST(BTreet)if(t=NULL)return TRUE;if(JudgeBST(t-lc)&JudgeBST(t-rc)m=max(t-llink);n=min(t-rlink);/左子树中最大值和右子树中最小值return(t-datam&t-datarc!=null)p=p-rc;return p-data;int min(BTreep)/求右子最小值if(p=NULL)return maxint;else while(p-lc!=NULL)p=p-lc;return p-data;现在学习的是第2
8、0页,共70页BUPT SCSTBUPT在二叉排序树上的操作在二叉排序树上的操作1.查找查找例例K=28K=32bst45241228bst455390241228325390查找步骤:若根结点的关键字值等于查找的关键字,成功。查找步骤:若根结点的关键字值等于查找的关键字,成功。否则,若小于根结点的关键字值,查其左子树。否则,若小于根结点的关键字值,查其左子树。若大于根结点的关键字值,查其右子树。若大于根结点的关键字值,查其右子树。在左右子树上的操作类似。在左右子树上的操作类似。现在学习的是第21页,共70页BUPT SCSTBUPTBitreeSearchBST(BiTreeT,KeyTyp
9、ekey)/在二叉分类树查找关键字之值为key的结点,找到返回该结/点的地址,否则返回空。T为根结点的指针。if (T=NULL)|(key=T-data)return(T);else if(keydata.key)return(SearchBST(T-lc,key);else return(SearchBST(T-rc,key);查找算法查找算法现在学习的是第22页,共70页BUPT SCSTBUPT2.插入插入首先执行查找算法,找出被插结点的父亲结点。判断被插结点是其父亲结点的左、右儿子。将被插结点作为叶子结点插入。若二叉树为空。则首先单独生成根结点。注意:新插入的结点总是叶子结点。注意:
10、新插入的结点总是叶子结点。3.生成生成算法步骤算法步骤 反复执行以下操作a.读入一个记录,设其关键字为K;b.调用查找算法,确定插入位置;c.调用插入算法,实施插入结点的操作;现在学习的是第23页,共70页BUPT SCSTBUPT例:将序列122、99、250、110、300、280作为二叉排序树的结点的关键字值,生成二叉排序树。12212299122250991222501109912225030011099现在学习的是第24页,共70页BUPT SCSTBUPT4.删除删除依据被删除结点p的不同情况分析:1.p是叶子结点:修改其双亲指针即可2.p只有左孩子:用p的左子树代替以p为根的子树
11、p只有右孩子:用p的右子树代替以p为根的子树3.p有两个孩子:找到p的中序后继(或前趋)结点q,q的数据复制给p,删除只有右子(或左子)/无孩子的q现在学习的是第25页,共70页BUPT SCSTBUPT例:(1)(2)(2)(3)5320901050869541241528891304539878992现在学习的是第26页,共70页BUPT SCSTBUPTvoid Delete(BSTree T,keytype X)/在二叉排序树T上,删除为X的结点。BSTreef,p=T;while(p&p-key!=X)/查找值为X的结点if(p-keyX)f=p;p=p-lc;/f为p的双亲else
12、f=p;p=p-rc;if(p=NULL)printf(“无关键字为X的结点n”);exit(0);if(p-lc=NULL)/被删结点无左子树if(f-lc=p)f-lc=p-rc;/将被删结点的右子树接到其双亲上elsef-rc=p-rc;else/被删结点有左子树q=p;s=p-lc;while(s-rc!=NULL)/查左子树中最右下的结点(中序最后结点)q=s;s=s-rc;p-key=s-key;/结点值用其左子树最右下的结点的值代替if(q=p)p-lc=s-lc;/被删结点左子树的根结点无右子女elseq-rc=s-lc;/s是被删结点左子树中序序列最后一个结点free(s);
13、现在学习的是第27页,共70页BUPT SCSTBUPT4.性能分析性能分析v给定树的形态,等概率查找成功时的ASL=ci/n最差(单支树):(n+1)/2最好(类似折半查找的判定树):log2(n+1)-1随机:1+4log2nv关键字有序出现时,构造出“退化”的二叉排序树,树深为n,各种操作代价O(n)。避免方法:采用平衡二叉树现在学习的是第28页,共70页BUPT SCSTBUPT8.7 平衡二叉树平衡二叉树(AVL树树)1.定义定义平衡二叉树平衡二叉树或者是空树,或者是满足如下性质的二叉排序树:1)它的左、右子树的高度之差的绝对值不超过1;2)其左右子树本身又各是一棵平衡二叉树。二叉树
14、上结点的平衡因子平衡因子:该结点的左子树高度减去右子树的高度。平衡二叉树非平衡二叉树302010252235383020353233001-10-1100-12-2平衡二叉树:每个结点的平衡因子都为平衡二叉树:每个结点的平衡因子都为 1、1、0 的二叉排序树。的二叉排序树。现在学习的是第29页,共70页BUPT SCSTBUPT2.结点的存储结构结点的存储结构lcbfkeyotherinforclc:左孩子指针rc:右孩子指针bf:平衡因子key:记录的关键字otherinfo:记录的其它数据成分现在学习的是第30页,共70页BUPT SCSTBUPT4.在平衡二叉树上的操作在平衡二叉树上的操
15、作查找查找查找方法同二叉排序树。插入插入 插入新结点之后仍应保持平衡二叉树的性质不变。例平衡二叉树的生成过程15001525-1-2-1000000-1-1001-2-20000-11525353525152515359015253590651525653590现在学习的是第31页,共70页BUPT SCSTBUPT调整范围的确定调整范围的确定插入结点后,找到离插入结点最近且平衡因子绝对值超过1的祖先结点(危机节点),则以该危机节点为根的子树将是可能不平衡的最小子树,可将重新平衡的范围局限于这棵子树。调整的类型调整的类型 LL型型-表示新插入结点在危机结点的左子左子的左子树左子树上LR型型-表
16、示新插入结点在危机结点的左子左子的右子右子树上RL型型-表示新插入结点在危机结点的右右子子的左子树左子树上RR型型-表示新插入结点在危机结点的右右子子的右右子树子树上现在学习的是第32页,共70页BUPT SCSTBUPT调整的方法调整的方法LL型平衡旋转型平衡旋转一次顺时针旋转AB+1h-10+2+1hh-1h-1LL 型调整型调整BLBRARBA0h0h-1h-1BLBRAR危机结点危机结点调整前:高度为调整前:高度为 h+1 中序序列:中序序列:ABBLBRAR调整后:高度为调整后:高度为 h+1 中序序列:中序序列:ABBLBR注意:调整后注意:调整后 平衡因子为平衡因子为 0ABAR
17、现在学习的是第33页,共70页BUPT SCSTBUPTLR型平衡旋转型平衡旋转一次逆时针旋转+一次顺时针旋转AB+1h-10+2-1h-1LR 型调整型调整BLAR危机结点危机结点CBCCLCRh-2h-2h-10+1CB0h-1BLARACRh-2CLh-1-10ABBLARCCLCR调整后:调整后:高度为高度为 h+1 中序序列:中序序列:ABBLARCCLCRA调整前:调整前:高度为高度为 h+1 中序序列:中序序列:h-1情形情形A注意:调整后注意:调整后 平衡因子为平衡因子为+1,0,0现在学习的是第34页,共70页BUPT SCSTBUPTLR型平衡旋转型平衡旋转一次逆时针旋转+
18、一次顺时针旋转AB+1h-10+2-1h-1LR 型调整型调整BLAR危机结点危机结点调整前:调整前:高度为高度为 h+1 中序序列:中序序列:注意:改组后注意:改组后 平衡度为平衡度为+1,0,0CBCCRCLh-1h-2h-20-1CB0h-1BLARACRh-1CLh-2+10ABBLARCCRCL调整后:调整后:高度为高度为 h+1 中序序列:中序序列:AABBLARCCRCL情形情形B现在学习的是第35页,共70页BUPT SCSTBUPT注意:调整后注意:调整后 平衡因子为平衡因子为 0,0,0LR型平衡旋转型平衡旋转一次逆时针旋转+一次顺时针旋转AB+10+2-1LR 型调整型调
19、整危机结点危机结点调整前:调整前:高度为高度为 2 中序序列:中序序列:CBC0ABCA新插入结点新插入结点ABC调整后:调整后:高度为高度为 2 中序序列:中序序列:ca0b00情形情形C现在学习的是第36页,共70页BUPT SCSTBUPTRR型平衡旋转型平衡旋转一次逆时针旋转AB-1h-10-2-1hh-1h-1RR 型调整型调整BLBRALBA0h0h-1h-1BLAL危机结点危机结点调整前:高度为调整前:高度为 h+1 中序序列:中序序列:BAALBLBR调整后:高度为调整后:高度为 h+1 中序序列:中序序列:注意:调整后注意:调整后 平衡因子为平衡因子为 0ABBRBAALBL
20、BR现在学习的是第37页,共70页BUPT SCSTBUPTRL型平衡旋转型平衡旋转一次顺时针旋转+一次逆时针旋转AALCRCLBRALCRCLBRALCLBRCRBCABCACB-100h-1h-2h-1 h-211(-1)00(1)-1(0)危机结点危机结点现在学习的是第38页,共70页BUPT SCSTBUPT删除删除(思路同插入)v将删除结点q转化为q最多有一个孩子的情形,即若q有两个孩子,则以其中序前驱/后继结点r取代它,删除r;v若树的平衡性被破坏,利用单一/双重旋转恢复。性能性能定理:一个具有n个结点的平衡二叉树形,其高度h为log2(n+1)h1.4404log2(n+2)-0
21、.328结论:最坏情况下,AVL树的高度约为1.44log2n,而完全平衡的二叉树高度约为log2n,因此AVL树是接近最优的,其平均查找长度与log2n同数量级。现在学习的是第39页,共70页BUPT SCSTBUPT8.7 B+树与树与B-树树采用B+与B-树的意义大量数据存放在外存中,由于是海量数据,不可能一次调入内存。因此,要多次访问外存,速度慢。所以,主要矛盾变为减少访外次数。内存内存现在学习的是第40页,共70页BUPT SCSTBUPT用用二叉树组织文件,需访问外存次数太多。如:当文件的记录个数为100,000时,要找到给定关键字的记录,需访问外存17次(log100,000),
22、太长了!502510751535609020304055708095索引索引文件文件数数据据文文件件文件头,可常驻内存文件头,可常驻内存文件访问示意图:索引文件存在内存、数据文件存在盘上文件访问示意图:索引文件存在内存、数据文件存在盘上现在学习的是第41页,共70页BUPT SCSTBUPTB-树树B-树是一种平衡的多路查找树。应用于文件系统。1.定义定义一棵m 阶阶B-树树,或为空树,或为满足下列特性的m叉树:1、树中每个结点最多有m棵子树;2、若根结点不是叶子结点,则最少有两两棵子树;3、除根之外的所有非终端结点最少有 m/2 棵子树;4、所有非终端结点包含(n,A0,K1,A1,K2,K
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 数据结构 查找
限制150内