搜索与遍历

绝大多数搜索的处理叫暴力搜索,或者说比较简单朴素的搜索。如果数据结构本身没有任何特点,很普通的树或者图,我们要做的一件事就是把所有节点都遍历一次。

  • 每个节点都要访问一次
  • 每个节点仅仅要访问一次
  • 对于节点的访问顺序不限
    • 深度优先搜索(Depth-First-Search)
    • 广度优先搜索(Breadth-First-Search)
    • 也可以根据现实业务场景自定义优先级优先(启发式搜索)

一、深度优先搜索(Depth-First-Search)

1.DFS访问顺序

树访问顺序
图访问顺序

2.代码模板

# 示例代码
def dfs(node):if node in visited:# already visitedreturnvisited.add(node)# process current node # ... # logic heredfs(node.left)dfs(node.right)#递归写法(常用)
visited = set()
def dfs(node,visited):visited.add(node)# process current node here.# ... for next_node in node.children():if not next_node in visited:dfs(next node,visited)# 非递归写法(模拟递归,用栈来解决)
def DFS(self,tree):if tree.root is None:return []visited, stack = [], [tree.root]while stack:node = stack.pop()visited.add(node)process(node)nodes = generate_related_nodes(node)stack.push(nodes)# other processing work...# 递归写法修改后的代码模板(推荐记忆)
visited = set()
def dfs(node,visited):if node in visited: # terminator# already visitedreturnvisited.add(node)# process current node here.... for next_node in node.children():if not next_node in visited:dfs(next_node,visited)

二、广度优先搜索(Breadth-First-Search)

1. 访问顺序

想象成水波纹,一层一层向外扩散。

访问顺序

2. 代码模板

# BFS代码(队列和循环实现)
def BFS(graph, start, end):queue = []queue.append([start])visited.add(start)while queue:node = queue.pop()visited.add(node)process(node)nodes = generate_related_nodes(node)queue.push(nodes)# other processing work...

三、搜索顺序对比

DFS与BFS对比

广度优先搜索_深度优先搜索和广度优先搜索[09]相关推荐

  1. 八数码深度优先搜索_深度优先搜索和广度优先搜索

    深度优先搜索和广度优先搜索 关于搜索&遍历 对于搜索来说,我们绝大多数情况下处理的都是叫 "所谓的暴力搜索" ,或者是说比较简单朴素的搜索,也就是说你在搜索的时候没有任何所 ...

  2. 根据邻接表求深度优先搜索和广度优先搜索_深度优先搜索/广度优先搜索与java的实现...

    度:某个顶点的度就是依附于该顶点的边的个数 子图:一幅图中所有边(包含依附边的顶点)的子集 路径:是由边顺序连接的一系列定点组成 环:至少含有一条边且终点和起点相同的路径 连通图:如果图中任一个到另一 ...

  3. 华为手机关闭蓝牙开发搜索_大众速腾手机无法搜索车载蓝牙系统维修实例

    故障现象 全新速腾1.4T,行驶才600公里,客户来站反应手机无法搜索车载蓝牙系统. 故障诊断 1. 打开收音机启动蓝牙系统,有蓝牙图标指示,用手机搜索时无法搜到车载蓝牙系统.查看右前座椅下方有蓝牙电 ...

  4. python 对 文件内容 搜索_在txt文件中搜索数据

    如果您设计了数据格式,固定宽度的列不是一个很好的格式.但如果你被他们困住了,他们很容易对付.在 首先,要分析数据:addressbook = [] with open('addressbook.txt ...

  5. rss源搜索_如何使用Google图像搜索,RSS源和更多自定义墙纸

    rss源搜索 If you're looking for a free but powerful solution to automate your Windows wallpaper switchi ...

  6. java 多关联字联合搜索_【lucene】高级搜索篇

    一,概念 1. Lucene相关排序流程 找到关键词匹配的文档集合---->文档集合每个文档计算检索相似度----->对文档集合进行排序 2. Lucene相关类 ① Query类:一个抽 ...

  7. 广度优先搜索算法和深度优先搜索算法——关于路径搜索的问题解决

    广度优先搜索算法和深度优先搜索算法 目录 广度优先搜索算法和深度优先搜索算法 深度优先搜索算法 3.升级:用栈模拟深度优先,因为栈具有==先进先出==性质 广度优先算法 理解 升级:用队列实现广度搜索 ...

  8. 广度优先搜索生成树怎么画_图的深度优先遍历与广度优先遍历以及最小生成树...

    图的深度优先遍历 题目:写出附从每个顶点出发的一次深度优先搜索遍历序列.在纸上画出遍历过程和序列,提交截图. 错误回答 从A点开始遍历:0124-01324-0134-0324-034 从B点开始遍历 ...

  9. 深度搜索和广度搜索领接表实现_数据结构与算法--图的搜索(深度优先和广度优先)...

    数据结构与算法--图的搜索(深度优先和广度优先) 有时候我们需要系统地检查每一个顶点或者每一条边来获取图的各种性质,为此需要从图的某个顶点出发,访遍图中其余顶点,且使得每一个顶点只被访问一次,这个过程 ...

最新文章

  1. Tensorflow Day17 Sparse Autoencoder
  2. Android开发之蓝牙--扫描已经配对的蓝牙设备
  3. Debian 项目不再提供 CD 格式的 ISO 镜像
  4. 【微信小程序】小程序之自定义头部导航栏背景图
  5. 归一化处理公式_特征工程连续特征的常见处理方式(含实例)
  6. 系统设计知识:系统模块结构设计知识笔记
  7. 计算机板报设计简单,计算机板报制作
  8. 计算机管理mmc无法,电脑提示mmc无法创建管理单元的问题可以这样解决
  9. LeetCode 540. 有序数组中的单一元素(Single Element in a Sorted Array) 42
  10. Xcode证书路径和缓存清理路径
  11. Linux-LNMP(pool,php-fpm慢执行日志,进程管理,open_basedir)
  12. 前端获取checkbox复选框的值 通过数组形式传递
  13. 解决键盘老是不消失实现delegate委托实例化过程
  14. 微信小程序退出到微信
  15. 逆地址解析-【高德地图】【腾讯地图】
  16. 解读Tilera怪兽级64核处理器(转)
  17. Cocos2d-Html5--打怪升级之路
  18. 007-寄存器EAX与AX,AH,AL关系
  19. 【计算机科学基础】计算理论基础
  20. python版 1032 挖掘机技术哪家强 (20分)

热门文章

  1. 飞桨PaddleOCR环境搭建
  2. UltraEdit v18及注册
  3. ibatis中使用like模糊查询
  4. 第二次作业#include stdio.h int main() { int a,b,c,d,e; printf(请输入一个不多于五位的整数:\n); scanf(%...
  5. 使用core data
  6. Editplus查找替换的正则表达式应用说明
  7. leetcode 2. 两数相加
  8. 黑马程序员Linux系统开发视频之mmap使用注意事项
  9. Linux之最常用的20条命令
  10. 人工智能时代,Python机器学习及分析工具