![](https://img-blog.csdnimg.cn/20210125120347718.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法笔记
此专栏用于记录自己在学习《算法笔记》中的疑问与理解,算法笔记配套练习地址http://codeup.hustoj.com/contest.php
JingYaoJang
往者不可谏,来者犹可追。
展开
-
栈--中缀表达式后缀表达式的计算
在表达式中的应用【中缀表达式转后缀表达式】从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级不高于栈顶符号(乘除优先加减)则栈元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。【后缀表达式计算结果】从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。...原创 2021-08-31 16:21:04 · 90 阅读 · 0 评论 -
分块思想与树状数组
分块思想hash数组table[10001] 其中table[x]表示整数x的个数。统计数组block[]表示第i块中存在的个数求解第K大的元素是什么:首先,从小到大累加block[i] 直到sum>=k。其次从小到大累加table[i]直到sum>=k。树状数组lowbit(i):求解i的最低位的1和它右边的所有0。树状数组的应用大致分为两个单点更新 区间查询区间更新 单点查询两种不同的应用应该让树状数组例的C[i]值的含义不同。C[i] 值得覆盖区间位lowbit(i)原创 2021-05-03 23:34:26 · 115 阅读 · 0 评论 -
KMP算法
KMP算法的核心事求解next数组。next数组可以优化为nexval数组,进一步减小时间复杂度。// getNext求解长度为len的字符串s的next数组void getNext(char s[],int len){ int j = -1; next[0] = -1;//初始化j=next[0] = -1 for(int i = 1;i < len;i++)//求解next[1] ~ next[len - 1] { while(j != -1 && s[i]原创 2021-05-03 18:16:07 · 57 阅读 · 0 评论 -
关键路径
AOE网用来表示一个工程的进行工程,AOE无环。边活动网AOV顶点活动网//拓扑序列stack<int> topOder;//拓扑排序,顺便求ve数组bool topologicalSort(){ queue<int> q; for(int i = 0;i < n;i++) { if(inDgree[i] == 0){ q.push(i); } } while(!q.empty()){ int u = q.front(); q.pop原创 2021-04-26 23:29:08 · 67 阅读 · 0 评论 -
拓扑排序
//拓扑排序vector <int> G[MAXV];int n,m,,inDegree[MAXV];//顶点数,入度bool topologicalSort(){ int nu, =0 ; queue<int> q; for(int i = 0;i<n;i++) { if(inDegree[i] == 0]) { q.push(i); } } while(!q.empty()) { int u = q.front(); //原创 2021-03-30 23:49:56 · 69 阅读 · 0 评论 -
最短路径
Dijkstra解决单源最短路径的问题//G全局变量;数组d为源点到各点的最短路径长度,s为起点Dijkstra(G,d[],s){ 初始化; for (循环n次) { u = 使d[u]最小的还未被访问的顶点的编号; 记u已被访问; for(从u除法能到达的所有顶点v) if v未被访问 && 以u为中介点使s到顶点v的最短距离d[v]更优 优化d[v];原创 2021-03-30 23:07:10 · 138 阅读 · 0 评论 -
最小生成树-kruskal算法
算法策略:边贪心。容易理解。并查集可以通过查询两个结点所在集合的根节点是否相同来判断他们是否在同一个集合(即是否连通)。int kruskal(){ 令最小生成树的边权值之和为ans,最小生成树的当前边数为Num_Edge 将所有边按边权从小到大排序; for(枚举所有边) { if 当前测试的两个端点在不同的连通块中 将该测试边加入最小生成树中; ans += 测试边的边权; 最原创 2021-03-30 15:27:09 · 143 阅读 · 0 评论 -
最小生成树-prim算法
算法需要一个数组dis保存距离生成树的最小距离,一个数组保存边权信息,一个vis数组,保存结点是已加入树#include <cstdio>const int MAXSIZE = 10;const int INF = 1000000000;int dis[MAXV];int n,G[MAXV][MAXV];bool vis[MAXV] = {false};int prim(){ //初始化 fill(d,d+MAXV,INF); dis[0] = 0; int ans=0;原创 2021-03-29 23:55:28 · 94 阅读 · 0 评论 -
图算法BFS
伪代码//遍历u所在的连通块BFS(u){ queue q; 将u入队 visq[u] = true; while(q非空) { 取出队首元素进行访问; for (遍历与u相连的所有顶v) { if visq[v] == false; { v入队 visq[v] = true; } }原创 2021-03-16 20:18:28 · 75 阅读 · 0 评论 -
图算法DFS
邻接矩阵1表示伪代码//访问顶点uvoid DFS(u){ visit[u] = true; //顶点u设置为已访问 for(从u出发能到达的所有顶点v){//遍历所有从u除法能到达的所有顶点v if visit[v]== false //如果未访问,则递归访问顶点v,DFS }}//遍历图DFSTrave(G){ for(G的所有顶点u){ //遍历图的所有顶点 if visit[u] == false原创 2021-03-16 19:45:16 · 164 阅读 · 0 评论 -
练习目录
简单模拟3.1 简单模拟B1001B1016B1026B1046B1008B1012B1018以下为未做的题A1042A1046A1065B1010A1002A10093.2 查找元素B1041B1004B1028B1032A1011A1006A10363.3 图形输出B1036B1027A10313.4 日期处理#3.5 进制转换B1022B1037A1019A1027A10583.6 字符串处理B1006B1021B1031..原创 2021-02-28 15:29:15 · 64 阅读 · 0 评论 -
提高篇——数据结构专题(1)
1. stack的实现(后进先出)c++中可以用STL实现的栈,但是STL里的stack没有实现stack的清空while(!st_array.empty()){ st.pop();} const int maxs = 100010; int st_array[maxs] ; int TOP = -1; /** * 在使用pop和top之前应该判断是否为空 */ void clear() { TOP原创 2021-02-08 00:18:18 · 120 阅读 · 0 评论 -
入门篇(2)——算法初步
排序散列递归贪心二分two pointers其它原创 2021-02-01 16:22:34 · 117 阅读 · 0 评论 -
入门篇(1)——入门模拟
1.PATB1001#include <cstdio>int main(){ int n, step = 0; scanf("%d", &n); while (n != 1) { if (n & 1) { //0 false 其他为true 判断是不是奇数 n = (3 * n + 1) / 2; } else { n = n / 2; } step++; } printf("%d", n); printf("%d原创 2021-01-31 20:33:09 · 160 阅读 · 0 评论