实用搜索算法基础.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 实用搜索算法基础 石志国 大纲 ◎ 二叉搜索树; ◎ 图的深度优先搜索、广度优先搜索; 6.1 树的搜索 搜索是进行数据处理最常见的一种运算。 所谓“搜索”:是指在数据集合中寻找满足某种特定条件的数据对象。 由于搜索对象是一个数据的集合(称为搜索表),除了执行搜索外,还可能执行其它操作,例如添加新元素,这样就可能会改变搜索表的结构。 因此,搜索表可以区分为静态搜索表(表的结构不发生改变)和动态搜索表两种情况。 常见的适用于静态搜索表的搜索算法有顺序搜索、折半搜索、Fibonacci搜索等。适用于动态搜索表的搜索算法有二叉搜索算法、平衡二叉搜索算法等。 6.1 树的搜索 当搜索表的数据很大时,如果一次无法将整个搜索对象都读入内存时,通常只将数据对象的关键字(用于表示搜索条件的数据对象的属性)和它的存放位置信息存放到内存 这样就可以在内存中实施对大量的数据对象的搜索操作。 存储数据对象的关键字和它的存放位置信息的结构称为索引。基于索引的搜索在数据库管理系统中应用非常广泛。 6.1.1 二叉搜索树搜索 二叉搜索树(Binary Search Tree)是一棵空树,或具有如下4个特征的一棵非空的二叉树: ① 每个元素有一个关键值,并且没有任意两个元素具有相同的关键值。因此,所有的关键值都是惟一的。 ② 根结点左子树的关键值(如果有的话)小于根结点的关键值。 ③ 根结点右子树的关键值(如果有的话)大于根结点的关键值。 ④ 根结点的左右子树也都是二叉搜索树。 6.1.1 二叉搜索树搜索 (1)搜索操作 首先从根结点开始,如果根结点为空,那么搜索树不包含任何元素,搜索失败。 否则,将待搜索值k与根结点的关键值相比较,如果 k 小于根结点的关键值,那么就不必搜索右子树中的元素,只要在左子树中搜索即可。 如果 k 大于根结点的关键值,则正好相反,只需在右子树中搜索即可。如果 k 等于根结点的关键值,则搜索成功,搜索操作终止。 6.1.1 二叉搜索树搜索 (2)插入操作 对于动态搜索表,在搜索不成功的情况下,需要插入关键字等于给定值的记录。 从搜索的过程容易得出插入的操作过程为:若二叉搜索树为空树,则新插入的结点为根结点;否则,新插入的结点必为一个新的叶子结点,其插入位置由搜索过程中得到。 6.1.1 二叉搜索树搜索 (3)删除操作 和插入相反,删除需要在搜索成功之后才能进行,并且要求在删除二叉搜索树上某个结点之后,仍然保持二叉搜索树的特性。删除操作可分如下4种情况: ① 被删除的结点是叶子结点,只需直接删除其双亲结点指向它的指针,然后释放该结点即可。 ② 被删除的结点只有左子树。只需将该结点的左子结点代替它的位置,再释放该结点即可。 ③ 被删除的结点只有右子树。只需将该结点的右子结点代替它的位置,再释放该结点即可。 ④ 被删除的结点既有左子树,也有右子树。只需将该元素替换为它的左子树中的最大元素或右子树中的最小元素。 6.2 图的搜索 在图中实现的最基本的操作就是搜索从一个指定顶点可以到达哪些顶点。确切地讲,图的搜索是指从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。 图的搜索操作是图的一种基本操作,图的许多复杂操作 例如:求解图的连通性问题、拓扑排序、关键路径等都是建立在遍历操作的基础之上的。 常用的搜索图的的方法有深度优先搜索和广度优先搜索两种方法。它们对无向图和有向图都适用。在以后的讨论中,除非特别说明,都假设图是连通的,即可以从一个顶点出发找到其它所有顶点。 深度优先类似于二叉树的前序遍历 广度优先类似于二叉树的按层遍历 6.2.1 深度优先搜索 深度优先搜索(Depth Fisrst Search,简称DFS)类似于树的先根遍历,是树的先根遍历的推广。该搜索方法常用于游戏软件开发中。 深度优先搜索的核心思想是在搜索到尽头时,用栈记住下一步的走向。 假设初始状态是图中所有顶点未曾被访问,则深度优先搜索可从图中某个顶点v出发,访问此顶点,然后依次从 v 的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。 6.2.1 深度优先搜索 无向网图从顶点V0开始进行深度优先搜索。在访问顶点V0之后,选择第一个邻接顶点V1。因为V1未曾访问,则访问V1并从它出发进行搜索。因为V1的第一个邻接点V0已经访问,则查找其下一个邻接点V2,发现V2未曾访问,则访问V2并从V2开始出发进行搜索。以此类推,继续搜索访问V3,V5,V4。由此,得到顶点访问序列: V0?V1?V2?V3?V5?V4 显然这是一个递归的过程。为了在

文档评论(0)

3344483cc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档