
算法学习笔记
文章平均质量分 50
算法学习笔记
Shanhj
无
展开
-
组合博弈算法笔记
简短地记录了一下自己对SG函数的理解,省略了一些组合博弈的内容原创 2022-02-16 15:23:33 · 271 阅读 · 0 评论 -
浙大数据结构-树的同构判定 采用不同的方法 判断父节点是否相同
两棵树如果是同构的,无论左右子树怎么旋转,子树的父节点是不会改变的,那么可以判断两棵树所有节点的父节点是否来判断是否同构。#include <bits/stdc++.h>using namespace std;struct node//节点{ char data=0;//节点自己的字母 char fa=0;//父节点的字母}nd1[11],nd2[11];bool cmp(node a,node b){ return a.data<b.data;原创 2021-08-02 13:13:05 · 169 阅读 · 0 评论 -
LCA 最近公共祖先 朴素法、倍增法
简单介绍LCA的求法 和一道例题代码原创 2022-01-30 18:46:36 · 646 阅读 · 0 评论 -
图论常用算法记录
目录欧拉通路与欧拉回路问题基本概念欧拉通路/回路的判定无向图通路无向图回路有向图通路有向图回路算法实现并查集判断是否有回路Fleury 算法求无向图回路(在已经确定存在回路的情况下求路径)通路的路径求法例题欧拉通路与欧拉回路问题基本概念欧拉通路:通过图中所有边一次且仅一次行遍所有顶点的通路欧拉回路:通过图中所有边一次且仅一次行遍所有顶点的回路欧拉图:具有欧拉回路的图半欧拉图:具有欧拉通路而无欧拉回路的图欧拉通路/回路的判定无向图通路除了起点和终点外都是偶度点无向图回路全都是偶度点有向原创 2021-10-30 16:41:08 · 710 阅读 · 0 评论 -
区间信息的维护与查询(稀疏表、线段树等) 简单介绍
目录RMQ问题-稀疏表线段树1.RMQ问题-稀疏表范围最小值问题(RMQ):给出一段区间,求这段区间上的最值。采用线段树的话,建树的复杂度为O(n),而查询的复杂度为O(logn)。采用稀疏表的话,预处理的复杂度为O(nlogn),但是查询的复杂度可以降到O(1)。如果查询的次数较多,采用稀疏表更合适,并且稀疏表的代码量远小于线段树。下面进行稀疏表的介绍:稀疏表采用类似动态规划的方式,用dp[i][j]表示从第i个数据开始,长度为2 ^ j的区间中的最值。当查询区间[a,b]时,令le原创 2021-09-08 18:35:27 · 307 阅读 · 1 评论 -
单源最短路径的堆优化+链式前向星
以一道洛谷的例题来介绍了使用堆优化的迪杰斯特拉算法,并且简单的介绍了一下链式前向星的存边方式原创 2021-09-07 15:38:28 · 242 阅读 · 0 评论 -
次小生成树个人理解 prime和kruskal两种算法+PTA例题
看网上关于次小生成树的时候一直有点不理解max[i][j]数组的用处,直到自己通过画图才得以理解。首先讲讲如何求次小生成树,也就是最小生成树之外的最优解。大概的方法就是从未使用的边中(没有被最小生成树包括的边)选一条加入最小生成树,那么肯定会形成一个环了,然后从环中减去最大的一条边即可。而这时候max数组的作用就体现出来了,max[i][j]保存的是从i到j的路径中最长的那一小段路径长度,那么在构成环的时候减去环中除了新边外最大的一条边的时候就很方便了。然后只要遍历所有未使用的边,重复以上步骤,找到最小的原创 2021-08-09 18:34:52 · 410 阅读 · 0 评论 -
2-SAT问题笔记+POJ3648例题题解+3道例题
POJ3648题目链接2-SAT简介要解释2-SAT问题可以借用上面这道题,一个人只能坐在左侧或是右侧,如果一个人坐在左侧,那么就可以推出这个人不坐在右侧。题目中还有一个限制条件就是丈夫和妻子不能坐在同一侧,因此丈夫坐在左侧可以推出妻子坐在右侧,像这种非左即右,只有一个对立面的问题就是2-SAT问题。解决这种题的做法就是建图,把各种状态看成一个结点,比如丈夫坐在左侧是一个结点,丈夫坐在右侧又是一个结点,这道题有n对夫妇,那么就有4n个结点。如果一种状态可以推得另一种状态成立,那么就在两个状态之间连一条原创 2021-10-07 15:46:03 · 178 阅读 · 0 评论 -
tarjan算法笔记 例题:【NOIP2015】信息传递
推荐b站一位up主的讲解视频,一共2p,讲得很清楚求强连通分量有两种常用方法:1、tarjan 2、kosaraju算法kosaraju算法是进行正反两次dfs,比较简单,这里不做介绍。tarjun算法思路介绍tarjan算法也是用dfs,用dfn数组来记录一个点被访问到的顺序,用low数组来记录这个点属于哪个强连通分量里(也可以理解为这个强连通分量里最早被访问的点的dfn值)在dfs的同时还要用一个栈来压入被访问的点,以及一个vis数组来记录某个点是否位于栈中(毕竟不可能将栈中的点一个个弹出来判原创 2021-10-05 18:15:24 · 177 阅读 · 0 评论 -
KMP算法简单介绍
KMP算法最大的难点的难点在于如何处理P数组。P[i]表示长度为i的字符串中最长且相等的的前缀和后缀,比如abbab中开头的ab和末尾的ab相等,那么p[5]=2。先给出一段预处理的代码,从代码来分析做法:void prework(char a[], int m) //a数组从下标1开始存储字符,m表示字符个数{ p[1] = 0; int j = 0; for (int i = 1; i < m; i++) { //末尾新的字符和上一轮中最长前原创 2021-10-02 17:09:27 · 164 阅读 · 0 评论 -
康托展开+两道例题
简介康托展开用于计算某个字符串在所有字典序中的位置。常用于状态压缩和哈希。公式一个字符串A1,A2,…,An,假设都是数字0-9这个字符串在所有字典序中的位置为:A1*(n-1)!+A2*(n-2)!+...+An*(n-n)!如果把0123456789带入...原创 2021-10-02 15:21:12 · 209 阅读 · 0 评论 -
数论专题
欧几里得逆元求法,中国剩余定理加拓展素数筛(欧拉筛,线性复杂度)快速幂 二进制转换为十进制思想原创 2021-09-10 15:48:23 · 118 阅读 · 0 评论 -
计算几何专题
涉及三角形的一些运算求两直线交点向量叉积的应用原创 2021-09-10 15:45:37 · 119 阅读 · 0 评论 -
动态规划专题
自己写的紫书上一些题目的题解:P269-uva1347 递归P278-uva10003 四边形不等式优化原创 2021-09-04 18:33:32 · 82 阅读 · 0 评论