![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
文章平均质量分 65
实名吃香菜
想学数学
展开
-
基础算法---排序
基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。复杂度:时间复杂度O(nlogn)原创 2023-12-26 21:15:55 · 494 阅读 · 0 评论 -
基础算法---差分
说明:二维差分是指对于一个n*m的矩阵a,要求支持操作pro(x1,y1,x2,y2,a),表示对于以(x1,y1)为左上角,(x2,y2)为右下角的矩形区域,每个元素都加上常数a。// 假设数组a的差分数组为b,即b[i] = a[i] - a[i - 1], 当i = 0时,b[i] = a[i]// 给以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵中的所有元素加上c。原创 2023-10-05 10:12:22 · 210 阅读 · 1 评论 -
基础算法---前缀和
preSum[ i] [ j] = preSum[i - 1] [ j] + preSum[ i] [ j - 1] - preSum[i - 1] [ j - 1] + a[ i] [ j] (当i,j= 0时,preSum[ i] [ j] = a[ i] [ j]) || preSum[i] = preSum[i - 1] + a[i] (当i = 0时,preSum[i] = a[i]) |// 预处理之后,求[l, r]的区间和为preSum[r] - preSum[l - 1];原创 2023-10-05 10:10:35 · 191 阅读 · 0 评论 -
图论---拓扑排序
如果图中有入度为 0 的点,就把这个点删掉,同时也删掉这个点所连的边。一直进行上面的处理,如果所有点都能被删掉,则这个图可以进行拓扑排序。重复上面两步,直到所有顶点都输出,拓扑排序完成,或者图中不存在入度为零的点,此时说明图是有环图,拓扑排序无法完成,陷入死锁。(有向无环图)上的节点进行排序,使得对于每一条有向边u->v,u 都在v之前出现。for (auto v : G[u]) { // 删除与节点u直接相连的边。if (--in[v] == 0) { // 出现新入度为零的节点入队。原创 2023-10-04 16:08:21 · 679 阅读 · 0 评论 -
图论---图的遍历
visited[tx][ty]) { // 如果节点没被访问过。i++) { // 开始想当前节点的四个方向左右上下去遍历。// 队列添加该节点为下一轮要遍历的节点。// 只要加入队列,立刻标记为访问过的节点。que.empty()) { // 开始遍历队列里的元素。// 起始节点加入队列。原创 2023-10-04 15:03:29 · 591 阅读 · 0 评论 -
图论---图的存储
/ j为a的出边, v为权重。// ne 数组:由于是以链表的形式进行存边,该数组就是用于找到下一条边;// he 数组:存储是某个节点所对应的边的集合(链表)的头结点;// 代表从 a 到 b 有一条权重为 c 的边。// 为每一条边进行编号。// e 数组:用于访问某一条边指向的节点;// w 数组:用于记录某条边的权重为多少。g[a][b] 存储边a->b的距离。// 又叫做链式向前星存储(头插法)// 添加一条a到b的边,权重为c。原创 2023-10-04 15:01:26 · 516 阅读 · 3 评论 -
图论---最小生成树问题
在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。解决最小生成树问题一般有两种算法:Kruskal算法和Prim算法。原创 2023-10-03 09:59:21 · 696 阅读 · 0 评论 -
图论---最短路径问题
原理:Floyd本质上是一个动态规划的思想,每一次循环更新经过前k个节点,i到j的最短路径。用途:Floyd算法是求解多源最短路时通常选用的算法,经过一次算法即可求出任意两点之间的最短距离,并且可以处理有负权边的情况(但无法处理负权环时间复杂度为O(n3)。代码框架:// 代码初始化,共有n个顶点i < n;i++){j < n;// 将每条边的值加入到dis中去,这里不再赘叙// Floyd算法k < n;k++){i < n;i++){j < n;原创 2023-10-03 09:55:53 · 1643 阅读 · 0 评论