多项式学习笔记[二](全网最详细!有图有代码有解释有例题有总结!)
上篇
文章目录
- 任意模数NTT
- Description
- Solution
- 分治NTT
- Description
- Solution
- 多项式求逆
- Description
- Solution
- 多项式除法
- Description
- Solution
- 多项式ln(对数函数)
- Description
- 前置芝士
- 导数
- 积分
- Solution
- 多项式牛顿迭代
- Description
- 前置芝士: 泰勒展开
- Solution
- 应用
- 多项式开根
- Description
- Solution
- 多项式exp(指数函数)
- Description
- Solution
- 多项式快速幂
- Description
- Solution
- 完整模板
任意模数NTT
Description
给定两个长度分别为n,mn,mn,m的多项式F, G,请求出F与G的卷积。各项系数对模数ppp取模。
请注意,ppp不一定是NTT模数。
n,m≤105n,m \le 10^5n,m≤105
Solution
由于篇幅能力原因,这里仅介绍一种十分容易理解的方法。
我们任意取 333 个 10910^9109 级别的NTT模数,分别做一遍NTT,从而对于卷积式中的每一项系数 resires_iresi 都有三个形如 resi≡ki,j(modpi,j)res_i \equiv k_{i,j}(mod\ p_{i,j})resi≡ki,j(mod pi,j) 的表达式。
然后我们对于每一个 iii 分别跑模意义下的CRT(中国剩余定理)即可得到每一项系数。
为什么这么做是有正确性的呢? 因为,不在模意义下的卷积的各项系数最大不超过 102310^{23}1023 ,而这三个NTT模数的最小公倍数就已经达到了 102710^{27}1027 。所以并不会出现哈希冲突。
时间复杂度 O(nlogn)O(n \log n)O(nlogn) 。常数巨大。
分治NTT
Description
给定序列 g1,2,⋯n−1g_{1,2,\cdots n-1}g1,2,⋯n−1 ,现在需要你求出序列 f0,1,2,⋯,n−1f_{0,1,2,\cdots,n-1}f0,1,2,⋯,n−1 。
其中 fi=∑j=1ifi−jgjf_i=\sum_{j=1}^i f_{i-j}\ g_jfi=∑j=1ifi−j gj ,边界为 f0=1f_0=1f0=1 。
答案对 998244353998244353998244353 取模。
Solution
如果我们枚举 iii,每次都求一遍卷积的话,时间复杂度为 O(n2logn)O(n^2 \log n)O(n2logn) 。甚至比暴力还要慢不少。
我们参考 CDQ分治 的思想,每次先向左半边递归,然后处理左半边对右半边的贡献,接着向右半边递归⋯⋯\cdots \cdots⋯⋯以此类推。
更具体地说,假设当前搜索的区间是 [l,r][l,r][l,r],左子区间为 [l,mid][l,mid][l,mid],右子区间为 [mid+1,r][mid+1,r][mid+1,r]。我们先递归处理左子区间 [l,mid][l,mid][l,mid] 。考虑右子区间中的一个位置 i(mid+1≤i≤r)i(mid+1 \le i \le r)i(mid+1≤i≤r),它从左半边得到的贡献为 ∑l≤j≤midfjgi−j\sum_{l \le j \le mid}f_j\ g_{i-j}∑l≤j≤midfj gi−j 。不难发现,这是一个卷积的形式,于是大力 NTT 即可。
更为具体地说,每次考虑“左半边对右半边的贡献”的时候,所用到的 ggg 一定是前 r−lr-lr−l 个位置,fff 用到的是区间 [l,mid][l,mid][l,mid],直接将这些位置对应的多项式求卷积,得到的多项式对应的是区间[mid+1,r][mid+1,r][mid+1,r](即r−midr-midr−mid个位置)。于是我们把 fff 中的那 mid−l+1mid-l+1mid−l+1 个位置映射到另一个数组里面,将它与 ggg 的对应区间做卷积,即可得到右半边的所有位置被左半边的贡献量。
令时间复杂度为 T(n)T(n)T(n) ,则有 T(n)=nlogn+2T(n2)=O(nlog2n)T(n)=n \log n+2T(\frac n 2)=O(n \log^2 n)T(n)=nlogn+2T(2n)=O(nlog2n)。
多项式求逆
Description
给定一个多项式AAA,请你找到一个多项式BBB,使得A×B≡1(modxn)A×B \equiv 1(mod\ x^n)A×B≡1(mod xn)。
保证 AAA 的常数项为 111 。
Solution
假设我们已经求得了A×B′≡1(modxn2)A×B' \equiv 1(mod\ x^{\frac n 2})A×B′≡1(mod x2n),那么
A×(B−B′)≡0(modxn2)A×(B-B') \equiv 0(mod\ x^{\frac n 2})A×(B−B′)≡0(mod x2n)
(B−B′)≡0(modxn2)(B-B') \equiv 0(mod\ x^{\frac n 2})(B−B′)≡0(mod x2n)
B2−2BB′+B′2≡0(modxn2)B^2-2BB'+B'^2 \equiv 0(mod\ x^{\frac n 2})B2−2BB′+B′2≡0(mod x2n)
两边同时乘AAA,得到
AB2−2ABB′+AB′2≡0(modxn2)AB^2-2ABB'+AB'^2 \equiv 0(mod\ x^{\frac n 2})AB2−2ABB′+AB′2≡0(mod x2n)
B−2B′+AB′2≡0(modxn2)B-2B'+AB'^2 \equiv 0(mod\ x^{\frac n 2})B−2B′+AB′2≡0(mod x2n)
B≡2B′−AB′2(modxn2)B \equiv 2B'-AB'^2(mod\ x^{\frac n 2})B≡2B′−AB′2(mod x2n)
B≡B′(2−AB′)(modxn2)B \equiv B'(2-AB')(mod\ x^{\frac n 2})B≡B′(2−AB′)(mod x2n)
于是我们分治下去求B′B'B′,回溯的时候用NTT求出B′(2−AB′)B'(2-AB')B′(2−AB′)即可。
令时间复杂度为T(n)T(n)T(n),则有T(n)=T(n2)+nlogn=O(nlogn)T(n)=T(\frac n 2)+n \log n=O(n \log n)T(n)=T(2n)+nlogn=O(nlogn)。
多项式除法
Description
Solution
一种错误的做法是: 求出BBB的逆元(即多项式的逆)然后用C去乘上它,即为AAA。
对于这一种做法错误的原因主要是: 我们忽略了余数R的影响,导致可能不满足第一个条件。
于是我们想要避免余项R的影响。
令F(x)′=xnF(1x)F(x)'=x^n F(\frac 1 x)F(x)′=xnF(x1),其中nnn为多项式FFF的项数(虽然′'′已经表示了求导,但是这里暂时借用一下)。
不难发现,F(x)′F(x)'F(x)′的各项系数与F(x)F(x)F(x)的各项系数恰好相反。
我们开始愉快地推式子:
F(x)=Q(x)G(x)+R(x)F(x)=Q(x)G(x)+R(x)F(x)=Q(x)G(x)+R(x)
F(x)=xn−mQ(1x)xmG(1x)+xn−m+1xm−1R(x)F(x)=x^{n-m}Q(\frac 1 x)\ x^mG(\frac 1 x)+x^{n-m+1}\ x^{m-1} R(x)F(x)=xn−mQ(x1) xmG(x1)+xn−m+1 xm−1R(x)
F′(x)=Q′(x)G′(X)+xn−m+1R′(x)F'(x)=Q'(x)G'(X)+x^{n-m+1}R'(x)F′(x)=Q′(x)G′(X)+xn−m+1R′(x)
此时,在模xn−m+1x^{n-m+1}xn−m+1的意义下,R′R'R′的影响被消除了!于是我们可以直接多项式求逆+多项式乘法求出Q′Q'Q′,然后翻转得到QQQ,最后一步一步回带即可。
时间复杂度O(nlogn)O(n \log n)O(nlogn)。
多项式ln(对数函数)
Description
给定一个多项式A(n)A(n)A(n),请找到一个多项式B(x)B(x)B(x)使得B(x)≡lnA(x)(modxn)B(x) \equiv \ln A(x)(mod\ x^n)B(x)≡lnA(x)(mod xn)
前置芝士
导数
导数的基本定义不讲了,毕竟高中数学课本上有(
这里重点介绍几个公式:
① (pG(x))′=pG′(x)(p\ G(x))'=p\ G'(x)(p G(x))′=p G′(x)
② (nm)′=mnm−1(n^m)'=mn^{m-1}(nm)′=mnm−1。
根据①②,我们学会了多项式求导:
void qiudao(int *A,int *res,int len){for (int i=1;i<=len;i++) res[i-1]=(i*A[i])%mod;res[len-1]=0;
}
③(nm)(m)=m!(n^m)^{(m)}=m!(nm)(m)=m! 。虽然这个公式在多项式求ln\lnln中的用处并不大,但是泰勒展开中需要它。
积分
积分就是“逆导数”。例如,2x2x2x的积分是x2x^2x2。
这里重点介绍一个公式:
④axnax^naxn的积分是an+1xn+1\frac {a} {n+1}x^{n+1}n+1axn+1。
证明: 由于xn+1x^{n+1}xn+1的导数是(n+1)xn(n+1) {x^n}(n+1)xn,所以an+1xn+1\frac {a} {n+1}x^{n+1}n+1axn+1的导数就是axnax^{n}axn。
于是我们也学会了多项式积分:
void jifen(int *A,int *res,int len){for (int i=1;i<=len;i++) res[i]=(A[i-1]*ny(i))%mod;res[0]=0;
}
Solution
根据B(x)≡lnA(x)(modxn)B(x) \equiv \ln A(x)(mod\ x^n)B(x)≡lnA(x)(mod xn)
等式两边同时求导得B′(x)≡A(x)′A(x)(modxn)B'(x) \equiv \frac {A(x)'} {A(x)}(mod\ x^n)B′(x)≡A(x)A(x)′(mod xn)
于是我们先将A(x)A(x)A(x)求导得到A(x)′A(x)'A(x)′,然后求出A(x)A(x)A(x)的逆元得到1A(x)\frac 1 {A(x)}A(x)1,再将这两个多项式相乘得到B′(x)B'(x)B′(x),最后积分回去即可。
时间复杂度O(nlogn)O(n \log n)O(nlogn)。
多项式牛顿迭代
Description
给定多项式GGG,请你找到多项式FFF使得G(F(x))≡0(modxn)G(F(x)) \equiv 0(mod\ x^n)G(F(x))≡0(mod xn)。
前置芝士: 泰勒展开
泰勒展开不会的话请自己学,我不想写 笔者只放一个套路式:
G(x)=∑i=0∞G(i)(a)i!(x−a)iG(x)=\sum_{i=0}^{∞} \frac {G^{(i)}(a)} {i!} (x-a)^iG(x)=∑i=0∞i!G(i)(a)(x−a)i
Solution
这里的G,FG,FG,F分别是两个多项式函数。例如当G(x)=x+2,f(x)=x−1G(x)=x+2,f(x)=x-1G(x)=x+2,f(x)=x−1时,那么G(F(15))=G(14)=16G(F(15))=G(14)=16G(F(15))=G(14)=16。
假设我们已经求出了G(F0(x))≡0(modxn2)G(F_0(x)) \equiv 0(mod\ x^{\frac n 2})G(F0(x))≡0(mod x2n)。
我们考虑将这个式子在xxx处泰勒展开。根据Part 2中的公式,不难得到
G(F(x))≡∑i=0∞G(i)(F0(x))i!(F(x)−F0(x))i(modxn)G(F(x)) \equiv \sum_{i=0}^{∞} \frac {G^{(i)}(F_0(x))} {i!} (F(x)-F_0(x))^i(mod\ x^n)G(F(x))≡i=0∑∞i!G(i)(F0(x))(F(x)−F0(x))i(mod xn)
对于右式而言,
∑i=0∞G(i)(F(x))i!(x−a)i(modxn)\sum_{i=0}^{∞} \frac {G^{(i)}(F(x))} {i!} (x-a)^i(mod\ x^n)∑i=0∞i!G(i)(F(x))(x−a)i(mod xn)
≡G(F0(x))+G′(F0(x))(F(x)−F0(x))\equiv G(F_0(x))+G'(F_0(x))(F(x)-F_0(x))≡G(F0(x))+G′(F0(x))(F(x)−F0(x))
为什么G(F(x))G(F(x))G(F(x))的泰勒展开式的高于一次项都被消去了呢?因为
G(F(x))≡0(modxn2)G(F(x)) \equiv 0(mod\ x^{\frac n 2})G(F(x))≡0(mod x2n)
G(F0(x))≡0(modxn2)G(F_0(x)) \equiv 0(mod\ x^{\frac n 2})G(F0(x))≡0(mod x2n)
两式相减得
G(F(x))−G(F0(x))≡0(modxn2)G(F(x))-G(F_0(x)) \equiv 0(mod\ x^{\frac n 2})G(F(x))−G(F0(x))≡0(mod x2n)
于是,对于(G(F(x))−G(F0(x)))p(G(F(x))-G(F_0(x)))^p(G(F(x))−G(F0(x)))p而言,若2≤p2 \le p2≤p,那么必然有
G(F(x))−G(F0(x))≡0(modxn)G(F(x))-G(F_0(x)) \equiv 0(mod\ x^n)G(F(x))−G(F0(x))≡0(mod xn)
所以高次项都被消除了。
我们回到刚才的式子
G(F(x))≡G(F0(x))+G′(F0(x))(F(x)−F0(x))(modxn)G(F(x)) \equiv G(F_0(x))+G'(F_0(x))(F(x)-F_0(x)) (mod\ x^n)G(F(x))≡G(F0(x))+G′(F0(x))(F(x)−F0(x))(mod xn)
我们让需要求的G(F(x))G(F(x))G(F(x))放到一边,于是随便整理一波得到
F(x)=F0(x)−G(F0(x))G′(F0(x))F(x)=F_0(x)-\frac {G(F_0(x))} {G'(F_0(x))}F(x)=F0(x)−G′(F0(x))G(F0(x))
于是直接分治下去就行了。
令时间复杂度为T(n)T(n)T(n),则T(n)=nlogn+T(n2)=nlognT(n)=n \log n+T(\frac n 2)=n \log nT(n)=nlogn+T(2n)=nlogn。
应用
这个东西的应用极其广泛。比如它可以直接解决多项式求逆。
令G(F(x))=F(x)−1−A(x)G(F(x))=F(x)^{-1}-A(x)G(F(x))=F(x)−1−A(x)。根据多项式求逆的定义,显然G(F(x))≡0(modxn)G(F(x)) \equiv 0(mod\ x^n)G(F(x))≡0(mod xn)。
所以F(x)=F0(x)−F0(x)−1−A(x)−F0(x)−2F(x)=F_0(x)-\frac {F_0(x)^{-1}-A(x)} {-F_0(x)^{-2}}F(x)=F0(x)−−F0(x)−2F0(x)−1−A(x)
即F(x)=2F0(x)−F0(x)2A(x)F(x)=2F_0(x)-F_0(x)^2\ A(x)F(x)=2F0(x)−F0(x)2 A(x)
多项式开根
Description
给定一个多项式AAA,请你找到多项式BBB使得B2(x)≡A(x)(modxn)B^2(x) \equiv A(x) (mod\ x^n)B2(x)≡A(x)(mod xn)。
Solution
建议读者把它当成一道题而不是一个模板来做,由此训练一下多项式牛顿迭代的函数构造以及推导整理能力。
令G(F(x))=F(x)2−A(x)G(F(x))=F(x)^2-A(x)G(F(x))=F(x)2−A(x)
则F(x)≡F0(x)−F0(x)2−A(x)2F0(x)(modxn)F(x) \equiv F_0(x)-\frac {F_0(x)^2-A(x)} {2F_0(x)}(mod\ x^n)F(x)≡F0(x)−2F0(x)F0(x)2−A(x)(mod xn)
整理得F(x)=A(x)2F0(x)+F0(x)2F(x)=\frac {A(x)} {2F_0(x)}+\frac {F_0(x)} {2}F(x)=2F0(x)A(x)+2F0(x)
于是我们分治下去,回溯的时候,求一下F0(x)F_0(x)F0(x)的逆元,再用A(x)A(x)A(x)乘上它并加上F0(x)F_0(x)F0(x),然后除以222即可。
时间复杂度O(nlogn)O(n \log n)O(nlogn)。
多项式exp(指数函数)
Description
给定多项式A(x)A(x)A(x),请你求出多项式B(x)B(x)B(x)使得eA(x)≡B(x)(modxn)e^{A(x)} \equiv B(x)(mod\ x^n)eA(x)≡B(x)(mod xn)。
Solution
等式两边同时ln\lnln得lnB(x)≡A(x)(modxn)\ln B(x) \equiv A(x)(mod\ x^n)lnB(x)≡A(x)(mod xn)
令G(F(x))=lnF(x)−A(x)G(F(x))=\ln F(x)-A(x)G(F(x))=lnF(x)−A(x),不难得到G(B(x))≡0(modxn)G(B(x)) \equiv 0(mod\ x^n)G(B(x))≡0(mod xn),于是我们就可以快乐地牛顿迭代了。
F(x)=F0(x)−lnF0(x)−A(x)F0′(x)F0(x)F(x)=F_0(x)-\frac {\ln F_0(x)-A(x)}{\frac {F_0'(x)} {F_0(x)}}F(x)=F0(x)−F0(x)F0′(x)lnF0(x)−A(x)
=F0(x)−lnF0(x)−A(x)1F0(x)=F_0(x)-\frac {\ln F_0(x)-A(x)}{\frac {1} {F_0(x)}}=F0(x)−F0(x)1lnF0(x)−A(x)
=F0(x)(1−lnF0(x)+A(x))=F_0(x)(1-\ln F_0(x)+A(x))=F0(x)(1−lnF0(x)+A(x))
递归下去,回溯时做一遍多项式ln\lnln与多项式乘法即可。
时间复杂度O(nlogn)O(n \log n)O(nlogn)。
多项式快速幂
Description
给定多项式 A(x)A(x)A(x) 与 ppp,请求出多项式 B(x)B(x)B(x) 使得 B(x)≡A(x)p(modxn)B(x) \equiv A(x)^p(mod\ x^n)B(x)≡A(x)p(mod xn)。
Solution
首先,一种方法是快速幂套多项式乘法,时间复杂度是 O(nlognlogp)O(n \log n \log p)O(nlognlogp)的。
考虑如何优化。不难发现 x=elnxx=e^{\ln x}x=elnx,所以 B(x)≡eplnA(x)B(x) \equiv e^{p\ln A(x)}B(x)≡eplnA(x)。
于是我们求出 lnA(x)\ln A(x)lnA(x),将各项系数乘 ppp 然后再 exp\expexp 求出 eplnA(x)e^{p \ln A(x)}eplnA(x) 即为答案。
完整模板
int n,k;
int a[maxl],b[maxl],rev[maxl];int quick_power(int x,int y){int res=1;for (;y;y=y>>1,x=(x*x)%mod){if (y&1) res=(res*x)%mod;}return res;
}
int ny(int tmpxtmpxxx){return quick_power(tmpxtmpxxx,mod-2);}namespace poly{int tmp[maxl],f[maxl],g[maxl];void NTT(int *A,int len,int flag){for (rg int i=0;i<len;++i){if (i>rev[i]) swap(A[i],A[rev[i]]);}for (rg int i=2;i<=len;i*=2){int wn;if (flag==1) wn=quick_power(G,(mod-1)/i);else wn=quick_power(Gi,(mod-1)/i);for (int j=0;j<len;j+=i){int w=1;for (rg int k=j;k<j+(i/2);k++){int u=A[k],v=(w*A[k+(i/2)])%mod;A[k]=(u+v)%mod,A[k+(i/2)]=(u+mod-v)%mod;w=(w*wn)%mod;}}}if (flag==-1){int ducati_cai=quick_power(len,mod-2);for (int i=0;i<len;++i) A[i]=(A[i]*ducati_cai)%mod;}}void Mul(int *A,int *B,int *C,int n,int m){int F[maxl],G[maxl];int p=1,cnt=0;while (p<=n+m) p*=2,cnt++;for (int i=0;i<=p;++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<(cnt-1));for (int i=0;i<=n;++i) F[i]=A[i];for (int i=0;i<=m;++i) G[i]=B[i];for (int i=n+1;i<=p;++i) F[i]=0;for (int i=m+1;i<=p;++i) G[i]=0;NTT(F,p,1),NTT(G,p,1);for (rg int i=0;i<=p;++i) C[i]=(F[i]*G[i])%mod;NTT(C,p,-1);}void get_inv(int *A,int *res,int len){if (len==1){res[0]=quick_power(A[0],mod-2);return;}get_inv(A,res,(len+1)>>1);int p=1,cnt=0;while (p<=len<<1) p<<=1,cnt++;for (rg int i=0;i<=p;++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<(cnt-1));for (int i=0;i<=len;++i) tmp[i]=A[i];for (int i=len;i<=p;++i) tmp[i]=0;NTT(tmp,p,1),NTT(res,p,1);for (rg int i=0;i<=p;++i) res[i]=(((2-res[i]*tmp[i])%mod+mod)%mod*res[i])%mod;NTT(res,p,-1);for (int i=len;i<=p;++i) res[i]=0;}void Divide(int *A,int *B,int *D,int *R,int n,int m){int invb[maxl],dtmp[maxl];reverse(B+1,B+m+1),reverse(A+1,A+n+1);get_inv(B,invb,n-m+1),Mul(A,invb,D,n-m,n-m);reverse(A+1,A+n+1),reverse(B+1,B+m+1),reverse(D+1,D+n-m+1);Mul(B,D,dtmp,m,n-m);for (int i=0;i<m;++i) R[i]=(A[i]-dtmp[i]+mod)%mod;}void get_mod(int *A,int *B,int *R,int n,int m){Divide(A,B,tmp,R,n,m);}void qiudao(int *A,int *res,int len){for (int i=1;i<len;++i) res[i-1]=(A[i]*i)%mod;res[len-1]=0;}void jifen(int *A,int *res,int len){for (int i=1;i<len;++i) res[i]=(A[i-1]*ny(i))%mod;res[0]=0;}void get_ln(int *A,int *res,int len){int inva[maxl],da[maxl],mul_num[maxl];memset(inva,0,sizeof(inva));get_inv(A,inva,len);qiudao(A,da,len);Mul(inva,da,mul_num,len,len);jifen(mul_num,res,len);}void get_exp(int *A,int *res,int len){if (len==1){res[0]=1;return;}get_exp(A,res,(len+1)>>1);int p=1,cnt=0;while (p<=len<<1) p<<=1,cnt++;for (rg int i=0;i<p;++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<(cnt-1));for (int i=0;i<len;++i) g[i]=A[i];for (int i=len;i<p;++i) g[i]=0;for (int i=0;i<p;++i) f[i]=0;get_ln(res,f,len);NTT(g,p,1),NTT(f,p,1),NTT(res,p,1);for (rg int i=0;i<p;++i) res[i]=((1-f[i]+g[i]+mod)%mod*res[i])%mod;NTT(res,p,-1);for (int i=len;i<p;++i) res[i]=0;}void get_pow(int *A,int *res,int len,int k){int C[maxl];get_ln(A,C,len);for (int i=0;i<len;++i) C[i]=(C[i]*k)%mod;get_exp(C,res,len);}
};
学会了这些多项式的算法之后,我们来看看这些算法的广大应用。
下篇
多项式学习笔记[二](全网最详细!有图有代码有解释有例题有总结!)相关推荐
- 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)
Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...
- 一、css清除浮动方法学习笔记总结(超详细,简单易懂)
** css清除浮动方法学习笔记总结(超详细,简单易懂) ** 问题: 上图中,由于container(父级元素)未设置高度,其内部子元素设置了float浮动,导致与container同级(也就是co ...
- 吴恩达《机器学习》学习笔记二——单变量线性回归
吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...
- amazeui学习笔记二(进阶开发4)--JavaScript规范Rules
amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...
- Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)
Table of Contents appendTo appendTo(source, target) 源代码 append prependTo prependTo源码 prepend ...
- Linux学习笔记 文件服务Vsftp详细介绍
Linux学习笔记 文件服务Vsftp详细介绍 知识点: 1.FTP使用TCP连接和TCP端口 2.在进行通信时,FTP需要建立两个TCP连接: 一个用于控制信息,TCP端口号缺省为21 一个用于数据 ...
- 二维码学习笔记(二) | 数据分析与数据编码
唠唠闲话 二维码笔记系列(原文地址): 『二维码学习笔记(一) | 二维码概述』 『二维码学习笔记(二) | 数据分析与数据编码』 『二维码学习笔记(三) | 纠错编码』 『二维码学习笔记(四) | ...
- 深度强化学习笔记(二)——Q-learning学习与二维寻路demo实现
深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 文章目录 深度强化学习笔记(二)--Q-learning学习与二维寻路demo实现 前言 理论 什么是Q-Learning 算 ...
- 学习笔记二.矩阵按键
#学习笔记二:GPIO的探索与矩阵按键 ##1.在配置cubemx时,对gpio的配置有开漏输出和推挽输出两种方式, ###这里有一篇文章(别人的文章)讲的很详细link戳这里跳转 通俗来讲,推挽输出 ...
最新文章
- python返回元组_python – numpy.where返回一个元组的目的是什么?
- SSM整合时配置文件的编写
- [云炬创业基础笔记]第二章创业者测试22
- RRT,RRT*,A*,Dijkstra,PRM算法
- web调试:ie缓存
- Windows 7下的Excel 2010同时打开多个独立的窗口
- Codeforces976D Degree Set 【构造】
- 从对工作流理论发展的理解到jBPM4的设计思想
- 你们真的会追汉纸么?!
- Atitit 身份证 证件编码规范
- 分享一个网盘:千脑网
- 服务器系统怎么么安装手绘板驱动,wacom数位板如何使用?wacom数位板驱动安装教程!...
- win11QQ文件另存为崩溃
- 废柴日记之国庆特辑:那些年我们一直分不清楚的近义词们②
- KNN代码学习:将iris.csv处理成bunch格式
- android平板 跑分软件,安卓平板拿啥比?M1 iPad Pro跑分公布:差距实在太大
- Web 应用程序安全检查表
- 《ASP.NET AJAX程序设计 第I卷 服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit》目录(最终定稿)...
- 【文献阅读】The role of news sentiment in oil futures returns and volatility forecasting
- ev6 ev8 ev4a加密视频破解翻录提取教程
热门文章
- 计算机网络 5电路交换
- windows下之定时执行bat脚本
- 洛谷P4942 小凯的数字
- 科技不总是冷冰冰,智能便携打印机让文字更有温度!——硬件方案篇
- Nginx 最实用的配置技巧!速看
- OCR EasyOCR + PaddleHub 光学字符识别(Optical Character Recognition, OCR)
- CT图像分割dicom文件与nii.gz文件预处理----窗宽(window width)和窗位(window level)的设置
- Redis设置密码,查看密码,修改密码,忘记密码。
- 【干货】今日头条的新闻推荐算法原理
- Java之乐观锁和悲观锁