深度优先搜索

深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。

事实上,深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.

举例说明之:下图是一个无向图,如果我们从A点发起深度优先搜索(以下的访问次序并不是唯一的,第二个点既可以是B也可以是C,D),则我们可能得到如下的一个访问过程:A->B->E(没有路了!回溯到A)->C->F->H->G->D(没有路,最终回溯到A,A也没有未访问的相邻节点,本次搜索结束).

简要说明深度优先搜索的特点:每次深度优先搜索的结果必然是图的一个连通分量.深度优先搜索可以从多点发起.如果将每个节点在深度优先搜索过程中的"结束时间"排序(具体做法是创建一个list,然后在每个节点的相邻节点都已被访问的情况下,将该节点加入list结尾,然后逆转整个链表),则我们可以得到所谓的"拓扑排序

优先深度搜索判断曲线相交_程序员必知的十大基础实用算法之-DFS(深度优先搜索)...相关推荐

  1. 程序员必知的十大基础实用算法及其讲解

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个项目要Ο(nlogn)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比 ...

  2. 程序员必须知道的10大基础实用算法及其讲解

    2014-06-17 WEB开发者 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但 ...

  3. 【随笔】游戏程序开发必知的10大基础实用算法及其讲解

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n logn)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常 ...

  4. 《转》程序员必须知道的10大基础实用算法及其讲解

    来源: Cricode  发布时间: 2014-06-19 08:27  阅读: 2018 次  推荐: 8   原文链接   [收藏] 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算 ...

  5. 计算机系程序员必学的十大基础算法

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...

  6. java软件学习网站_Java程序员必看的十大学习网站

    无论是作为资深Java程序员,还是刚刚Java入门的小白,都不可缺少平时学习的网站.以下小编收集了Java程序员必看的十大学习网站,这些网站可以提供信息.以及一些很棒的讲座 , 还能解答一般问题.面试 ...

  7. java 字符串转骆驼命名_程序员必知的Java基础:5条命名规范和8种数据类型归纳...

    原标题:程序员必知的Java基础:5条命名规范和8种数据类型归纳 一.Java命名规范 任何一种语言都有一套针对于语言自身的命名的规范,java也不例外.接下来,我就列举一下java对命名的规范. 下 ...

  8. python从键盘输入列表有缺陷_程序员必知的Python陷阱与缺陷列表-阿里云开发者社区...

    代码看起来可以工作,但不是以你"想当然""的方式.如果一段代码直接出错,抛出了异常,我不认为这是陷阱.比如,Python程序员应该都遇到过的"UnboundLo ...

  9. 程序员必看的十大电影

    原文来自:http://www.aqee.net/top-10-movies-for-programmers/  中间加了些我自己的看法. 本文编者注:本人是个爱看电影的娃,下面的十大电影只有第八部第 ...

最新文章

  1. php get memory,PHP memory_get_usage 和 memory_get_peak_usage获取内存的区别
  2. python中语法错误-python冒号语法错误python中如何创建字典
  3. mysql--字段--索引的增删改查
  4. mysql 实时聚合分析_mysql滑动聚合/年初至今聚合原理与用法实例分析
  5. MySql 查询时 为NULL 设置默认值
  6. 10、MySQL常用运算符概述
  7. sqlserver、oracle数据库排序空值null问题解决办法
  8. 【C/C++多线程编程之三】创建pthread线程
  9. CF1042E Vasya and Magic Matrix 期望dp + 推公式
  10. (并查集 建立关系)Parity game -- POJ -1733
  11. Tomcat—启动时控制台显示文字的颜色
  12. 机器学习之数据预备、清洗与特征工程
  13. Java 反射机制:(三)类的加载
  14. matlab 网状图,Matlab如何画3维网状图
  15. 【书单】程序设计好书推荐
  16. S3C2440 I2C总线控制
  17. fusioncharts的属性介绍
  18. 设计模式(四)责任链模式——责任链模式结构
  19. mc服务器修改别人领地权限,我的世界领地权限设置 领地指令大全
  20. Vcastr 2.2 flv 网络播放器

热门文章

  1. php写网页6,基于ThinkPHP6+AdminLTE框架开发的响应式企业网站CMS系统PHP源码,ThinkPHP6开发的后台权限管理系统...
  2. Microbiome:污水处理厂的微型真核肠道寄生虫:多样性、活性和去除
  3. 【LorMe云讲堂】蔡枫:真菌的耐盐机制
  4. NAR:浙大陈云/马忠华团队揭示病原真菌组蛋白H3K27甲基化识别新机制
  5. Aquaculture:天津农科院谢凤行团队揭示菌群预测功能与实际代谢特性的相关性...
  6. MPB:基于BIOLOG的微生物群落功能分析
  7. 大多数人都不知道,人类基因组正在衰败
  8. NRM: 地球上细菌和古菌的生物膜丰度
  9. makefile经验笔记
  10. R语言使用party包中的ctree函数构建条件推理决策树的流程和步骤、条件推理决策树是传统决策树的一个重要变体、条件推理树的分裂是基于显著性测试而不是熵/纯度/同质性度量来选择分裂