算法学习
算法学习过程中的一些其他问题
FoolsSHAO
蒟蒻一只~
展开
-
高精度加减乘除(大数的加减乘除)
听完y总的高精度加减乘除后记录。其中的乘法和除法只是有一方是大数,加减法是大数加减法。高精度加法#include <iostream>#include <string>#include <vector>using namespace std;string a, b;vector<int> A, B;vector<int> add(vector<int>& A, vector<int>&原创 2020-12-07 19:20:51 · 188 阅读 · 2 评论 -
从二分查找到lower_bound和upper_bound
今天听了y总的二分查找模板。做模板题目的时候,发现找一个数字在有序数组中出现的最早和最后一个,这不就是STL中的lower_bound和upper_bound么。二分查找模板模板1int l = 0, r = n - 1;while(l < r){ int mid = l + r >> 1; if(a[mid] >= find) r = mid; else l = mid + 1;}//对应着lower_bound,找到数组中某个元素第一次出现的位置。这种情原创 2020-11-25 19:23:21 · 249 阅读 · 0 评论 -
LCS算法(Longest Common Sequence)
LCS算法Longest Common Sequence假设存在两个字符串序列 X 和 Y$ X = {x_1, x_2, …, x_n}$$ Y = {y_1, y_2, …, y_n}$考虑两个序列最后一个元素是否相等,可以得到LCS(xn,ym)={LCS(xn−1, ym−1)+1,xn=ymmax(LCS(xn−1,ym), LCS(xn,ym−1)),xn!=ymLCS(x_n, y_m) = \begin{cases}LCS(x_{n-1},\ y_{m-原创 2020-11-05 15:55:47 · 548 阅读 · 0 评论 -
算法中的数学问题(基础篇)
最近在准备算法比赛,稍微的总结了一下算法中比较常用到常见的数学问题,分享给大家。1.最大公约数int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }2.最小公倍数int lcm(int a, int b) { return a / gcd(a, b) * b; // d = gcd(a,b) a*b / d 就是最小公倍数 // ,为了防止计算溢出 改成原创 2020-09-07 14:45:01 · 596 阅读 · 0 评论 -
树的直径(数学推导)
这篇写了重点在于数学推导,单纯的说总感觉有些情况没考虑。所以特地推导一下树的直径两次dfs求法可行条件:现有树tree有直径ab(直径就是树的最长路径)推论:从树上任意一点能达到的最远的一个点一定是直径的端点。反证法:假设推论的反面成立,从树上任意一点达到的最远一个点不是直径的端点...原创 2020-08-18 10:23:15 · 176 阅读 · 0 评论 -
无向图的环路问题
1.无向图求是否存在环路Union-find算法实现判断环路具体做法举个例子现在有无向图存在环路 0-1-2-0有三组关系连接 0-1 0-2 1-2用一个集合加入每个关系的点0-1 {0, 1}0-2 {0,1,2}1-2 两个点在集合中都存在,说明存在环路关系无重复(无向图)#include <iostream>#include <set>using namespace std;int main() { int原创 2020-08-17 20:29:08 · 974 阅读 · 1 评论