Graph图

Graphs

DFS包括了前序 中序 后续等搜索方式

通常用递归

BFS包括level order 是广度搜索

通常用queue(队列)

基本概念

graph

  • 顶点(节点)
  • 边(连接两个顶点)
  • 有边的两个顶点是相邻的
  • Optional:边可以有权重

path

一系列被边连接起来的顶点

cycle

首尾相同

深度搜索(DepthFirstSearch)

不停的找到最底层之前不会返回任何东西

Traversal

Tree

前序遍历(Proorder)

根节点->左节点->右节点

    1
   / \
  2   3
 / \
4   5

顺序为12453

作用:用来复制树结构

中序遍历(Inorder)

左子树->根节点->右子树

顺序为42513

作用:二叉搜索树,按升序输出所有节点值

后序遍历(Postorder)

左子树->右子树->根节点

顺序为45231

作用:删除或者计算树总和,因为他最后访问根节点

层序遍历(Level Order)

从根节点开始,每一层从左往右访问每个节点

作用:寻找树的最短路径,计算树高度

Graph

A
/ \
B   C
/ \   \
D   E   F

DFS Preorder

ABDECF

DFS Postorder

优先访问所有他的邻居节点,最后访问根节点

DEBCFA

Level order

根据距离,从相同距离的开始遍历,越来越远

如何可以多种方式到达,取最小

拓扑排序

不会真正的排序,区别于前序他会restart(回溯),探索完一个分支以后,会回溯到上一个节点,继续探索其他为访问的邻接节点

,根据多个起点,最终全部search,所有左边的节点指向右边

不能用于循环的

可以是DFS(深度优先搜索)的reverse

假设有一个图:

A → B
A → C
B → D
C → D
  • DFS访问顺序可能是:

    1. 从A开始,访问B(然后再访问D)
    2. 访问C(然后再访问D)

    这个过程中,D会被添加到结果列表中,然后是B和C,最后是A。

  • 最终结果列表为 ['D', 'B', 'C', 'A'],反转后变为 ['A', 'C', 'B', 'D'],这是一个有效的拓扑排序。

作用:

1. 任务调度

在需要按照特定顺序执行的一系列任务中,拓扑排序可以帮助确定任务的执行顺序。例如,编译多个源文件时,某些文件可能依赖于其他文件,拓扑排序可以确保在编译前先处理所有依赖的文件。

2. 课程安排

在学校中,某些课程可能要求学生在学习之前先完成其他课程。拓扑排序可以帮助安排课程顺序,以确保所有先修课程都在其后续课程之前完成。

3. 项目管理

在项目管理中,拓扑排序可以用来识别项目任务之间的依赖关系,以便确定项目的进度和资源分配。

4. 构建系统

在软件开发中,构建系统通常需要根据文件间的依赖关系进行构建。拓扑排序可以帮助确定构建的顺序,从而避免因依赖问题导致的构建失败。

5. 网络路由

在计算机网络中,拓扑排序可以用于确定数据包在网络中的最佳传输路径,以优化网络流量和资源使用。

6. 数据依赖关系管理

在数据库或其他系统中,拓扑排序可以帮助管理数据之间的依赖关系,以确保数据的完整性和一致性。

7. 算法设计

在设计某些算法时,尤其是动态规划或贪心算法,拓扑排序可以作为一种预处理步骤,用于简化问题或确定处理顺序。

广度优先搜索

相当于level order

遍历到了1,邻接4,5,把4,5都设置为true,然后加入队列里

先进先出,每次处理一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值