![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
算法
The_Only_God
yang
展开
-
一个小细节——vector初始化的时间复杂度
vector<int> v(n,val);比int v[n];for(int i=0;i<n;i++){ v[i]=val;}要耗时(leetcode双周赛教训)原创 2021-07-25 00:21:32 · 670 阅读 · 4 评论 -
C++ 算法模板
C++ 算法模板文章目录C++ 算法模板1 数据结构1.1 线性结构1.1.1 顺序表1.2 图状结构1.2.1 二维数组1.2.2 二叉树1.2.3 邻接表2 数论类2.1最小公倍数2.2 最大公约数2.3 快速幂2.4 求素数2.5 小费马定理(分数取模)3 字符串类3.1 模式匹配4.图论类4.1 最短路径4.1.1 Dijkstra4.1.2 Floyd4.1.3 SPFA4.2 拓扑排序4.2.1 Kahn算法4.2.2 DFS4.3 树相关4.3.1 求树中结点个数(dfs)5. 高精度计算6原创 2021-04-10 20:59:21 · 979 阅读 · 1 评论 -
树常用算法
文章目录存储结构求树的结点个数树的重心基本知识求树的重心(无权)求树的重心(结点带权)完整代码存储结构const int inf=1e9;const int maxn=10005;const int maxm=20005;typedef struct{ int u,v,next;}Edge;Edge edge[maxm];int head[maxn],cnt=0;//head[maxn]初始值为-1int n,m;void addedge(int u,int v){ edge[cnt原创 2020-09-07 19:54:13 · 355 阅读 · 0 评论 -
高精度算法模板
简单模拟就可以实现高精度加、减、乘、除(高精度除以低精度)/** template:高精度算法* date:2020/08/22*/#include<iostream>#include<string>using namespace std;const int MAXLEN=1001;typedef struct { int len; int num[MAXLEN];} HugeInt;bool negative;//大数输入HugeInt scanHug原创 2020-08-23 10:35:17 · 292 阅读 · 0 评论 -
最短路径——DFS、Dijkstra、Floyd、Bellman-Ford、spfa
文章目录最短路径问题DFSDijkstrafloydbellman_fordspfa最短路径问题求带权图中两点之间最短距离的问题代码案例中的输入格式为边数M 结点数N边1的起始节点 边1的目的结点 边1的权重…边M的起始节点 边M的目的结点 边M的权重例5 51 2 202 3 303 4 204 5 201 5 100题目:https://vjudge.net/problem/POJ-2387DFS原理:从源节点深度搜索最短路径/** problem:最短路径原创 2020-08-12 22:09:09 · 365 阅读 · 3 评论 -
vector详解
文章目录属性方法初始化型构造函数重载赋值运算符 =迭代器类型容器(常用,详细见参考文档)元素获取元素修改vector修改参考文档: http://www.cplusplus.com/reference/vector/vector/属性连续存储的动态改变大小的数组方法初始化型构造函数默认构造函数填充构造fill迭代器范围复制构造range复制构造copy由数组构造// constructing vectors#include <iostream>#include原创 2020-07-15 17:07:16 · 216 阅读 · 0 评论 -
最大公约数GCD、最小公倍数LCM
文章目录最大公约数GCD更相减损法辗转相除法Stein算法最小公倍数LCM最大公约数GCD最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个更相减损法gcd(a,b)假设a>b,则gcd(a,b)=gcd(b,a-b)、gcd(a,a)=a递归版//更相减损法(递归)int gcd(int a,int b) { if(a==b) return a; return a>b?gcd(a-b,b):gcd(b-a,a);}循环版int gcd(原创 2020-07-14 16:10:14 · 359 阅读 · 0 评论 -
求幂(快速幂)
文章目录模运算规律(分配律)普通法(定义法)快速幂法const long long MAX=100000;模运算规律(分配律)(a + b)% c = (a%c + b%c)% c(a + b)% c = (a%c - b%c) % c(a * b)% c =(a%c * b%c ) % c普通法(定义法)long long normalPower(long long base, long long power) { long long result=1; for(long long原创 2020-07-13 15:13:09 · 195 阅读 · 0 评论 -
求素数
文章目录定义法定义法改进埃氏筛法定义法定义:质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。bool isPrime(int n){ if(n<1) return false; int count=0; for(int i=2;i<n;i++){ if(n%i==0) break; else count++; } if(count==n-2) return true; else return false;}定义法改进循环上限改为了s原创 2020-07-11 19:57:41 · 115 阅读 · 0 评论 -
贪心法——最小生成树
Prime算法/** problem: 最小生成树* method: 贪心法(最近点策略prime)* date: 2020/05/12*/#include<iostream>using namespace std;const int INF=10e5;const int MAX_N=20;typedef struct { int adjvex; int lowcost;} Element;int arc[MAX_N][MAX_N]= { {INF,34,46,IN原创 2020-05-12 22:37:50 · 477 阅读 · 0 评论 -
贪心法——图着色问题(非最优解)
问题源码/** problem: 图着色问题* method: 贪心法(非最优解)* date: 2020/05/12*/#include<iostream>using namespace std;const int MAX_N=20;int arc[MAX_N][MAX_N]= { {0,1,0,0,0}, {1,0,1,1,0}, {0,1,0,0,1}, {0,1,0,0,1}, {0,0,1,1,0}};int color[MAX_N];int n=原创 2020-05-12 22:34:53 · 1634 阅读 · 0 评论 -
贪心法——TSP问题
最邻近点策略/** problem: TSP(最邻近点策略)* method: 贪心法* date: 2020/05/12*/#include<iostream>using namespace std;const int INF=10e5;const int MAX_N=20;int arc[MAX_N][MAX_N]= {{INF,3,3,2,6}, {3,INF,7,3,2},原创 2020-05-12 22:33:18 · 745 阅读 · 0 评论 -
贪心法——埃及分数
问题代码/** problem: 埃及分数* method: 贪心法* date: 2020/05/11*/#include<iostream>using namespace std;int CommFactor(int a,int b) { int c=b; while(a%b){ c=a%b; a=b; b=c; } return c;}void EgyptFactor(int a,int b) { int e,r; while(a>1)原创 2020-05-12 22:31:26 · 973 阅读 · 0 评论 -
动态规划——最长递增子序列
/** problem: 最长递增子序列* method: 动态规划* date: 2020/04/28*/#include<iostream>using namespace std;const int N = 20;int A[N];//序列Aint L[N];//最长递增子序列长度int x[N][N];//对应的最长子序列void IncreaseOrder...原创 2020-04-29 10:16:40 · 176 阅读 · 0 评论 -
动态规划——多段图的最短路径
问题描述源码#include<stdio.h>#include<stdlib.h>const int INF = 1000;const int N = 100;//图的最大结点数为100int arc[N][N];//图的代价矩阵int cost[N];//存储路径长度int path[N];//路径int ClosetPath(int n) { i...原创 2020-04-15 09:11:46 · 4211 阅读 · 1 评论 -
动态规划——数塔问题
问题描述源码纯C!!!(想哭)原创 2020-04-15 09:07:35 · 1430 阅读 · 0 评论 -
算法设计与分析——分治算法
#include<iostream>#include<algorithm>#include<cmath>using namespace std;/*变量定义*/typedef struct { double x, y;}point;/*函数声明*/void IntRand(int*& A, int min, int max, int n...原创 2020-04-07 21:03:12 · 309 阅读 · 0 评论 -
函数增长率图像
log(n)、n、n*log(n)、n2、2nnn,en,n!原创 2020-03-04 09:28:01 · 2934 阅读 · 4 评论 -
算法导论——堆排序
文章目录堆堆排序算法c/c++源码堆堆:近似二叉树例:最大堆:任意一个结点的值不超过其父结点。最小堆:任意一个结点的值不小于其父结点。结点的高度:该结点到叶结点最长简单路的边数。堆排序算法构建最大堆取出根维护最大堆c/c++源码#include<iostream>using namespace std;int heap_size;void exchang...原创 2019-07-20 10:44:26 · 148 阅读 · 1 评论 -
算法导论——分治策略
分治策略步骤求解递归式最大非空数组问题问题暴力解法分治算法分治策略步骤1.分解:将问题划分为规模更小的自问题。2.解决:递归的地解出子问题。3.合并:将子问题的解组合成原问题的解。求解递归式1.代入法2. 递归树发3. 主方法最大非空数组问题问题找出数组的最大连续非空子数组暴力解法 复杂度 Θ(n^2)伪代码max_subarry(A) max =...原创 2019-07-11 11:31:33 · 415 阅读 · 0 评论 -
算法导论——函数的增长
文章目录函数的增长渐进记号Θ记号O记号Ω记号o记号ω记号数学知识取整模运算函数及其比较多项式指数对数阶乘多重函数多重对数函数斐波那契数函数的增长渐进记号输入规模对运行时间的函数Θ记号若存在正常量c1和c2,使得对于足够大的n,函数f(n)能“夹入”c1g(n)与c2g(n)之间,则f(n)属于集合Θ(g(n))。 称g(n)是f(n)的一个渐进紧确界。(f(n)为算法运行时间。)...原创 2019-07-10 09:56:35 · 488 阅读 · 0 评论 -
排序算法
文章目录冒泡排序冒泡排序//BubbleSortvoid BubbleSort(int x[], int n){ int bound, exchange = n - 1; while (exchange != 0) { bound = exchange; exchange = 0; for (int i = 0; i < bound; i++) { if ...原创 2020-03-11 13:55:22 · 116 阅读 · 0 评论