摘要: 二分 在一个区间内部去二分答案,在选择二分出的两个区间的时候都选择答案所在区间进行下一步处理, 这样可以保证区间缩小了一半并且答案也在该区间内,当区间长度为1时,区间内的数就是答案 二分的本质: 如果有单调性一定可以二分,但是可以二分的题目不一定有单调性。 边界:即定义某种性质,将整个区间一分为二, 阅读全文
posted @ 2021-04-04 17:24 晓尘 阅读(313) 评论(0) 推荐(0)
摘要: 二分图就是可以把所有点划分到两边去,使得所有边都是在集合之间的,而集合内部没有边。如下图: 1.1 染色法 时间复杂度:O(n+m) 用来判断一个图是不是二分图。染色法就是一个很简单的DFS。 图论的一个性质:一个图是二分图,当且仅当这个图可以被染色。 一个图是二分图,当且仅当图中不含奇数环。环是从 阅读全文
posted @ 2021-04-04 13:39 晓尘 阅读(214) 评论(0) 推荐(0)
摘要: 1、最小生成树 对应的图都是无向图,有向图一般不会考 一般稠密图直接朴素版Prim算法,因为短。 稀疏图就直接Kruskal算法。 堆优化版本的Prim算法一般不常用。 最下生成树有什么用:如我们有n个城市,在不同城市之间修路,让这些城市可以相互连通,则修路的最小总长度是多少。 1.1 朴素Prim 阅读全文
posted @ 2021-04-04 13:35 晓尘 阅读(158) 评论(0) 推荐(0)
摘要: 可以分为两类: 单元最短路 求从一个点到其他所有点的最短距离,如从1号点到n号点的最短路 多源汇最短路 起点和终点数量不确定 n表示图中点的数量,m表示图中边的数量,一般m~$n^2$是稠密图 朴素Dijkstra适合稠密图,如边数比较多和$n^2$一个级别用朴素Dijkstra m和n是一个级别, 阅读全文
posted @ 2021-04-04 13:28 晓尘 阅读(297) 评论(0) 推荐(0)
摘要: 1、拓扑排序 有向图的拓扑序列就是图的宽度优先遍历的应用 拓扑序列是针对有向图来说的,无向图是没有拓扑序列的。 存在一个序列A,对于图中的每条边(x,y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。 举例:有如下一个有向图: A = (1,2,3)就是一个拓扑序列,原因如下: 首先看第一条 阅读全文
posted @ 2021-04-04 13:12 晓尘 阅读(480) 评论(0) 推荐(0)
摘要: 1、树和图的存储 有两种存储方式,树是一种特殊的图,无环连通图。所以只讨论图的存储方式。 图分为有向图和无向图。无向图a—b可以看作有向图a$\to$b和b$\to$a,所以无向图也可以看作一种特殊的有向图。 这样只需要考虑有向图就可以了。 1.1 邻接矩阵存储 其实就是开了一个二维数组。g[a,b 阅读全文
posted @ 2021-04-04 13:11 晓尘 阅读(265) 评论(0) 推荐(0)
摘要: 1、深度优先搜索DFS 不管哪条路一定要走到头,然后再往回走,往回退一步之后看看还有没有没走过的路,如果有,那么就继续对没走过的路进行DFS,如果没有就再退一步。 算法思路奇怪或者对空间要求较高用DFS。 DFS俗称暴力搜索,最重要的就是把他的顺序想明白。用一个什么样的顺序去遍历所有方案。BFS搜索 阅读全文
posted @ 2021-04-04 13:03 晓尘 阅读(210) 评论(0) 推荐(0)