数据结构和算法
犇犇~
这个作者很懒,什么都没留下…
展开
-
图论 - 网络流
文章目录0. 网络流基本概念0. 网络流基本概念原创 2020-09-18 10:42:04 · 196 阅读 · 0 评论 -
计算几何 - 模板
文章目录1. 功能概要1.1 点/向量1.2 直线/线段2. 代码实现1. 功能概要计算几何模板实现了如下功能(将会不断更新)。1.1 点/向量==比较排序比较向量减法、加法向量叉积向量点积向量长度1.2 直线/线段通过 ax + by + c = 0 构建直线线段长度求两直线交点2. 代码实现// 计算几何模板const double EPS = 1e-8;const double PI = acos(-1.0);// 浮点数符号判定int sgn(doub原创 2020-09-16 10:08:02 · 235 阅读 · 0 评论 -
图论 - 割点(Tarjan)
文章目录定义例题定义在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合。如果某个割点集合只含有一个顶点X(也即{X}是一个割点集合),那么X称为一个割点。如果图是连通的,那么割点的定义就是,在一个无向连通图中,如果删除某个顶点后,图不再连通,则这个顶点为割点。通过Tarjan算法可以求出所有割点,时间复杂度为O(N + M)。例题洛谷P3388给定一个无向图(不一定连通),求出所有割点。#include <原创 2020-07-29 20:43:57 · 1520 阅读 · 0 评论 -
数据结构 - 字典树(Trie)
文章目录定义原理Trie结点插入操作查询操作代码定义Trie又称字典树,前缀树,通过下图可以得出Trie的特点:Trie的根结点是空的除根结点外,每个结点储存一个字母从根结点到每个字母结点的路径上的所有字母连接而成的字符串就是该结点对应的字符串每个非叶子结点一般都会被多次使用,以节省遍历的时间效率原理Trie结点Trie结点即树上每一个结点,需要维护两个信息:下一个字符指向的结点编号结点附加的值(即当前字符串附加的值)struct TrieNode { int va原创 2020-07-27 21:14:56 · 216 阅读 · 0 评论 -
字符串 - 判断子序列
定义假如字符串 s 是 t 的子序列,那么可以删除 t 中的一些字符(也可以不删除),使得剩下的字符按原来的顺序排列得到的字符串等于s。代码LeetCode 392代码比较简单,故不加赘述,记录本帖的意义在于防止日后卡壳。时间复杂度:O(N + M),N和M为两个字符串的长度。#include <iostream>#include <vector>#include <cstdio>#include <string>#include <原创 2020-07-27 11:27:11 · 1455 阅读 · 0 评论 -
图论 - 多源最短路径(Floyd)
文章目录定义原理代码定义通过Floyd-Warshall算法可以求出图中任意两点的最短路径,可以处理负权边,但不能处理负权环。时间复杂度为O(N3)O(N^3)O(N3)。原理Floyd-Warshall算法的原理是动态规划。设Di,j,kD_{i,j,k}Di,j,k为从结点iii到结点jjj的只以结点(1...k)(1...k)(1...k)为中间结点的最短路径长度。若最短路径经过点kkk,则Di,j,k=Di,k,k−1+Dk,j,k−1D_{i,j,k}=D_{i,k,k-1}+D_原创 2020-07-27 10:59:55 · 271 阅读 · 0 评论 -
数学 - 线性基
定义线性基是向量空间的一组基,通常可以解决有关异或的一些题目。通俗一点的讲法就是由一个集合构造出来的另一个集合,它有以下几个性质:线性基的元素能 相互异或 得到原集合的元素的所有 相互异或 得到的值。线性基是满足性质 1 的最小的集合。线性基没有异或和为 0 的子集。线性基中每个元素的异或方案唯一,也就是说,线性基中不同的异或组合异或出的数都是不一样的。线性基中每个元素的二进制最高位互不相同。线性基的构造方法:对原集合的每个数 x 转为二进制,从高位向低位扫描,对于第 i 位是 1 的原创 2020-07-26 22:49:33 · 435 阅读 · 0 评论 -
图论 - 单源最短路径(Dijkstra)
文章目录定义原理代码定义Dijkstra算法可以求解带权有向图上某个点到其余点的最短路径距离,不支持负权边。时间复杂度:朴素法的时间复杂度为O(N2)O(N^2)O(N2),加上堆优化以后时间复杂度为O((N+M)log2(N))O((N + M)log_2(N))O((N+M)log2(N))。原理Dijkstra的流程如下:(白点——未确定最短路径的点 黑点——已确定最短路径的点)初始化dis[src] = 0,其余结点的值为INF。找一个dis值最小的白点x,把x变成黑点。遍历x原创 2020-07-26 21:36:29 · 138 阅读 · 0 评论 -
图论 - 单源最短路径(SPFA)
文章目录定义原理代码定义SPFA算法可以求解带权有向图上某个点到其余点的最短路径距离,支持负权边。时间复杂度:如果图是随机生成的,时间复杂度为O(K·M),K是某个常数;最坏情况下时间复杂度为O(N·M)。原理用dis数组记录源点到有向图上任意一点的距离,其中源点到自身距离为0,到其他点距离为INF。将源点入队,并重复以下步骤:队首x出队。遍历所有以队首为起点的有向边(x,i),若dis[x] + w(x,i) < dis[i],则更新dis[i]。如果点i不在队列中,则i入队。若原创 2020-07-26 21:13:21 · 171 阅读 · 0 评论 -
数据结构 - 树状数组
文章目录定义定义树状数组用于解决区间上的更新、求和、求最值问题,更新和查询的时间复杂度均为O(logN)。可以看出:tree[1] = arr[1]tree[2] = arr[1] + arr[2]tree[3] = arr[3]tree[4] = arr[1] + arr[2] + arr[3] + arr[4]…将每个值写成二进制形式:可以看出:如果要求和arr[1~n],实际上就是每次将n的二进制形式最后一个1去掉,将相应的tree结点相加(如arr[0111] = t原创 2020-07-26 16:43:59 · 130 阅读 · 0 评论 -
ACM知识点大全
文章目录图论拓扑排序图论拓扑排序原创 2020-07-26 11:50:25 · 192 阅读 · 0 评论 -
最大子序和
文章目录0. 简介1. 代码0. 简介该算法可用O(N)复杂度实现。1. 代码class Solution: def maxSubArray(self, nums: List[int]) -> int: ans = int(-1e10) _sum = 0 for num in nums: _sum += num ans = max(ans, _sum) _sum =原创 2020-06-08 16:52:41 · 156 阅读 · 1 评论 -
图论 - 拓扑排序
文章目录简介代码实现方法一:广度优先搜索方法二:深度优先搜索简介给定一个包含 n 个节点的有向图 G ,我们给出它的节点编号的一种排列,如果满足:对于图 G 中的任意一条有向边 (u, v),u 在排列中都出现在 v 的前面。那么称该排列是图 G 的「拓扑排序」。根据上述的定义,我们可以得出两个结论:如果图 G 中存在环,那么不存在拓扑排序拓扑排序可能不止一种代码实现结合LeetCode的一道题目来实现拓扑排序的代码:课程表方法一:广度优先搜索思路:找出入度为0的结点,删去他引出的边原创 2020-05-17 13:01:11 · 369 阅读 · 0 评论 -
数据结构 - 优先队列
文章目录0. 简介1. 代码实现0. 简介普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出(first in, largest out)的行为特征。通常采用堆数据结构来实现。1. 代码实现本代码采用C#编写,包含优先队列的几种常用操作:入队队首元素出队队列中元素数量此外,还有一个相应的测试程序,测试算法是否正确。using System;using System.原创 2020-05-17 10:40:16 · 264 阅读 · 0 评论 -
卡特兰数
题目描述卡特兰数通常用于解如下类型的题目:一个无穷大的栈的进栈序列为1、2、3、…、n,问有多少种出栈序列?卡特兰数的公式公式的证明栈有两种操作:入栈和出栈我们建立一个坐标系:其中,橙色的线为入栈操作,使得坐标由(x, y)→(x+1, y+1)绿色的线为出栈操作,使得坐标由(x, y)→(x+1, y-1)这样,我们就可以把问题抽象为,从(0, 0)走到(2n, ...原创 2020-04-17 21:38:28 · 194 阅读 · 0 评论 -
二叉查找树(BST)
二叉查找树代码实现使用JAVA实现的二叉查找树,支持以下功能:插入元素(容器可含有重复的数)删除元素(对于相同的元素,只删除一个)查询元素的排名(val的排名定义为比val小的数的个数+1)根据排名查询元素求某个元素的前驱(val的前驱为小于val,且最大的数)求某个元素的后继(val的后继为大于val,且最小的数)获取容器的尺寸(即容器中的元素数量)判断容器是否包含某个元素...原创 2019-12-07 01:10:34 · 138 阅读 · 0 评论