- 博客(44)
- 资源 (1)
- 收藏
- 关注
原创 量化交易常用概念
实际的应用中,一般我们用5日、10日、14日作为指标的周期,或者用6日、12日、24日作为计算周期的较多。当然也可以修改成,适合自己的周期,但是一定记住,RSI指标是敏感指标,如果周期太长,可能会反映迟钝。4.DIF、DEA的值从正数变成负数,或者从负数变成正数并不是交易信号,因为它们落后于市场。EMA更在意接近当天的K线走向,越接近当天权重越大, 所以波动比起直接的MA更敏感,1.DIF、DEA均为正,DIF向上突破DEA,买入信号参考。2.DIF、DEA均为负,DIF向下跌破DEA,卖出信号参考。
2024-07-20 16:12:34
808
原创 CompletableFuture工具类使用
CompletableFuture工具类可以帮助实现Java并发编程中的任务编排以上除了join用于接受CompletableFuture的返回值以外其它方法皆有Async异步和指定异步执行的Executor线程池选项。
2024-07-05 18:50:50
342
原创 Java对应C++ STL的用法
2:java.util.Collections中的静态方法的Collections.sort()方法,针对集合框架中的动态数组,链表,树,哈希表等( ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap )进行排序。下面分别介绍两种用法。1:java.util.Arrays中的静态方法Arrays.sort()方法,针对基本数据类型和引用对象类型的数组元素排序。
2024-06-29 21:47:39
239
1
原创 Nacos配置
spring.cloud.nacos 配置包括config(配置中心地址),discovery(服务注册中心地址),注册中心地址是拉取配置的,服务注册中心地址是注册服务来用feign调用的。命名空间 -》spring.application.name =》 开发/生产/测试 =》properties/yaml。
2024-04-12 13:45:31
159
1
原创 状压dp模板
状压dp与普通dp不同的方面即为它把之前的各种状态用一个数字表示,通过这个数字二进制条件下各位是0还是1来表示这个状态下的各种情况(是否有放棋子之类的),然后通过枚举数字即可枚举之前的各种情况进行dp位运算的技巧1.判断一个数字x二进制下第i位是不是等于1。(最低第1位)方法:if(((1<<(i−1))&x)>0) 将1左移i-1位,相当于制造了一个只有第i位 上是1,其他位上都是0的二进制数。然后与x做与运算,如果结果>0, 说明x第i位上是1,反之则是0。
2022-04-29 13:03:07
387
原创 数位dp模板
数位dpdp[pos][flag][limit] 代表从高到低到了第pos位置,从第pos位到第0位之间在状态位flag的情况下是否有limit条件下的答案是多少,以不要62这道题目为例子在这里比方说都是到了第万位数,需要确定的只有前面是否是6,其他的答案是一样多的,并且需要注意的是只有没有limit限制的时候才可以进行记忆化搜索,因为如果有limit限制的话,这个情况只会出现一次,存下来是没有用的#include<bits/stdc++.h>#define int long l
2022-04-28 23:41:28
266
原创 排序中的一些定理
1.对给定一行数据进行排序,可以任意交换两个元素,求最少的交换次数是多少?答: 数组长度-交换环个数对于数列 ,可以对任意 2 个元素进行交换操作,则使得该序列由小到大排列,至少需要多少次交换?是一个交换环,是一个交换环,是一个交换环,所以答案是数组长度8-交换环个数3=8-5=3例题:https://codeforces.com/contest/1672/problem/F12.冒泡排序中交换到正序的最小交换次数答:即原数组的逆序对个数................
2022-04-25 00:28:49
392
原创 Tarjan求无向图割点,割边,双连通分量;求有向图强连通分量,缩点
为了与有向图尽可能保持一致,我们将无向图的一条无向边拆分成两条单向边。两条边互为反向边。从图中一点作为起点,进行DFS搜索遍历图,这样会得到一棵树,我们称之为DFS搜索树,该树中的每一条边都来自原图,我们将这些边称为树边,其他图中的边称为非树边。dfn数组:记录dfs序,也即时间戳、搜索顺序。low数组:记录每个点经过一条非树边能回到的所有结点的最小dfn值。tarjan求割点:x是割点case1:x不是root&&x有儿子&&low[y]>=df
2022-04-15 13:31:31
644
1
原创 树链剖分板子
https://www.luogu.com.cn/problem/P3384关于距离的思想可以看这个视频:对于操作3和操作4直接利用dfs序得到的各个子树的节点是连续的这个特点可以直接用线段树进行修改对于操作1和操作2,可以先进行重链和轻链的划分,然后记录一下各个节点的父节点是什么,已经各个节点对应的重链的根节点,然后对于x和y可以不断向重链的根节点跳跃,在跳跃的过程中dfn[top[x]]和dfn[x]一定是连续的把这个答案加上,然后再取这个重链的根节点的父节点进行同样操作,一定可以跳到.
2022-04-04 22:51:49
448
原创 线性动态规划套路总结(长期更新中)
动态规划一直是我的短板,也没有系统的做过题目,不过也是时候好好总结一下动态规划问题了,本贴会长期更新,一边刷luogu题单和codeforces上面的dp类型题目一边把各种基本类型的动态规划及其变形的经典写法做一个记录1.从n个数字里面选择刚好k个凑出的数有多少种情况#include<bits/stdc++.h>#define int long longusing namespace std;const int maxn=110;int a[maxn],b[maxn];int
2022-03-17 23:10:54
769
原创 扫描线(区间查询区间修改线段树+离散化+模拟+染色覆盖问题)
hdu1542链接#include<iostream>#include<algorithm>#include<string.h>#define ls (rt<<1)#define rs (rt<<1|1)using namespace std;const int maxn = 20005;int cover[maxn];//存放i节点对应覆盖情况的值double length[maxn];//存放区间i下的总长度d
2022-03-01 00:37:15
206
原创 卢卡斯定理和卡特兰数
通常情况下:C(a,b) mod p=a!*inv[b!]*inv[(a-b)!] mod p 其中inv[x]代表x关于p的逆元 inv[x!]可以由inv[1]*inv[2]*...*inv[x]%mod得到所以本质上求inv[x!]得要求inv[x],可是求inv[x]的时候,求逆元得要求x和p互质,但是如果a很大那么b和a-b就有可能是p的倍数,这种情况下就不能求inv[b]和inv[a-b]了,遇到这种情况我们就要用卢卡斯定理:递归计算当n/p和m/p都小于p时就可以结束了i
2022-02-06 16:03:11
209
原创 最近共同祖先(lca)
1.朴素法d数组记录的是u,v节点到根节点的深度int lca(int u,int v){ if(d[u]<d[v]){ //保证u所在的节点比较深 swap(u,v); } while(d[u]!=d[v]){ //让u和v处于同一深度 u=father[u]; } while(u!=v){ //将u和v同时上调 u=father[u]; v=father[v]; } return u;}2.离线Tarjan算法 链接一次性将
2022-01-20 18:41:23
356
原创 二分图匹配
匈牙利算法#include<bits/stdc++.h>using namespace std;int n1,n2,m;const int maxn=5e2+5;int vis[maxn],match[maxn],a[maxn][maxn];int path(int u){ for(int i=1;i<=n2;i++){ if(!vis[i]&&a[u][i]){ vis[i]=1; if(!match[i]||path(match[i])
2022-01-18 23:08:38
555
原创 图的一些基本操作
dfsvoid dfs(int s){ //递归深搜 vis[s]=true; for(int i=0;i<g[s].size();++i){ if(vis[g[s][i]]) g[s].erase(g[s].begin()+i);//删除图中已经遍历过的点,可提高遍历速度 else dfs(g[s][i]); }} bool judge(){ //判断是否所有点已被遍历过
2022-01-12 18:00:40
248
原创 最小生成树
Kruskal算法模板#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,m,tot=0,k=0;//n端点总数,m边数,tot记录最终答案,k已经连接了多少边 int fat[200010];//记录集体老大 struct node{ int from,to,dis;//结构体储存边 }edge[200010];bool cmp(const
2022-01-12 17:08:52
110
原创 最短路/次短路
单源最短路: dijkstra和spfa。dijkstra可以用于求解没有负边的最短路时间复杂度为nlogn(n是边数) spfa可以求解没有负边的最短路时间复杂度为Ke(K是常数,e是边数)多源最短路:floyd 可以求解没有负圈的最短路Dijkstra#include<bits/stdc++.h>#define int long longusing namespace std;const int maxn=1e3+5;const int inf=1e9+7;in...
2022-01-10 19:56:23
670
原创 康托展开
康托展开即用一个小常数来映射一个数列的全排列:原理:n个不同的元素的全排列总共有n!种,从第一个元素开始算它后面有多少比它小的元素(即求逆序数),那么假设有5个数,第一个元素后面有3个比它小的数,则可以得出他在全排列中起码要往后排 3*4!个,从1-n遍历一遍即可得出X的值,即代表他在全排列中排第几个,即可用X表示当前的排列状态845. 八数码 - AcWing题库#include<bits/stdc++.h>using namespace std;int mp[10][1
2022-01-09 19:14:13
445
原创 二分法详解
求x的位置int find(int x,int l,int r){ int ans=-1; while(l<=r){ int mid=(l+r)/2; if(a[mid]==x){ ans=mid; break; } if(a[mid]<x){ l=mid+1; } else{ r=mid-1; } } return ans;} 求最先出现的x的位置int find(int x,int l,int r){ int a
2021-09-21 16:59:17
167
原创 并查集总结
普通并查集链接#include<bits/stdc++.h>using namespace std;int pre[50000+5];int t=1;int find(int x){ while(x!=pre[x]){ x=pre[x]; } return x;}void solve(int n,int m){ for(int i=1;i<=n;i++){ pre[i]=i; } while(m--){ int a,b; cin>&..
2021-09-01 17:07:39
454
原创 素数筛,欧拉函数
素数筛:1.埃氏筛法(时间复杂度O(nloglogn))const int maxn=1e4+10;int prime[maxn],pnum=0;//prime数组存放所有素数,pnum为素数个数 bool p[maxn];//如果i为素数,则p[i]为false,否则p[i]为true void find_prime(){ for(int i=2;i<maxn;i++){ if(p[i]==false){ prime[pnum++]=i; for(int j=i+i
2021-08-27 18:31:50
784
原创 扩展欧几里得 除法逆元
欧几里得算法,也叫辗转相除,简称 gcd,用于计算两个整数的最大公约数定理:gcd(a,b)==gcd(b,a%b)int gcd(int a, int b)//最大公约数{ return b == 0 ? a : gcd(b, a % b);}int lcm(int a, int b)//最小公倍数{ return a / gcd(a, b) * b;}扩展欧几里得算法,简称exgcd,一般用来求解不定方程,求解线性同余方程,求解模的逆元等引理:存在 x ,.
2021-08-25 15:52:50
847
原创 后缀数组(sort法)和height数组
Sort法 时间复杂度O(n*logn的平方)#include<iostream>#include<cstring>#include<string>#include<cmath>#include<algorithm>#include<vector>#include<queue>using namespace std;const int maxn=500010;int sa[maxn],rk[max
2021-08-24 16:48:15
218
原创 AC自动机
AC自动机算法分为3步:构造一棵Trie树,构造失败指针和模式匹配过程。如果你对KMP算法和了解的话,应该知道KMP算法中的next函数(shift函数或者fail函数)是干什么用的。KMP中我们用两个指针i和j分别表示,A[i-j+ 1..i]与B[1..j]完全相等。也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前 j个字符,当A[i+1]≠B[j+1],KMP的策略是调整j的位置(减小j值)使得A[i-j+1..i]与B[1..j]保持匹配
2021-08-19 18:11:54
1148
原创 ST表(查询不更改的数据的任意区间最大最小值)
思考: 有N个数,M次询问,每次给定[L,R] ,求区间内的最大值。 当N<= 10, M<=10时? 当N<= 10^5,M<=10^5时呢? 要考虑到时间复杂度 O 哟!!! 这种问题是区间最值问题(RMQ)。 暴力的复杂度是O(N),对第一个情况是比较简单,但是第二种情况就会超时,可能要跑好久。 而线段数的复杂度是O(logN) 对于每次询问,但是M变成10^6时,O(MlogN)也可能会超时。 我们需要一个对于每个查询复杂度为O(1),这样整体的复杂度为O(M) ,也是今天的
2021-08-19 14:02:52
621
原创 字典树(tire树)
字典树功能: 1、维护字符串集合(即字典)。 2、向字符串集合中插入字符串(即建树)。 3、查询字符串集合中是否有某个字符串(即查询)。 4、统计字符串在集合中出现的个数(即统计)。 5、将字符串集合按字典序排序(即字典序排序)。 6、求集合内两个字符串的LCP(Longest Common Prefix,最长公共前缀)(即求最长公共前缀)。 模板: HDU1251#include<iostream>#include <..
2021-08-19 13:49:35
1824
原创 kmp算法
作用:在text字符串中找匹配T字符串的个数 (hash数组也可以做)这个dalao把kmp算法解释的非常清楚,不懂的话可以看看链接板子:#include<bits/stdc++.h>using namespace std;void Next(char T[],int next[]){ int n=strlen(T); next[0]=0; int i=1; int len=0; // len==next[i-1] while(i<n){ if(T[l..
2021-08-17 18:05:35
162
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人