第六章 基本检索与周游方法.ppt
《第六章 基本检索与周游方法.ppt》由会员分享,可在线阅读,更多相关《第六章 基本检索与周游方法.ppt(42页珍藏版)》请在麦多课文档分享上搜索。
1、第六章 基本检索与周游方法,问题描述 许多涉及到二元树、树和图的问题 涉及问题中数据结点的访问和处理 有的问题需要访问结构中所有结点,有的访问结构的部分结点。 本章介绍的方法将适用于树、二元树,有些方法可以用于图 、树、二元树,6.1 一般方法,1.检索与周游检索:以某种方法检查给定的数据对象,找出满足某些给定性质的结点的过程称为检索 周游:当检索过程必须检索到数据对象的每一个结点时,则该检索过程称为周游访问结点:当算法对一个结点的信息段进行处理时,称该结点被访问。结点被访问可以是结点被打印、或作某种处理,2. 二元树周游(遍历) 1)周游次序 在二元树的周游中,以D、L、R分别代表访问结点的
2、信息段、访问左子树、访问右子树。则可能的顺序有: LDR:中根次序周游(中根遍历) LRD:后根次序周游(后根遍历) DLR:先根次序周游(先根遍历) RDL:逆中根次序周游 RLD:逆后根次序周游 DRL:逆先根次序周游,2)二元树周游算法 中根次序周游算法6.1 中根次序周游的递归表示procedure INORDER(T)/T是一棵二元树。T的每个结点有三个信息段:LCHILD,DATA,RCHILD/if T0 then call INORDER(LCHILD(T)call VISIT(T)call INORDER(RCHILD(T)endifend INORDER,先根次序周游算法6
3、.2 先根次序周游的递归表示procedure PREORDER(T)/T是一棵二元树。T的每个结点有三个信息段:LCHILD, DATA,RCHILD/if T0 then call VISIT(T)call PREORDER(LCHILD(T)call PREORDER(RCHILD(T)endifend PREORDER,后根次序周游算法6.3 后根次序周游的递归表示procedure POSTORDER(T)/T是一棵二元树。T的每个结点有三个信息段:LCHILD,DATA,RCHILD/if T0 then call POSTORDER(LCHILD(T)call POSTORDER
4、(RCHILD(T)call VISIT(T)endifend PREORDER,中根次序周游:FDHGIBEAC 先根次序周游: ABDFGHIEC 后根次序周游: FHIGDEBCA,注:一棵二元树可由中根遍历序列先根遍历序列、或中根遍历序列后根遍历序列唯一确定。但不能由先根遍历序列后根遍历序列唯一确定。如已知一棵二元树的中根遍历次序是:DGBEAFHC先根遍历次序是:ABDGECFH则这棵二元树唯一确定如下:,定理6.1 当输入的树T有n0个结点时,设t(n)和s(n)分别表示这些周游算法中的任意一个算法所需要的最大时间和空间。如果访问一个结点所需要的时间和空间是(1),则t(n)=(n
5、), s(n)=(n)。 证明: 时间:由于已知访问一个结点所需时间是(1),故可用常数c1限界。设T的左子树中的结点数是n1,则t(n)有:t(n)=maxn1t(n1)+t(n-n1-1)+c1 n1其中,t(0)c1。归纳法证明t(n)c2n+c1,其中c2是一使得c22c1的常数。1)当n=0时,成立2)假定当n=0,1,m-1时均成立。则当n=m时有,设T是一棵有m个结点的树,T左子树结点数为n1,则t(n)maxn1t(n1)+t(n-n1-1)+c1maxn1c2n1+c1+c2(n-n1-1)+c1+c1maxn1c2n+3c1-c2c2n+c1同理,存在c2和c1有t(n)c
6、2n+c1。所以t(n)=(n) 空间:若T的深度为d,则所需空间为(d), dn,所以s(n)=(n)。,3. 树的周游1) 树的子树顺序无序有序2)森林F的周游 树的先根次序周游A.若F为空,则返回B.访问F的第一棵树的根C.按树先根次序周游F的第一棵树的子树D.按树先根次序周游F的其它树 树的中根次序周游 树的后根次序周游,树转换成二元树方法: 设有一棵树T(它的根是T1),人为安排它的子树有序且设为T11,T12,T1K。用T1做二元树的根,T11做T1的左子树,然后T1i做T1i-1的右子树,2ik。,设T是由森林F转换成的二元树,则:T的先根次序周游相当于按树先根次序周游访问FT的
7、中根次序周游相当于按树中根次序周游访问F对T的后根次序周游无类似的自然对应,4. 图的检索和周游 4.1 宽度优先检索和周游 1) 宽度优先检索 从结点v开始,给v标上已到达(或访问)标记此时称结点v还没有被检测,而当算法访问了邻接于某结点v的所有结点时,称该结点被检测了。 访问邻接于v且尚未被访问的所有结点这些结点是新的未被检测的结点。将这些结点依次放置到一未检测结点表(队列Q)中(末端插入) 。 标记v已被检测。 若未检测结点表为空,则算法终止;否则 从未检测结点表的表头取一结点作为下一个待检测结点,重复上述过程。,算法6.6 宽度优先检索算法procedure BFS(v)/宽度优先检索
8、G,它从结点v开始。所有已访问结点被标记为VISITED(i)=1。/VISITED(v)1;uv /VISITED(n)是一个标示数组,初始值 VISITED(i)=0, 1in /将Q初始化为空 /Q是未检测结点的队列/loopfor 邻接于u的所有结点w doif VISITED(w)=0 then /w未被检测/call ADDQ(w,Q) /ADDQ将w加入到队列Q的末端/VISITED(w)1 /同时标示w已被访问/endifrepeatif Q 为空 then return endifcall DELETEQ(u,Q) /DELETEQ取出队列Q的表头,并赋给变量u/repeat
9、end BFS,定理6.2 算法BFS可以访问由v可到达的所有结点 证明:设G=(V,E)是一个(有向或无向)图,vV。归纳法证明定理结论正确。记d(v,w)是由v到达某一可到达结点w(wV)的最短路径长度 若d(v,w)1,则显然这样的所有w都将被访问。 假设对所有d(v,w)r的结点都可被访问。则当d(v,w)=r+1时有:设w是V中d(v,w)=r+1的一个结点设u是从v到w的最短路径上紧挨着w的前一个结点。则有 d(v,u)=r。所以,u可通过BFS被访问到。假设uv,且r1。根据BFS的处理规则,u将在被访问之前的某个时刻被放到未被检测结点队列Q上,而在另一时刻u将从队列Q中移出。此
10、时,所有邻接于u且尚未被访问的结点将被访问。若结点w在这之前未被访问,则此刻将被访问到。由上,定理得证,定理6.3 设t(n,e)和s(n,e)是算法BFS在任一具有n个结点和e条边的图G上所花的最大时间和最大附加空间。 若G由邻接表表示,则t(n,e)=(n+e)和s(n,e)=(n)。 若G由邻接矩阵表示,则t(n,e)=(n2)和s(n,e)=(n) 证明:1)空间分析根据算法的处理规则,结点v不会放到队列Q中。结点w,wV且wv,仅在VISITED(w)=0时由ADDQ(w,Q)加入队列,并置VISITED(w)=1,所以每个结点(除v)至多只有一次被放入队列Q中。至多有n-1个这样的
11、结点考虑,故总共至多做n-1次结点加入队列的操作。需要的队列空间至多是n-1。所以s(n,e)=(n)(其余变量所需的空间为(1)当G是一个具有v与其余的n-1个结点相连的图,则邻接于v地全部n-1个结点都将在“同一时刻”被放在队列上(Q至少应有(n)的空间)。同时,VISITED(n)本身需要(n) 的空间。所以s(n,e)=(n)这一结论与使用邻接表或邻接矩阵无关。,2) 时间分析 G采用邻接表表示判断邻接于u的结点将在d(u)时间内完成:若G是无向图,则d(u)是u的度;若G是有向图,则d(u)是u的出度。 所有结点的处理时间:(d(u)=(e)。注:嵌套循环中对G中的每一个结点至多考虑
12、一次。 VISITED数组的初始化时间:(n) 算法总时间:(n+e)。 G采用邻接矩阵表示 判断邻接于u的所有结点需要的时间:(n) 所有结点的处理时间:(n2) 算法总时间:(n2) 如果G是一个由v可到达所有结点的图,则将检测到V中的所有结点,所以上两种情况所需的总时间至少应是(n+e)和(n2)。所以,t(n,e)=(n+e) 使用邻接表表示或, t(n,e)=(n2) 使用邻接矩阵表示,2) 宽度优先图周游算法6.7 宽度优先图的周游算法procedure BFT(G,n)/G的宽度优先周游/int VISITED(n)for i1 to n do VISITED(i)0 repea
13、tfor i1 to n do /反复调用BFS/if VISITED(i)=0 then call BFS(i) endifrepeatend BFT注:若G是无向连通图或强连通有向图,则一次调用BFS即可完成对T的周游。否则,需要多次调用。,图周游算法的应用判定图G的连通性:若调用BFS的次数多于1次,则G为非连通的生成图G的连通分图:一次调用BFS中可以访问到的所有结点及连接这些结点的边构成一个连通分图。无向图自反传递闭包矩阵A*宽度优先生成树向前边:BFS中由u达到未访问结点w的边(u,w)称为向前边。记T是BFS中所处理的所有向前边集合。宽度优先生成树:若G是连通图,则BFS终止时,
14、T构成一棵生成树。,定理6.4 修改算法BFS,在第1行和第6行分别增加语句T和TT(u,w)。修改后的算法称为BFS*。若v是无向图中任一结点,调用BFS*,算法终止时,T中的边组成G的一棵生成树。procedure BFS*(v)VISITED(v)1;uv T将Q初始化为空loopfor 邻接于u的所有结点w doif VISITED(w)=0 then /w未被检测/TT(u,w)call ADDQ(w,Q) /ADDQ将w加入到队列Q的末端/VISITED(w)1 /同时标示w已被访问/endifrepeatif Q 为空 then return endifcall DELETEQ(
15、u,Q) /DELETEQ取出队列Q的表头,并赋给变量u/repeatend BFS*,证明:若G是n个结点的连通图,则这n个结点都要被访问。除起始点v以外,其它n-1个结点都将被放且仅将被放到队列Q上一次,从而T将正好包含n-1条边,且这些边是各不相同的。即T是关于n个结点n-1边的无向图。同时,对于连通图G,T将包含由起始结点v到其它结点的路径,所以T是连通的。则T是G的一棵生成树。注:对于n个结点且正好有n-1条边的连通图是一棵树。,4.2 深度优先检索和周游 1) 深度优先检索从结点v开始,首先给v标上已到达(或访问)标记,同时中止对v的检测,并开始对邻接于v且尚未被访问的结点u检测。
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 基本 检索 周游 方法 PPT
